前面我们演示了Mybatis plus的一些操作,在实际的业务中我们可能会涉及到以下的一些场景:
1、面向2C的业务,数据库读写压力较大,配置了主从。 2、面向数据分析,部分数据从A数据库查,部分数据从B数据库查
以上的场景其实就是一个正常的业务需要从多个数据源来获取数据,因此这里的话,我们就会涉及到在项目中配置多个数据源,目前成熟的方案比较多,但是我们挑一个简单的多数据源配置来使用。本文我们介绍的多数据源配置主要是基于springboot的dynamic-datasource-spring-boot-starter。这个用起来也非常简单,下面我们来演示以下:
一、添加多数据源的maven依赖
既然要使用dynamic-datasource-spring-boot-starter,我们就要把它的maven依赖给引入进来,一般我们dynamic-datasource-spring-boot-starter这个插件与阿里的druid搭配使用,所以这两个依赖我们都要引入进来,示例如下:
<dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>3.3.2</version> </dependency> <!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.20</version> </dependency>
二、添加配置文件
接着我们就要添加配置文件,配置文件分为2部分,第一部分市定义主数据库,第二部分市配置的所有数据库,首先我们定义主数据库:
#设置test6为主数据源 spring.datasource.dynamic.primary=master
第二部分就是我们设置的所有数据库,示例如下:
#主数据源 spring.datasource.dynamic.datasource.master.driver-class-name=com.p6spy.engine.spy.P6SpyDriver spring.datasource.dynamic.datasource.master.url=jdbc:p6spy:mysql://192.168.31.30:3306/test6?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8 spring.datasource.dynamic.datasource.master.username=test6 spring.datasource.dynamic.datasource.master.password=7fTWPb6W65A4wCjK spring.datasource.dynamic.datasource.master.type=com.alibaba.druid.pool.DruidDataSource #主数据源druid连接池配置 spring.datasource.dynamic.datasource.master.druid.initial-size=5 spring.datasource.dynamic.datasource.master.druid.max-active=20 spring.datasource.dynamic.datasource.master.druid.min-idle=5 spring.datasource.dynamic.datasource.master.druid.max-wait=60000 #从数据源 spring.datasource.dynamic.datasource.slave.driver-class-name=com.p6spy.engine.spy.P6SpyDriver spring.datasource.dynamic.datasource.slave.url=jdbc:p6spy:mysql://192.168.31.30:3306/test7?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8 spring.datasource.dynamic.datasource.slave.username=test7 spring.datasource.dynamic.datasource.slave.password=Nfys2rJMx7BdXdGC spring.datasource.dynamic.datasource.slave.type=com.alibaba.druid.pool.DruidDataSource #从数据源druid连接池配置 spring.datasource.dynamic.datasource.slave.druid.initial-size=5 spring.datasource.dynamic.datasource.slave.druid.max-active=20 spring.datasource.dynamic.datasource.slave.druid.min-idle=5 spring.datasource.dynamic.datasource.slave.druid.max-wait=60000
这里可以看到我们可以配置多个数据源,每一个数据源都有对应的标识,标识的位置在:
spring.datasource.dynamic.datasource.${标识}.druid.xxxxx
我们在设置那个数据源为主数据源的时候,需要把它的标识放在primary里面去。最后我们有几个数据源,就在这里配置几个数据源。
三、准备数据库
这里我们为了演示,创建一个test6的数据库,再创建一个test7的数据库,然后里面分别有1张user表,数据示例如下:
四、编写接口
这里我们编写两个接口,第一个接口从master里面去读取数据,第二个接口从slave里面去读取数据。这里默认的市从主数据库里面读取数据,所以第一个接口我们不用管他,第二个接口我们需要添加一个DS的注解,形如:
@DS("${数据库标识}")
这样子第二个接口就可以从标记的数据库里面读取数据了。这里我们给出两个接口的代码示例:
第一个接口:
@RequestMapping("/select1") public Page<User> select1() { Page<User> page = new Page<User>(1, 5); Page<User> pages = userMapper.selectPage(page, null); return pages; }
第二个接口:
@RequestMapping("/select2") @DS("slave") public Page<User> select2() { Page<User> page = new Page<User>(1, 5); Page<User> pages = userMapper.selectPage(page, null); return pages; }
这里我们没有service,这个@DS注解主要是在调用dao的方法上进行备注,切记这一点。
五、测试
最后我们把项目启动起来,然后测试一下两个接口,看下效果:
可以看到两个接口返回的是不同的数据库的数据。
以上就是使用springboot的dynamic-datasource-spring-boot-starter实现多数据源的配置,是不是很方便,最后按照惯例,附上本案例的源码,登陆后即可下载。
还没有评论,来说两句吧...