Spring数据 - 配置两个不同的orm.xml文件

时间:2017-10-04 19:45:09

标签: java hibernate orm spring-data spring-data-jpa

我有一个可以访问两个不同数据库的Spring启动应用程序。

所以,我有两个模型包,每个数据库的细节。

当我使用带结果集映射的orm.xml文件指定将为查询映射的类时,我的应用程序停止启动。据我所知,因为每个数据库配置只能看到他的模型包。

我的问题是,如何指定数据库配置应该使用哪个orm?

我的dbConfig1

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
        entityManagerFactoryRef = "entityManagerFactory",
        basePackages = { "br.com.midwayfinanceira.microservices.cartao.sicc.repository" }
        )
public class SiccDbConfig {

    @Value(value="${spring.datasource.password}")
    private String password;

    @Value(value="${spring.datasource.username}")
    private String user;

    @Value(value="${spring.datasource.url}")
    private String url;

    @Value(value="${spring.datasource.driver-class-name}")
    private String driverClassName;

    @Primary
    @Bean(name = "dataSource")
    public DataSource dataSource() {
        return DataSourceBuilder.create()
                .password(CriptografiaHelper.decriptaAES128(password))
                .username(user)
                .driverClassName(driverClassName)
                .url(url)
                .build();
    }

    @Primary
    @Bean(name = "entityManagerFactory")
    public LocalContainerEntityManagerFactoryBean 
    entityManagerFactory(
            EntityManagerFactoryBuilder builder,
            @Qualifier("dataSource") DataSource dataSource
            ) {
        Map<String, String> map = new HashMap<>();
        map.put("mapping-file", "META-INF/orm-sicc.xml");
        return builder
                .dataSource(dataSource)
                .packages("br.com.midwayfinanceira.microservices.cartao.sicc.model")
                .persistenceUnit("sicc")
                .properties(map)
                .build();
    }

    @Primary
    @Bean(name = "transactionManager")
    public PlatformTransactionManager transactionManager(
            @Qualifier("entityManagerFactory") EntityManagerFactory 
            entityManagerFactory
            ) {
        return new JpaTransactionManager(entityManagerFactory);
    }

}

我的dbconfig2

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
        entityManagerFactoryRef = "siccBandEntityManagerFactory",
        transactionManagerRef = "siccBandTransactionManager",
        basePackages = { "br.com.midwayfinanceira.microservices.cartao.siccband.repository" }
        )
public class SiccBandDbConfig {

    @Value(value="${spring.datasource.password}")
    private String password;
    @Value(value="${spring.datasource.username}")
    private String user;
    @Value(value="${siccband.datasource.url}")
    private String url;
    @Value(value="${spring.datasource.driver-class-name}")
    private String driverClassName;

    @Bean(name = "siccBandDataSource")
    public DataSource dataSource() {
        return DataSourceBuilder.create()
                .password(CriptografiaHelper.decriptaAES128(password))
                .username(user)
                .driverClassName(driverClassName)
                .url(url)
                .build();
    }

    @Bean(name = "siccBandEntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean 
    siccBandEntityManagerFactory(
            EntityManagerFactoryBuilder builder,
            @Qualifier("siccBandDataSource") DataSource dataSource
            ) {
        return
                builder
                .dataSource(dataSource)
                .packages("br.com.midwayfinanceira.microservices.cartao.siccband.model")
                .persistenceUnit("siccBand")
                .build();
    }

    @Bean(name = "siccBandTransactionManager")
    public PlatformTransactionManager siccBandTransactionManager(
            @Qualifier("siccBandEntityManagerFactory") EntityManagerFactory
            siccBandEntityManagerFactory
            ) {
        return new JpaTransactionManager(siccBandEntityManagerFactory);
    }
}

0 个答案:

没有答案