SpringBoot+MyBatis-Plus实现多数据源

一、介绍

dynamic-datasource-spring-boot-starter 是一个基于springboot的快速集成多数据源的启动器。

1.dynamic-datasource-spring-boot-starter开源地址

GitHub开源地址(具体详情可参考官方文档):
https://github.com/baomidou/dynamic-datasource-spring-boot-starter

2.说明和应用场景

可用于主从分离、读写分离、分布式事务等。

二、详细整合步骤

1.导入Maven依赖

1
2
3
4
5
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.5.4</version>
</dependency>

2.application.yml配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
spring:
datasource:
dynamic:
primary: db1 #设置默认的数据源,默认值为master
datasource:
db1: #数据源db1
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/wordpress_master?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: root
password: 123456
db2: #数据源db2
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/wordpress_slave?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: root
password: 123456
type: com.alibaba.druid.pool.DruidDataSource
druid:
initial-size: 10
max-active: 100
min-idle: 10
max-wait: 60000
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
#Oracle需要打开注释
#validation-query: SELECT 1 FROM DUAL
test-while-idle: true
test-on-borrow: false
test-on-return: false
stat-view-servlet:
enabled: true
url-pattern: /druid/*
#login-username: admin
#login-password: admin
filter:
stat:
log-slow-sql: true
slow-sql-millis: 1000
merge-sql: false
wall:
config:
multi-statement-allow: true

3.完成1、2步后,启动应用

如果控制台不报错且出现如下图所示,就表示成功整合:

4.注意事项

启动主类需要排除Druid相关依赖,否则会出现如下错误:

1
2
3
4
5
6
7
8
9
***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class

解决办法,加上如下代码即可:

1
@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)

Iaas、Paas、Saas对比分析

Iaas、Paas、Saas对比分析

从Iaas、Paas到Saas,客户所要管理负责由多到少,成本也越来越低。下面所列举的,足以看出。
以我所待的公司,无论是外包还是创业公司也好。基本上采用的都是Saas这种模式,Sass对于客户而言省事省时省钱(从Applications到Compute无需管理)。对于供应商,也就是我们而言,由于从应用开发到部署,再到维护都由我们负责,从一定程度上降低一些问题排错的时间成本(过去写一套系统部署在不同的操作系统,不同的操作系统的版本环境存在差异,可能会遇到在这个系统正常运行,在那个系统出现一些问题,不排除是因为代码的原因,但有的时候也与环境有极大的关系)。

脚本是个好东西

Linux下使用shell脚本可以完成很多任务,如执行脚本部署测试环境、批量添加系统用户(之前做edusoho二次开发时用到)、监控项目运行情况(如果宕机,自动重启)等。

availableProcessors is already set to [8], rejecting [8]

错误详细信息:

1
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'elasticsearchClient' defined in class path resource [org/springframework/boot/autoconfigure/data/elasticsearch/ElasticsearchAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.elasticsearch.client.transport.TransportClient]: Factory method 'elasticsearchClient' threw exception; nested exception is java.lang.IllegalStateException: availableProcessors is already set to [8], rejecting [8]