[英]How to go from XML Spring scheduling configuration to annotation/code configuration?
[英]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.Final和javassist: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.