簡體   English   中英

春季:將數據庫配置從XML文件遷移到注釋

[英]Spring: Migrating database configuration from XML file to annotation

我正在嘗試將項目更新為Spring,Hibernate等的最新版本,現在面臨的問題是數據庫配置從舊的XML配置文件遷移到注釋(我非常喜歡基於注釋的配置) )。 下面是我的舊配置:

<!-- Configure SessionFactory -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    destroy-method="close">
    <property name="driverClass" value="org.postgresql.Driver" />
    <property name="jdbcUrl" value="jdbc:postgresql://localhost:5432/mydatabase" />
    <property name="user" value="user" />
    <property name="password" value="password" />
</bean>

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource">
        <ref local="dataSource" />
    </property>
    <property name="packagesToScan" value="com.myproject.core.domain" />
    <property name="configLocation">
        <value>/WEB-INF/hibernate.cfg.xml</value>
    </property>
    <property name="configurationClass">
        <value>org.hibernate.cfg.AnnotationConfiguration</value>
    </property>
</bean>

<!-- enable the configuration of transactional behavior based on annotations -->
<tx:annotation-driven transaction-manager="transactionManager" />

<bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory">
        <ref local="sessionFactory" />
    </property>
</bean>

<bean
    class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor" />

<!-- END HIBERNATE CONFIG --> 

有誰知道如何僅使用注釋來配置sessionfactory和事務管理器嗎?

這是我在Hibernate 4和spring 3.2中所擁有的:您需要為配置類使用@EnableTransactionManagement

@Configuration
@EnableTransactionManagement
@PropertySource({ "classpath:application.properties" })
@ComponentScan({ "org.mysample.model" })
public class PersistenceConfig {

    @Autowired
    private Environment env;

    @Bean
    public LocalSessionFactoryBean sessionFactory() {
        LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
        sessionFactory.setDataSource(restDataSource());
        sessionFactory.setPackagesToScan(new String[] { "org.mysample.model" });
        sessionFactory.setHibernateProperties(hibernateProperties());

          return sessionFactory;
     }

      @Bean
      public DataSource restDataSource() {
         BasicDataSource dataSource = new BasicDataSource();
          dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName"));
          dataSource.setUrl(env.getProperty("jdbc.url"));
          dataSource.setUsername(env.getProperty("jdbc.username"));
          dataSource.setPassword(env.getProperty("jdbc.password"));
          return dataSource;
       }

       @Bean
       @Autowired
       public HibernateTransactionManager transactionManager(SessionFactory s) {
          HibernateTransactionManager txManager = new HibernateTransactionManager();
          txManager.setSessionFactory(s);
          return txManager;
       }
}

如果需要更多配置,可以通過@Bean進行注釋來添加它們。 這些是幾個依賴項,包括hibernate-core:4.3.5.Finaljavassist:3.18.1-GA

更新:如果您在application.properties文件中定義了一些配置,Spring會自動構造您的數據源和其他配置: 通用應用程序屬性

根據Jama的回答,我更新了配置,並嘗試將其最小化。 結果是一個配置類和一個屬性文件:

@EnableAutoConfiguration
@ComponentScan
@EnableAspectJAutoProxy
@EnableTransactionManagement
@PropertySource(value = { "classpath:/appcontext/application.properties" })
public class Application {
    @Bean
    @Autowired
    public LocalSessionFactoryBean sessionFactory(DataSource datasource) {
        LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
        sessionFactory.setDataSource(datasource);
        sessionFactory.setPackagesToScan(new String[] { "org.mysample.model" });

        return sessionFactory;
    }

    @Bean
    @Autowired
    public HibernateTransactionManager transactionManager(SessionFactory sessionFactory) {
        HibernateTransactionManager txManager = new HibernateTransactionManager();
        txManager.setSessionFactory(sessionFactory);
        return txManager;
    }
}

注意:該配置還啟用了aop支持。

該屬性文件包含:

#DataSource configuration
spring.datasource.url=jdbc:postgresql://localhost:5432/mydatabase
spring.datasource.username=dbUsername
spring.datasource.password=dbPassword
spring.datasource.driverClassName=org.postgresql.Driver

注意:屬性文件位於文件夾“ / src / main / resources / appcontext /”內。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM