在我的博客阅读本文
有一段时间没有更新博客了,其实这段时间也有在写一些框架的使用,比如quartz的基本使用等等,后来都没有发布出来,主要还是感觉过于简单,对于博客的定位我希望能讨论一些更深层次的设计方面的东西。最近公司有个需求,客户试用我们的产品到期了,签了正式的合同,准备迁移到生产环境,但是又想要保留测试的时候数据,因此我们开发组准备设计一个迁移程序,要考虑后期拓展与重复使用。这其中有个重要的点就是如何在一个项目中同时操作两个数据源。
今天这篇文章主要是围绕动态数据源切换的设计实现进行展开,其他关于数据迁移方面的问题也可以联系我私人进行讨论。
1. 前言
首先,对一个概念进行定义,本文所述数据源动态切换是指在一个项目工程中,代码层面能够同时操作两个数据源,共用一套数据源操作代码,并非客户端在调用的时候进行动态切换。如果您无意间搜索到这篇文章,请知悉,避免辜负您的时间。
要实现数据源的动态切换,笔者主要考虑以下几点:
- 每种数据源要能够实现单例
- 能够正常执行事务提交回滚
- 数据源切换的线程安全问题
- 符合SpringBoot整体风格,
约定优于配置(convention over configuration)
2. 代码
您可以选择直接clone代码,如果对您有帮助,请一定不要吝惜你的star。
如果对其中有困惑,可以继续往下阅读。
3. 具体实现
我们模拟两个数据源切换,分别为masaiqi_dev和masaiqi_prod,对应测试环境和生产环境
3.1. 准备工作
3.1.1. 引入pom
<?xml version="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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.masaiqi</groupId>
<artifactId>datasource-exchage</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>datasource-exchage</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
</dependency>
<!--日志-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!--数据库连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.21</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test

最低0.47元/天 解锁文章
3441

被折叠的 条评论
为什么被折叠?



