Java Spring和Hibernate与多个数据库
晚上好,, 处理两个或多个数据库的正确和常用方法是什么 考虑此HibernateConfiguration类仅配置一个数据源:Java Spring和Hibernate与多个数据库,java,mysql,spring,hibernate,datasource,Java,Mysql,Spring,Hibernate,Datasource,晚上好,, 处理两个或多个数据库的正确和常用方法是什么 考虑此HibernateConfiguration类仅配置一个数据源: @Configuration @EnableTransactionManagement @PropertySource(value = { "classpath:hibernate.properties" }) public class HibernateConfiguration { @Autowired private Environment e
@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,以及在两个不同的托管服务器上切换两个完全相同的数据库时,建议采用什么方法
示例DAOs。首先,我需要在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;
一种方法
@Bean
@Primary
@ConfigurationProperties("app.datasource.foo")
public DataSourceProperties fooDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@Primary
@ConfigurationProperties("app.datasource.foo")
public DataSource fooDataSource() {
return fooDataSourceProperties().initializeDataSourceBuilder().build();
}
@Bean
@ConfigurationProperties("app.datasource.bar")
public BasicDataSource barDataSource() {
return (BasicDataSource) DataSourceBuilder.create()
.type(BasicDataSource.class).build();
}
另一种方法可能是:从
persistence.xml
加载不同的映射(orm.xml
),或者在实体类中引用不同的模式。两个或多个数据库基本上只意味着两个或多个数据存储。您会使用spring数据吗?我只使用spring Core、spring ORM和Hibernate作为问题下方的标记:)您可以向sessionFactory注入添加@Qualifier
,以区分两个工厂。所以我建议每个数据源使用2个配置类,包含2个会话和2个事务管理器。谢谢:)不客气!