springboot配置多個數據源


序言

業務場景復雜時,可能會用到多個數據源,多數據源可以理解為多數據庫,甚至可以是多個不同類型的數據庫,比如一個是MySql,一個是Oracle,原理是相同的。

多數據源配置

1、配置多數據庫

在springboot配置文件中填寫數據庫連接參數

spring:
  datasource:
    db1:
      driver-class-name: com.mysql.cj.jdbc.Driver
      jdbc-url: jdbc:mysql://127.0.0.1:3306/db1
      username: root
      password: root
    db2:
      driver-class-name: com.mysql.cj.jdbc.Driver
      jdbc-url: jdbc:mysql://127.0.0.1:3306/db2
      username: root
      password: root
    hikari:
      maximum-pool-size: 5
      minimumIdle: 5
      idleTimeout: 600000
      connectionTimeout: 30000
      maxLifetime: 1800000

這里是配置mysql數據庫的兩個schema,db1和db2,當然也可以配置多個不同的數據庫實例,修改相應的參數即可

2、將配置的多數據源與springboot整合

db1數據源

 1 package com.test.demo.config.datasource;
 2 
 3 
 4 import org.apache.ibatis.session.SqlSessionFactory;
 5 import org.mybatis.spring.SqlSessionFactoryBean;
 6 import org.mybatis.spring.SqlSessionTemplate;
 7 import org.mybatis.spring.annotation.MapperScan;
 8 import org.springframework.beans.factory.annotation.Qualifier;
 9 import org.springframework.boot.context.properties.ConfigurationProperties;
10 import org.springframework.boot.jdbc.DataSourceBuilder;
11 import org.springframework.context.annotation.Bean;
12 import org.springframework.context.annotation.Configuration;
13 import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
14 import org.springframework.jdbc.datasource.DataSourceTransactionManager;
15 import org.springframework.transaction.support.TransactionTemplate;
16 
17 import javax.sql.DataSource;
18 
19 @Configuration
20 @MapperScan(basePackages = "com.test.demo.mapper.db1", sqlSessionTemplateRef = "db1SqlSessionTemplate", sqlSessionFactoryRef = "db1SqlSessionFactory")
21 public class Db1DataSourceConfig {
22     @Bean
23     @ConfigurationProperties(prefix = "spring.datasource.db1")
24     public DataSource db1DataSource() {
25         return DataSourceBuilder.create().build();
26     }
27 
28     @Bean
29     public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {
30         SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
31         bean.setDataSource(dataSource);
32         org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
33         configuration.setMapUnderscoreToCamelCase(true);
34         bean.setConfiguration(configuration);
35         bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/db1/*.xml"));
36         return bean.getObject();
37     }
38 
39     @Bean
40     public DataSourceTransactionManager db1TransactionManager(@Qualifier("db1DataSource") DataSource dataSource) {
41         return new DataSourceTransactionManager(dataSource);
42     }
43 
44     @Bean
45     public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
46         return new SqlSessionTemplate(sqlSessionFactory);
47     }
48 
49     @Bean
50     public TransactionTemplate db1TransactionTemplate(@Qualifier("db1TransactionManager") DataSourceTransactionManager dataSourceTransactionManager) {
51         return new TransactionTemplate(dataSourceTransactionManager);
52     }
53 }
View Code

db2數據源

 1 package com.test.demo.config.datasource;
 2 
 3 
 4 import org.apache.ibatis.session.SqlSessionFactory;
 5 import org.mybatis.spring.SqlSessionFactoryBean;
 6 import org.mybatis.spring.SqlSessionTemplate;
 7 import org.mybatis.spring.annotation.MapperScan;
 8 import org.springframework.beans.factory.annotation.Qualifier;
 9 import org.springframework.boot.context.properties.ConfigurationProperties;
10 import org.springframework.boot.jdbc.DataSourceBuilder;
11 import org.springframework.context.annotation.Bean;
12 import org.springframework.context.annotation.Configuration;
13 import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
14 import org.springframework.jdbc.datasource.DataSourceTransactionManager;
15 import org.springframework.transaction.support.TransactionTemplate;
16 
17 import javax.sql.DataSource;
18 
19 @Configuration
20 @MapperScan(basePackages = "com.test.demo.mapper.db2", sqlSessionTemplateRef = "db2SqlSessionTemplate", sqlSessionFactoryRef = "db2SqlSessionFactory")
21 public class Db2DataSourceConfig {
22     /**
23      * 配置db2的數據源
24      * @return
25      */
26     @Bean
27     @ConfigurationProperties(prefix = "spring.datasource.db2")
28     public DataSource db2DataSource() {
29         return DataSourceBuilder.create().build();
30     }
31 
32     /**
33      * 配置該數據源的sql會話工廠
34      * @param dataSource
35      * @return
36      * @throws Exception
37      */
38     @Bean
39     public SqlSessionFactory db2SqlSessionFactory(@Qualifier("db2DataSource") DataSource dataSource) throws Exception {
40         SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
41         bean.setDataSource(dataSource);
42         org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
43         configuration.setMapUnderscoreToCamelCase(true);
44         bean.setConfiguration(configuration);
45 
46         bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/db2/*.xml"));
47         return bean.getObject();
48     }
49 
50 
51     /**
52      * 配置該數據源的事務管理器
53      * @param dataSource
54      * @return
55      */
56     @Bean
57     public DataSourceTransactionManager db2TransactionManager(@Qualifier("db2DataSource") DataSource dataSource) {
58         return new DataSourceTransactionManager(dataSource);
59     }
60 
61     /**
62      * 配置db2數據源的sql會話模板
63      * @param sqlSessionFactory
64      * @return
65      */
66     @Bean
67     public SqlSessionTemplate db2SqlSessionTemplate(@Qualifier("db2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
68         return new SqlSessionTemplate(sqlSessionFactory);
69     }
70 
71 
72     /**
73      * 配置db2數據源的事務模板
74      * @param dataSourceTransactionManager
75      * @return
76      */
77     @Bean
78     public TransactionTemplate db2TransactionTemplate(@Qualifier("db2TransactionManager") DataSourceTransactionManager dataSourceTransactionManager) {
79         return new TransactionTemplate(dataSourceTransactionManager);
80     }
81 }
View Code

3、使用

分別將不同數據源的mapper xml文件放入上面配置的對應的路徑下,啟動項目即可


免責聲明!

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



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