【发布时间】:2017-12-18 12:44:50
【问题描述】:
晚上好, 处理两个或多个数据库的正确和常用方法是什么?
考虑这个 HibernateConfiguration 类只配置一个数据源:
@Configuration @EnableTransactionManagement
@PropertySource(value = { "classpath:hibernate.properties" })
public class HibernateConfiguration {
@Autowired
private Environment env;
@Bean
public DataSource getDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
// ... setting data source
return dataSource;
}
private Properties getHibernateProperties() {
Properties properties = new Properties();
// ... setting Hibernate properties
return properties;
}
@Bean
public LocalSessionFactoryBean getSessionFactory() {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(getDataSource());
sessionFactory.setPackagesToScan(new String[] { "POJOs'" });
sessionFactory.setHibernateProperties(getHibernateProperties());
return sessionFactory;
}
@Bean public HibernateTransactionManager transactionManager(SessionFactory sf) {
HibernateTransactionManager htm = new HibernateTransactionManager();
htm.setSessionFactory(sf);
return htm;
}
}
是否建议让一个类配置一个数据源?或者一次配置就足够了?如何在 Dao 类中指定将使用哪个 SessionFactory?如果在两个不同的托管服务器上切换两个完全相同的数据库,推荐的方法是什么?
示例 DAO。首先我需要在Foo 和Bar 之间切换。
@Repository
public class RepositoryImpl implements RepositoryDao {
@Autowired // Here I need to switch between databases "foo" and "bar"
private SessionFactory sessionFactory;
...
我需要在示例数据库Foo 上修复第二个。
@Repository
public class FooImpl implements FooDao {
@Autowired // Here I need fixed on "Foo"
private SessionFactory sessionFactory;
【问题讨论】:
-
两个或更多的数据库基本上只是意味着两个或更多的数据存储。你会使用spring-data吗?
-
我只使用 Spring Core、Spring ORM 和 Hibernate 作为问题下方的标签:)
-
可以在sessionFactory注入中添加
@Qualifier来区分2个工厂。所以我建议为每个数据源配置 2 个配置类,包括 2 个会话和 2 个事务管理器。 -
用你的cmets,你回答了我。谢谢你:)
-
不客气!
标签: java mysql spring hibernate datasource