Java Spring和Hibernate与多个数据库

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

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

考虑此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,以及在两个不同的托管服务器上切换两个完全相同的数据库时,建议采用什么方法

示例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个事务管理器。谢谢:)不客气!