Java Spring:将数据库配置从XML文件迁移到注释
我正在尝试将我的项目更新为最新版本的Spring、Hibernate等。我现在面临的问题是将数据库配置从旧的XML配置文件迁移到注释(我非常喜欢基于注释的配置)。以下是我的旧配置:Java Spring:将数据库配置从XML文件迁移到注释,java,spring,hibernate,Java,Spring,Hibernate,我正在尝试将我的项目更新为最新版本的Spring、Hibernate等。我现在面临的问题是将数据库配置从旧的XML配置文件迁移到注释(我非常喜欢基于注释的配置)。以下是我的旧配置: <!-- Configure SessionFactory --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <prope
<!-- 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 -->
/WEB-INF/hibernate.cfg.xml
org.hibernate.cfg.AnnotationConfiguration
有人知道如何仅使用注释配置sessionfactory和事务管理器吗?以下是我对Hibernate 4和spring 3.2的了解: 您需要为您的配置类使用
@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/”中感谢Jama的快速回复。我尝试尽可能多地使用“约定优先于配置”的范例来最小化配置。我现在发现,通过在属性文件中指定数据源属性,Spring将自动创建数据源bean。所以我不需要再定义它了。sessionFactory和transactionManager有类似的方法吗?数据库属性是用户定义的配置,因此Spring或Hibernate无法神奇地为您查找和创建数据源;)所以,杰玛,我让春天和冬眠变魔术;)。我现在有一个最小的配置,似乎工作得很好(到目前为止)。因为我不确定它是否完全正确,我将把它作为第二个解决方案发布下来。再次感谢您的回答;)太好了!我不知道在查看spring文档后,我还发现了其他属性: