I have a spring boot application that access two different databases.
So, I have two packages of models, specifics for each databases.
when I use orm.xml file with result set mapping specifying the class that will be mapped for the query, my application stops to start. I understand it happens because each database config can see only his model package.
My question is, how can I specify to the database config which orm it should use?
My 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);
}
}
My 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);
}
}