gpt4 book ai didi

java - 具有多个数据库的 Spring 和 Hibernate

转载 作者:行者123 更新时间:2023-11-28 23:13:05 25 4
gpt4 key购买 nike

晚上好处理两个或多个数据库的正确和常用方法是什么?

考虑这个仅配置一个数据源的 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。首先,我需要在 FooBar 之间切换。

@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();
}

Spring multiple datasources config

其他方法可能是:从 persistence.xml 加载不同的映射 (orm.xml) 或在实体类中引用不同的模式。

关于java - 具有多个数据库的 Spring 和 Hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45085624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com