springboot之集成mybatis-plus、druid整合多數(shù)據(jù)源實(shí)踐
- spring boot 版本:2.3.12.RELEASE
- MySQL 版本:8.0
數(shù)據(jù)表準(zhǔn)備
-- 數(shù)據(jù)庫(kù) test1 CREATE TABLE `t_product` ( `id` int NOT NULL AUTO_INCREMENT, `produce_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `produce_price` int DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;
-- 數(shù)據(jù)庫(kù) test2 CREATE TABLE `student` ( `id` int NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
引入pom文件依賴
<!--spring-boot-starter-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--spring-boot-starter-web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--spring-boot-starter-test-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.26</version>
</dependency>
<!--Mybatis-Plus 注意版本-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<!--dynamic-datasource-spring-boot-starter-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<!--druid-spring-boot-starter-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.16</version>
</dependency>
<!-- mysql-connector-j -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.33</version>
</dependency>application.yml配置文件
spring:
autoconfigure:
exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
datasource:
dynamic:
primary: master
datasource:
master:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://1.1.1.1:3306/test1?allowMultiQueries=true&serverTimezone=Asia/Shanghai&useSSL=false
username: root
password: 123456
slave:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://2.2.2.2:3306/test2?allowMultiQueries=true&serverTimezone=Asia/Shanghai&useSSL=false
username: root
password: 654321
druid:
# 如果initialSize數(shù)量較多時(shí),打開會(huì)加快應(yīng)用啟動(dòng)時(shí)間
async-init: true
# 連接池初始化時(shí)創(chuàng)建的連接數(shù)
initial-size: 5
# 連接池中最大連接數(shù)
max-active: 50
# 連接池中最小空閑連接數(shù)
min-idle: 5
# 連接池中最大空閑連接數(shù)
max-idle: 20
# 配置獲取連接等待超時(shí)的時(shí)間 毫秒
max-wait: 6000
# 配置間隔多久才進(jìn)行一次檢測(cè),檢測(cè)需要關(guān)閉的空閑連接,單位是毫秒
time-between-eviction-runs-millis: 60000
# 增強(qiáng)timeBetweenEvictionRunsMillis的周期性連接檢查,minIdle內(nèi)的空閑連接,每次檢查強(qiáng)制驗(yàn)證連接有效性
keep-alive: true
# 配置一個(gè)連接在池中最小生存的時(shí)間,單位是毫秒
min-evictable-idle-time-millis: 300000
max-evictable-idle-time-millis: 172800000
# 用于檢測(cè)連接是否有效的SQL語句
validation-query: select 1
validation-query-timeout: 1
# 是否開啟空閑連接的檢測(cè)
test-while-idle: true
# 是否開啟連接的檢測(cè)功能,在獲取連接時(shí)檢測(cè)連接是否有效
test-on-borrow: false
# 是否開啟連接的檢測(cè)功能,在歸還連接時(shí)檢測(cè)連接是否有效
test-on-return: false
# 是否緩存preparedStatement,也就是PSCache。PSCache對(duì)支持游標(biāo)的數(shù)據(jù)庫(kù)性能提升巨大,比如說oracle。在mysql下建議關(guān)閉。
pool-prepared-statements: false
filter:
stat:
enabled: true
db-type: mysql
log-slow-sql: true
slow-sql-millis: 3000
connection-stack-trace-enable: true
wall:
enabled: true
db-type: mysql
config:
insert-allow: true
delete-allow: false
update-allow: true
drop-table-allow: false
stat-view-servlet:
# http://localhost:8989/mp/druid/index.html
# 啟用StatViewServlet
enabled: true
# 訪問內(nèi)置監(jiān)控頁(yè)面的路徑,內(nèi)置監(jiān)控頁(yè)面的首頁(yè)是/druid/index.html
url-pattern: /druid/*
# 不允許清空統(tǒng)計(jì)數(shù)據(jù),重新計(jì)算
reset-enable: false
# 配置監(jiān)控頁(yè)面訪問密碼
login-username: root
login-password: 123456
# 允許訪問的地址,如果allow沒有配置或者為空,則允許所有訪問
allow: 127.0.0.1
# 拒絕訪問的地址,deny優(yōu)先于allow,如果在deny列表中,就算在allow列表中,也會(huì)被拒絕
mybatis-plus:
# 實(shí)體類Mapper.xml文件所在包
mapper-locations: classpath:mapper/*Mapper.xml
# 指定 MyBatis 別名包掃描路徑,用于給包中的類注冊(cè)別名。注冊(cè)后,在 Mapper 對(duì)應(yīng)的 XML 文件中可以直接使用類名,無需使用全限定類名。
type-aliases-package: com.sun.pojo
configuration:
# 開啟駝峰映射,A_COLUMN > aColumn
map-underscore-to-camel-case: true
# 是否允許單條sql 返回多個(gè)數(shù)據(jù)集
multiple-result-sets-enabled: true
# mybatis-plus的日志輸出到控制臺(tái)
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl新建實(shí)體類
@Data
@TableName("t_product")
public class Product {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@TableField("produce_name")
private String produceName;
@TableField("produce_price")
private String producePrice;
}
@Data
@TableName("student")
public class Student {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@TableField("remark")
private String remark;
}
新建mapper
在mapper層類上使用@DS()注解區(qū)分使用的數(shù)據(jù)源
@DS("master")
@Mapper
public interface ProductMapper extends BaseMapper<Product> {
}
@DS("slave")
@Mapper
public interface StudentMapper extends BaseMapper<Student> {
}
新建測(cè)試類
@SpringBootTest
@RunWith(SpringRunner.class)
public class DataTest {
@Autowired
private StudentMapper studentMapper;
@Autowired
private ProductMapper productMapper;
@Test
public void dataTest() {
LambdaQueryWrapper<Student> studentWrapper = new LambdaQueryWrapper<>();
List<Student> studentList = studentMapper.selectList(studentWrapper);
studentList.forEach(System.out::println);
LambdaQueryWrapper<Product> productWrapper = new LambdaQueryWrapper<>();
List<Product> productList = productMapper.selectList(productWrapper);
productList.forEach(System.out::println);
}
}
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
mybatis批量添加,批量更新之前如何判斷是否已經(jīng)存在
這篇文章主要介紹了mybatis批量添加,批量更新之前如何判斷是否已經(jīng)存在,具有很好的參考價(jià)值,希望對(duì)的有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
談?wù)剬?duì)Java多態(tài)性的一點(diǎn)理解
多態(tài)就是指程序中定義的引用變量所指向的具體類型和通過該引用變量發(fā)出的方法調(diào)用在編程時(shí)并不確定,而是在程序運(yùn)行期間才確定,即一個(gè)引用變量倒底會(huì)指向哪個(gè)類的實(shí)例對(duì)象,該引用變量發(fā)出的方法調(diào)用到底是哪個(gè)類中實(shí)現(xiàn)的方法,必須在由程序運(yùn)行期間才能決定2017-08-08
Spring Boot中使用jdbctemplate 操作MYSQL數(shù)據(jù)庫(kù)實(shí)例
本篇文章主要介紹了Spring Boot中使用jdbctemplate 操作MYSQL數(shù)據(jù)庫(kù)實(shí)例,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-04-04
SpringMVC數(shù)據(jù)響應(yīng)詳細(xì)介紹
Spring MVC 是 Spring 提供的一個(gè)基于 MVC 設(shè)計(jì)模式的輕量級(jí) Web 開發(fā)框架,本質(zhì)上相當(dāng)于 Servlet,Spring MVC 角色劃分清晰,分工明細(xì),本章來講解SpringMVC數(shù)據(jù)響應(yīng)2023-02-02
Java利用MultipartFile實(shí)現(xiàn)上傳多份文件的代碼
這篇文章主要介紹了Java利用MultipartFile實(shí)現(xiàn)上傳多份文件的代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09
springmvc利用jquery.form插件異步上傳文件示例
本篇文章主要介紹了springmvc利用jquery.form插件異步上傳文件示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-01-01
Java Scoket實(shí)現(xiàn)雙向通信代碼詳解
這篇文章主要介紹了Java Scoket實(shí)現(xiàn)雙向通信代碼詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06

