springboot druid 多數據源配置


由於工作當中,需要配置雙數據源進行數據同步,以目錄進行區別主副庫的編寫。這里記錄一下,方便大家。

1、pom配置

   


  
  
  
          
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid-spring-boot-starter.version}</version>
</dependency>

 

 

2、yml配置

 

spring:
datasource:
druid:
primary:
driver-class-name: oracle.jdbc.driver.OracleDriver
       url: jdbc:oracle:thin:@192.168.1.1:1521:orcl # 數據庫名稱
       username: test
password: 123456
min-idle: 1 # 數據庫連接池的最小維持連接數
       initial-size: 5 # 初始化連接數
       max-active: 8
max-wait: 60000
secondary:
driver-class-name: oracle.jdbc.driver.OracleDriver # 驅動包 todo 光谷庫
       url: jdbc:oracle:thin:@192.168.1.2:1521:orcl # 數據庫名稱
       username: test
password: inner
min-idle: 1 # 數據庫連接池的最小維持連接數
       initial-size: 5 # 初始化連接數
       max-active: 8
max-wait: 60000

 

 

 

 

3、配置類編寫 

   

@Configuration
public class DataSourceConfig {
@Bean(name = "primaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.druid.primary")
@Primary
public DruidDataSource primaryDataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean
@Primary
public SqlSessionFactory primarySqlSessionFactory(@Qualifier("primaryDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
bean.setMapperLocations(resolver.getResources(
"classpath*:mybatis/mapping/primary/*.xml"));
bean.setConfigLocation(resolver.getResource("classpath:mybatis/mybatis.cfg.xml"));
return bean.getObject();
}
@Bean
@Primary
public DataSourceTransactionManager primaryTransactionManager(@Qualifier("primaryDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean
@Primary
public SqlSessionTemplate primarySqlSessionTemplate(@Qualifier("primarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}






@Bean(name = "secondaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.druid.secondary")
public DruidDataSource secondaryDataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean
public SqlSessionFactory secondarySqlSessionFactory(@Qualifier("secondaryDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
bean.setMapperLocations(resolver.getResources(
"classpath*:mybatis/mapping/secondary/*.xml"));
bean.setConfigLocation(resolver.getResource("classpath:mybatis/mybatis.cfg.xml"));
return bean.getObject();
}
@Bean
public DataSourceTransactionManager secondaryTransactionManager(@Qualifier("secondaryDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean
public SqlSessionTemplate secondarySqlSessionTemplate(@Qualifier("secondarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}


 

 

 

 

 

 

4、MyBatisMapperScannerConfig 配置 

  

@Configuration
public class MyBatisMapperScannerConfig {
@Bean
public MapperScannerConfigurer primaryMyBatisMapperScannerConfig() {
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
mapperScannerConfigurer.setSqlSessionFactoryBeanName("primarySqlSessionFactory");
mapperScannerConfigurer.setSqlSessionTemplateBeanName("primarySqlSessionTemplate");
mapperScannerConfigurer.setBasePackage("com.onecloud.**.mapper.primary");
buildProperties(mapperScannerConfigurer);
return mapperScannerConfigurer;
}
@Bean
public MapperScannerConfigurer secondaryMyBatisMapperScannerConfig() {
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
mapperScannerConfigurer.setSqlSessionFactoryBeanName("secondarySqlSessionFactory");
mapperScannerConfigurer.setSqlSessionTemplateBeanName("secondarySqlSessionTemplate");
mapperScannerConfigurer.setBasePackage("com.onecloud.**.mapper.secondary");
buildProperties(mapperScannerConfigurer);
return mapperScannerConfigurer;
}

private void buildProperties(MapperScannerConfigurer mapperScannerConfigurer){
//初始化掃描器的相關配置,這里我們要創建一個Mapper的父類
Properties properties = new Properties();
properties.setProperty("mappers", "tk.mybatis.mapper.common.Mapper");
properties.setProperty("notEmpty", "false");
properties.setProperty("IDENTITY", "ORACLE");
//主鍵UUID回寫方法執行順序 默認AFTER
properties.setProperty("ORDER","BEFORE");
mapperScannerConfigurer.setProperties(properties);
}



}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM