
- "1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <parent>
- <artifactId>multi-datasource-parentartifactId>
- <groupId>com.ganbogroupId>
- <version>1.0-SNAPSHOTversion>
- parent>
-
- <modelVersion>4.0.0modelVersion>
-
- <artifactId>multi-datasource-configartifactId>
-
- <properties>
- <maven.compiler.source>8maven.compiler.source>
- <maven.compiler.target>8maven.compiler.target>
- properties>
-
- <dependencies>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-webartifactId>
- dependency>
-
- <dependency>
- <groupId>com.baomidougroupId>
- <artifactId>mybatis-plus-boot-starterartifactId>
- <version>3.3.1version>
- dependency>
-
- <dependency>
- <groupId>com.baomidougroupId>
- <artifactId>mybatis-plus-generatorartifactId>
- <version>3.3.1.tmpversion>
- dependency>
-
- <dependency>
- <groupId>mysqlgroupId>
- <artifactId>mysql-connector-javaartifactId>
- <scope>runtimescope>
- dependency>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-testartifactId>
- <scope>testscope>
- dependency>
- <dependency>
- <groupId>org.projectlombokgroupId>
- <artifactId>lombokartifactId>
- <optional>trueoptional>
- dependency>
- dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-maven-pluginartifactId>
- plugin>
- plugins>
- build>
-
- project>
- package com.multidb.configdemo.config;
-
- import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
- import org.apache.ibatis.session.SqlSessionFactory;
- import org.mybatis.spring.SqlSessionTemplate;
- import org.mybatis.spring.annotation.MapperScan;
- import org.springframework.beans.factory.annotation.Qualifier;
- import org.springframework.boot.context.properties.ConfigurationProperties;
- import org.springframework.boot.jdbc.DataSourceBuilder;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.context.annotation.Primary;
- import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
- import org.springframework.jdbc.datasource.DataSourceTransactionManager;
-
- import javax.sql.DataSource;
-
- @Configuration
- @MapperScan(basePackages = "com.multidb.configdemo.dao.user", sqlSessionTemplateRef = "userSqlSessionTemplate")
- public class DataSourceUserConfig {
-
-
- @Primary //设置主数据源
- @Bean(name = "userDataSource")
- @ConfigurationProperties(prefix = "spring.datasource.user")
- public DataSource userDataSource() {
- return DataSourceBuilder.create().build();
- }
-
- @Bean(name = "userSqlSessionFactory")
- public SqlSessionFactory userSqlSessionFactory(@Qualifier("userDataSource") DataSource dataSource) throws Exception {
-
- //工厂bean SqlSessionFactory
- MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
-
- //设置数据源
- bean.setDataSource(dataSource);
-
- //加载映射文件
- bean.setMapperLocations(new PathMatchingResourcePatternResolver().
- getResources("classpath*:mapper/user/*.xml"));
- return bean.getObject();
- }
-
- // 数据源事务管理器
- public DataSourceTransactionManager db1TransactionManager(@Qualifier("userDataSource") DataSource dataSource) {
- return new DataSourceTransactionManager(dataSource);
- }
-
- @Bean(name = "userSqlSessionTemplate")
- public SqlSessionTemplate userSqlSessionTemplate(@Qualifier("userSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
- return new SqlSessionTemplate(sqlSessionFactory);
- }
-
- }
- package com.multidb.configdemo.config;
-
- import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
- import org.apache.ibatis.session.SqlSessionFactory;
- import org.mybatis.spring.SqlSessionTemplate;
- import org.mybatis.spring.annotation.MapperScan;
- import org.springframework.beans.factory.annotation.Qualifier;
- import org.springframework.boot.context.properties.ConfigurationProperties;
- import org.springframework.boot.jdbc.DataSourceBuilder;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
- import org.springframework.jdbc.datasource.DataSourceTransactionManager;
-
- import javax.sql.DataSource;
-
-
- @Configuration
- @MapperScan(basePackages = "com.multidb.configdemo.dao.order", sqlSessionTemplateRef = "orderSqlSessionTemplate")
- public class DataSourceOrderConfig {
-
-
- // @Primary
- @Bean(name = "orderDataSource")
- @ConfigurationProperties(prefix = "spring.datasource.order")
- public DataSource orderDataSource() {
- return DataSourceBuilder.create().build();
- }
-
- @Bean(name = "orderSqlSessionFactory")
- public SqlSessionFactory orderSqlSessionFactory(@Qualifier("orderDataSource") DataSource dataSource) throws Exception {
-
- //工厂bean SqlSessionFactory
- MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
-
- //设置数据源
- bean.setDataSource(dataSource);
-
- //加载映射文件
- bean.setMapperLocations(new PathMatchingResourcePatternResolver().
- getResources("classpath*:mapper/order/*.xml"));
- return bean.getObject();
- }
-
- // 数据源事务管理器
- public DataSourceTransactionManager db1TransactionManager(@Qualifier("orderDataSource") DataSource dataSource) {
- return new DataSourceTransactionManager(dataSource);
- }
-
- @Bean(name = "orderSqlSessionTemplate")
- public SqlSessionTemplate orderSqlSessionTemplate(@Qualifier("orderSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
- return new SqlSessionTemplate(sqlSessionFactory);
- }
-
- }

-
- spring:
- datasource:
- user:
- driver-class-name: com.mysql.cj.jdbc.Driver
- username: root
- password: root
- jdbc-url: jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=false
- order:
- driver-class-name: com.mysql.cj.jdbc.Driver
- username: root
- password: root
- jdbc-url: jdbc:mysql://127.0.0.1:3306/order?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=false
-
- mybatis-plus:
- # mapper-locations: classpath:mapper/*.xml # xml文件路径
- configuration:
- map-underscore-to-camel-case: true # 驼峰转换
- cache-enabled: false # 是否开启缓存
- log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 打印sql
- # global-config: # 全局配置
- # db-column-underline: true # 数据库字段驼峰下划线转换
- # id-type: 0 # id自增类型(数据库id自增)
-
- <dependency>
- <groupId>com.baomidougroupId>
- <artifactId>dynamic-datasource-spring-boot-starterartifactId>
- <version>3.3.1version>
- dependency>
-
-
- spring:
- datasource:
- dynamic:
- primary: user #设置默认的数据源或者数据源组,默认值即为master
- strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
- datasource:
- user:
- url: jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=false
- username: root
- password: root
- driver-class-name: com.mysql.jdbc.Driver #3.2.0开始支持SPI可省略此配置
- order:
- url: jdbc:mysql://127.0.0.1:3306/order?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=false
- username: root
- password: root
- driver-class-name: com.mysql.jdbc.Driver
-
-
- mybatis-plus:
- mapper-locations: classpath:mapper/**/*.xml #xml文件路径
- configuration:
- map-underscore-to-camel-case: true #驼峰转换
- cache-enabled: false #是否开启缓存
- log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql
- # global-config: #全局配置
- # db-column-underline: true #数据库字段驼峰下划线转换
- # id-type: 0 #id自增类型(数据库id自增)
-
- import com.baomidou.dynamic.datasource.annotation.DS;
- import com.multidb.annotationdemo.dao.order.OrderDao;
- import com.multidb.annotationdemo.entity.order.Order;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
-
- @Service
- @DS("order")
- public class OrderService {
-
- @Autowired
- OrderDao orderDao;
-
- public Order getOrder() {
- return orderDao.selectByPrimaryKey(1L);
- }
-
- }
- package com.multidb.annotationdemo.service;
-
-
- import com.baomidou.dynamic.datasource.annotation.DS;
- import com.multidb.annotationdemo.dao.user.UserDao;
- import com.multidb.annotationdemo.entity.user.User;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
-
- @Service
- @DS("user")
- public class UserService {
-
- @Autowired
- UserDao userDao;
-
- public User getUser() {
- return userDao.selectByPrimaryKey(1L);
- }
-
- }
- @SpringBootApplication
- @MapperScan("com.multidb.annotationdemo.dao.**")
- public class Datasource1Application {
-
- public static void main(String[] args) {
- SpringApplication.run(Datasource1Application.class, args);
- }
-
- }
- @RestController
- public class IndexController {
-
- @Autowired
- UserService userService;
- @Autowired
- OrderService orderService;
-
- @GetMapping("/getUser")
- public User getUser() {
- return userService.getUser();
- }
-
- @GetMapping("/getOrder")
- public Order getOrder() {
- return orderService.getOrder();
- }
-
- }
项目源码以及数据库脚本: multi-datasource-parent: Spring boot 整合 MyBatis 实现多数据源。