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文件放入上面配置的对应的路径下,启动项目即可

posted @ 2022-04-13 15:07  wang_longan  阅读(6897)  评论(0编辑  收藏  举报