Spring配置动态数据库

打印 上一主题 下一主题

主题 899|帖子 899|积分 2697

前言
本文主要介绍使用spring boot 配置多个数据库,即动态数据库开始搭建
首先创建一个SpringWeb项目——dynamicdb(spring-boot2.5.7)
然后引入相关依赖lombok、swagger2、mybatis-plus,如下:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4.     <modelVersion>4.0.0</modelVersion>
  5.     <parent>
  6.         <groupId>org.springframework.boot</groupId>
  7.         <artifactId>spring-boot-starter-parent</artifactId>
  8.         <version>2.5.7</version>
  9.         <relativePath/>
  10.     </parent>
  11.     <groupId>com.example</groupId>
  12.     <artifactId>dynamicdb</artifactId>
  13.     <version>0.0.1-SNAPSHOT</version>
  14.     <name>dynamicdb</name>
  15.     <description>dynamicdb</description>
  16.     <properties>
  17.         <java.version>8</java.version>
  18.     </properties>
  19.     <dependencies>
  20.         <dependency>
  21.             <groupId>org.springframework.boot</groupId>
  22.             <artifactId>spring-boot-starter-web</artifactId>
  23.         </dependency>
  24.         <dependency>
  25.             <groupId>org.springframework.boot</groupId>
  26.             <artifactId>spring-boot-starter-test</artifactId>
  27.             <scope>test</scope>
  28.         </dependency>
  29.         <dependency>
  30.             <groupId>org.projectlombok</groupId>
  31.             <artifactId>lombok</artifactId>
  32.             <version>1.18.28</version>
  33.             <scope>compile</scope>
  34.         </dependency>
  35.         <dependency>
  36.             <groupId>io.springfox</groupId>
  37.             <artifactId>springfox-swagger2</artifactId>
  38.             <version>2.9.2</version>
  39.         </dependency>
  40.         <dependency>
  41.             <groupId>io.springfox</groupId>
  42.             <artifactId>springfox-swagger-ui</artifactId>
  43.             <version>2.9.2</version>
  44.         </dependency>
  45.         
  46.         <dependency>
  47.             <groupId>com.baomidou</groupId>
  48.             <artifactId>mybatis-plus-boot-starter</artifactId>
  49.             <version>3.4.2</version>
  50.         </dependency>
  51.         <dependency>
  52.             <groupId>mysql</groupId>
  53. <artifactId>mysql-connector-java</artifactId>
  54. <scope>runtime</scope>
  55. </dependency>
  56. <dependency>
  57. <groupId>org.springframework.boot</groupId>
  58. <artifactId>spring-boot-starter-jdbc</artifactId>
  59. </dependency>
  60. <dependency>
  61. <groupId>com.baomidou</groupId>
  62. <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
  63. <version>2.5.6</version>
  64. </dependency>
  65. <dependency>
  66. <groupId>com.alibaba</groupId>
  67. <artifactId>druid-spring-boot-starter</artifactId>
  68. <version>1.1.20</version>
  69. </dependency>  
  70. </dependencies>
  71. <build>
  72. <plugins>
  73. <plugin>
  74. <groupId>org.springframework.boot</groupId>
  75. <artifactId>spring-boot-maven-plugin</artifactId>
  76. </plugin>
  77. </plugins>
  78. </build>
  79. </project>
复制代码
然后在包dynamicdb下面创建controller、mapper、dbmodel, 然后在resource下面创建mapper文件夹及问题,如下图:

然后配置application,启用swagger2和添加mapper扫描,如下:
  1. @EnableSwagger2
  2. @Log4j2
  3. @SpringBootApplication
  4. @MapperScan("com.example.dynamicdb.mapper")
  5. public class DynamicdbApplication {
  6.     public static void main(String[] args) {
  7.         SpringApplication.run(DynamicdbApplication.class, args);
  8.     }
  9. }
复制代码
然后编辑resources下的application.yml,如下:
  1. server:
  2.   port: 8082
  3.   servlet:
  4.     context-path: /api
  5. spring:
  6.   servlet:
  7.     multipart:
  8.       max-file-size: 50MB
  9.       max-request-size: 50MB
  10.   datasource:
  11.     dynamic: #使用动态数据库配置
  12.       primary: db1 # 配置默认数据库
  13.       datasource:
  14.         db1: # 数据源1
  15.           driver-class-name: com.mysql.cj.jdbc.Driver
  16.           url: jdbc:mysql://localhost/db1
  17.           username: root
  18.           password: 1qaz!QAZ
  19.         db2: # 数据源2
  20.           driver-class-name: com.mysql.cj.jdbc.Driver
  21.           url: jdbc:mysql://localhost/db2
  22.           username: root
  23.           password: 1qaz!QAZ
  24.       druid:
  25.         initial-size: 1
  26.         max-active: 20
  27.         min-idle: 1
  28.         max-wait: 60000
  29.   autoconfigure:
  30.     exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 去除druid配置
  31. mybatis-plus:
  32.   mapper-locations: classpath:mapper/*.xml #指定resources下的mapper文件夹下是存储映射XML的文件夹
复制代码
然后创建SqlSessionController,使用SqlSession来加载Mapper,代码如下:
  1. @RestController
  2. public class SqlSessionController {
  3.     @Autowired
  4.     private SqlSession sqlSession;
  5.     @GetMapping(value = "/SqlSession/normalSql")
  6.     @ResponseBody
  7.     @ApiOperation(value = "默认查询,从主数据库查询", notes = "当前配置的主数据是db1-primary: db1")
  8.     public List<user> normalSql() {
  9.         //读取第一个数据库的值
  10.         UserMapper mapper = sqlSession.getMapper(UserMapper.class);
  11.         List<user> users = mapper.test();
  12.         return users;
  13.     }
  14.     @GetMapping(value = "/SqlSession/data_from_db1")
  15.     @ResponseBody
  16.     @DS("db1")
  17.     @ApiOperation(value = "从db1数据库查询数据", notes = "查询db1")
  18.     public List<user> data_from_db1() {
  19.         //读取第一个数据库的值
  20.         UserMapper mapper = sqlSession.getMapper(UserMapper.class);
  21.         List<user> users = mapper.test();
  22.         return users;
  23.     }
  24.     @GetMapping(value = "/SqlSession/data_from_db2")
  25.     @ResponseBody
  26.     @DS("db2")
  27.     @ApiOperation(value = "从db2数据库查询数据", notes = "查询db2")
  28.     public List<user> data_from_db2(Integer id) {
  29.         //读取第二个数据库的值
  30.         UserMapper mapper = sqlSession.getMapper(UserMapper.class);
  31.         List<user> users = mapper.test();
  32.         return users;
  33.     }
  34. }
复制代码
代码中使用 @DS("db1")来指定该接口内使用的数据库。
再创建一个MapperController,测试使用Mapper直接访问数据库,如下
  1. @RestController
  2. public class MapperController {
  3.     @Autowired
  4.     private UserMapper userMapper;
  5.     @GetMapping(value = "/Mapper/normalSql")
  6.     @ResponseBody
  7.     @ApiOperation(value = "使用Mapper查询,从主数据库查询", notes = "当前配置的主数据是db1-primary: db1")
  8.     public List<user> normalSql() {
  9.         //读取第一个数据库的值
  10.         List<user> users = userMapper.test();
  11.         return users;
  12.     }
  13. }
复制代码
----------------------------------------------------------------------------------------------------
到此,Spring配置动态数据库就已经介绍完了。
代码已经传到Github上了,欢迎大家下载。
Github地址:https://github.com/kiba518/dynamicdb
----------------------------------------------------------------------------------------------------
注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!
若您觉得这篇文章还不错,请点击下方的【推荐】,非常感谢!
https://www.cnblogs.com/kiba/p/17473450.html
 
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曂沅仴駦

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表