Spring bootマルチデータソース構成(Mybatics+JPA)
8092 ワード
Spring boot構成データソース
ただし、***primary***secondary***はデータソース構成であり、複数構成可能です.
データ・ソース構成アイテム
@Primary
@Primary
データ・ソース構成項目の内容-primary
@EnableJpaRepositories
@MapperScan
データ・ソース構成アイテムの内容-Secondary
spring:
mvc:
favicon:
enabled: false
datasource:
primary:
username: root
password: root
jdbc-url: mysql://127.0.0.1:3306/a?useUnicode=true
driver-class-name: com.mysql.jdbc.Driver
dbcp2:
initial-size: 5
min-idle: 5
max-idle: 100
max-wait-millis: 10000
validation-query: SELECT 1
secondary:
username: root
password: root
jdbc-url: mysql://127.0.0.1:3306/b?useUnicode=true
driver-class-name: com.mysql.jdbc.Driver
dbcp2:
initial-size: 5
min-idle: 5
max-idle: 100
max-wait-millis: 10000
validation-query: SELECT 1
ただし、***primary***secondary***はデータソース構成であり、複数構成可能です.
データ・ソース構成アイテム
@Configuration
public class DataSourceConfig {
@Primary
@Bean(name="primaryDataSource")
@Qualifier("primaryDataSource")
@ConfigurationProperties(prefix="spring.datasource.primary")// application.yml
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name="secondaryDataSource")
@Qualifier("secondaryDataSource")
@ConfigurationProperties(prefix="spring.datasource.secondary")// application.yml
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
}
@Primary
:
@Primary
: ,
データ・ソース構成項目の内容-primary
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef="entityManagerFactoryPrimary",
transactionManagerRef="transactionManagerPrimary")
@EntityScan(basePackages= "com.lance.server.*.model")
@MapperScan(basePackages = "com.lance.server.*.dao", sqlSessionTemplateRef = "primarySqlSessionTemplate")
public class PrimaryConfig {
@Autowired
@Qualifier("primaryDataSource") // DataSourceConfig primaryDataSource
private DataSource primaryDataSource;
/** JPA ***/
@Primary
@Bean(name="entityManagerFactoryPrimary")
public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary(EntityManagerFactoryBuilder build) {
return build.dataSource(primaryDataSource).
packages("com.lance.server.*.model").
persistenceUnit("primaryPersistenceUnit").
build();
}
@Primary
@Bean(name = "entityManagerPrimary")
public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
return entityManagerFactoryPrimary(builder).getObject().createEntityManager();
}
@Primary
@Bean(name = "transactionManagerPrimary")
public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {
return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject());
}
/**mybatits ***/
/***
* Mybatics
* @author Lance [email protected]
* @date 2019-09-21 11:58
* @param
* @return org.apache.ibatis.session.SqlSessionFactory
*
* */
@Primary
@Bean(name = "primarySqlSessionFactory")
public SqlSessionFactory primarySqlSessionFactory(@Qualifier("primaryDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath:mapper/primary/**/*.xml"));
return sqlSessionFactoryBean.getObject();
}
/***
* Mybatics
* @author Lance [email protected]
* @date 2019-09-21 11:58
* @param
* @return org.springframework.jdbc.datasource.DataSourceTransactionManager
*
* */
@Primary
@Bean(name = "primaryDataSourceTransactionManager")
public DataSourceTransactionManager primaryDataSourceTransactionManager(@Qualifier("primaryDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
/***
* mybatics
* @author Lance [email protected]
* @date 2019-09-21 11:57
* @param sqlSessionFactory
* @return org.mybatis.spring.SqlSessionTemplate
*
* */
@Primary
@Bean(name = "primarySqlSessionTemplate")
public SqlSessionTemplate primarySqlSessionTemplate(@Qualifier("primarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
@EnableJpaRepositories
:JPA ,
@MapperScan
:Mybatics , SQL Session , , `@Primary` SQL Session
データ・ソース構成アイテムの内容-Secondary
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "entityManagerFactorySecondary",
transactionManagerRef = "transactionManagerSecondary")
@EntityScan(basePackages = "com.lance.server.secondary.**.model")
@MapperScan(basePackages = "com.lance.server.secondary.**.dao", sqlSessionTemplateRef = "secondarySqlSessionTemplate")
public class SecondaryConfig {
@Autowired
@Qualifier("secondaryDataSource")
private DataSource secondaryDataSource;
/** JPA ***/
@Bean(name = "entityManagerFactorySecondary")
public LocalContainerEntityManagerFactoryBean entityManagerFactorySecondary(EntityManagerFactoryBuilder build) {
return build.dataSource(secondaryDataSource).
packages("com.lance.server.secondary.**.model").
persistenceUnit("secondaryPersistenceUnit").
build();
}
@Bean(name = "entityManagerSecondary")
public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
return entityManagerFactorySecondary(builder).getObject().createEntityManager();
}
@Bean(name = "transactionManagerSecondary")
public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {
return new JpaTransactionManager(entityManagerFactorySecondary(builder).getObject());
}
/***
* Mybatics
* @author Lance [email protected]
* @date 2019-09-21 11:58
* @param
* @return org.apache.ibatis.session.SqlSessionFactory
*
* */
@Bean(name = "secondarySqlSessionFactory")
public SqlSessionFactory secondarySqlSessionFactory(@Qualifier("secondaryDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath:mapper/secondary/**/*.xml"));
return sqlSessionFactoryBean.getObject();
}
/***
* Mybatics
* @author Lance [email protected]
* @date 2019-09-21 11:58
* @param
* @return org.springframework.jdbc.datasource.DataSourceTransactionManager
*
* */
@Bean(name = "secondaryDataSourceTransactionManager")
public DataSourceTransactionManager secondaryDataSourceTransactionManager(@Qualifier("secondaryDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
/***
* mybatics
* @author Lance [email protected]
* @date 2019-09-21 11:57
* @param sqlSessionFactory
* @return org.mybatis.spring.SqlSessionTemplate
*
* */
@Bean(name = "secondarySqlSessionTemplate")
public SqlSessionTemplate secondarySqlSessionTemplate(@Qualifier("secondarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}