Created
August 10, 2014 06:45
-
-
Save mismatch/bc003479a09d6289e80f to your computer and use it in GitHub Desktop.
Spring Boot. Multiple DB repositories configuration example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.Map; | |
import javax.sql.DataSource; | |
import org.springframework.beans.factory.annotation.Autowired; | |
import org.springframework.beans.factory.annotation.Qualifier; | |
import org.springframework.boot.autoconfigure.orm.jpa.EntityManagerFactoryBuilder; | |
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties; | |
import org.springframework.context.annotation.Bean; | |
import org.springframework.context.annotation.ComponentScan.Filter; | |
import org.springframework.context.annotation.Configuration; | |
import org.springframework.context.annotation.FilterType; | |
import org.springframework.data.jpa.repository.config.EnableJpaRepositories; | |
import org.springframework.orm.jpa.JpaTransactionManager; | |
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; | |
import org.springframework.transaction.PlatformTransactionManager; | |
import your.app.service.DbOneRepository; | |
import your.app.service.annotations.DbTwoRepository; | |
@Configuration | |
public class JpaRepositoriesConfig { | |
@Autowired | |
JpaProperties jpaProperties; | |
@Autowired @Qualifier("ds_one") | |
DataSource dsOne; | |
@Autowired @Qualifier("ds_two") | |
DataSource dsTwo; | |
@Bean(name = "emf_one") | |
LocalContainerEntityManagerFactoryBean entityManagerFactoryOne( | |
EntityManagerFactoryBuilder factory) { | |
return factory.dataSource(mainDataSource) | |
.packages("your.app.domain1") | |
.properties(getVendorProperties(mainDataSource)).build(); | |
} | |
@Bean(name = "tx_manager_one") | |
PlatformTransactionManager transactionManagerOne(EntityManagerFactoryBuilder factory) { | |
return new JpaTransactionManager(entityManagerFactoryOne(factory).getObject()); | |
} | |
@Bean(name = "emf_two") | |
LocalContainerEntityManagerFactoryBean entityManagerFactoryTwo( | |
EntityManagerFactoryBuilder factory) { | |
return factory.dataSource(dataSource) | |
.packages("your.app.domain2") | |
.properties(getVendorProperties(dataSource)).build(); | |
} | |
@Bean(name = "tx_manager_two") | |
PlatformTransactionManager transactionManagerTwo(EntityManagerFactoryBuilder factory) { | |
return new JpaTransactionManager(entityManagerFactoryTwo(factory).getObject()); | |
} | |
private Map<String, String> getVendorProperties(DataSource dataSource) { | |
return jpaProperties.getHibernateProperties(dataSource); | |
} | |
@Configuration | |
@EnableJpaRepositories(entityManagerFactoryRef = "emf_one", transactionManagerRef = "tx_manager_one", includeFilters = | |
@Filter(type = FilterType.ASSIGNABLE_TYPE, value = DbOneRepository.class)) | |
static class DbOnepaRepositoriesConfig {} | |
@Configuration | |
@EnableJpaRepositories(entityManagerFactoryRef = "emf_two", transactionManagerRef = "tx_manager_two", | |
includeFilters = @Filter(DbTwoRepository.class)) | |
static class DbTwoJpaRepositoriesConfig {} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment