9.8 KiB
title, url, publishedTime
| title | url | publishedTime |
|---|---|---|
| 用户微服务搭建(2) - 犬小哈专栏 | https://www.quanxiaoha.com/column/10310.html | null |
本小节中,我们继续完善用户微服务,将 Druid 数据连接池与 MyBatis 整合进来,因为用户信息修改接口最终的目的是,将修改的用户信息保存到数据库中,需要操作数据库。
整合 Druid 与 MyBatis
Tip
: 关于如何整合阿里 Druid 连接池,在《4.5节》 已经详细说过了,本小节在用户微服务中,再次演示一波,后续如果还有新创建的服务,就不再做演示了,相信小伙伴们也已经非常熟悉了。
添加依赖
编辑 xiaohashu-user-biz 模块的 pom.xml 文件,添加数据源相关依赖,如下:
// 省略...
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<!-- MySQL 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- Druid 数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-3-starter</artifactId>
</dependency>
// 省略...
依赖添加完毕后,刷新一波 Maven 依赖,将包下载到本地仓库中。
添加配置
Mybatis 配置
编辑 application.yml 本地开发环境配置文件, 配置 MyBatis xml 文件路径:
mybatis:
# MyBatis xml 配置文件路径
mapper-locations: classpath:/mapper/**/*.xml
Druid 数据源配置
编辑 application-dev.yml 本地开发环境配置文件,添加数据源相关配置,可以直接从已经整合好的服务中复制过来,如下:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver # 指定数据库驱动类
# 数据库连接信息
url: jdbc:mysql://127.0.0.1:3306/xiaohashu?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=Asia/Shanghai
username: root # 数据库用户名
password: A2qT03X7KlL4v/F2foD6kV/Ch9gpNBWOh1qoCywanjv1AsI7f9x3iAyR9NkUKeV+FMo+halCTzy5Llbk2VOrVQ== # 数据库密码
type: com.alibaba.druid.pool.DruidDataSource
druid: # Druid 连接池
initial-size: 5 # 初始化连接池大小
min-idle: 5 # 最小连接池数量
max-active: 20 # 最大连接池数量
max-wait: 60000 # 连接时最大等待时间(单位:毫秒)
test-while-idle: true
time-between-eviction-runs-millis: 60000 # 配置多久进行一次检测,检测需要关闭的连接(单位:毫秒)
min-evictable-idle-time-millis: 300000 # 配置一个连接在连接池中最小生存的时间(单位:毫秒)
max-evictable-idle-time-millis: 900000 # 配置一个连接在连接池中最大生存的时间(单位:毫秒)
validation-query: SELECT 1 FROM DUAL # 配置测试连接是否可用的查询 sql
connectionProperties: config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAIaJmhsfN14oM+bghiOfARP6YgIiArekviyAOEa9Dt8spf4W38kSJShGs0NkzT3btqJB0O2o0X/yfVE8kqme1jMCAwEAAQ==
test-on-borrow: false
test-on-return: false
pool-prepared-statements: false
web-stat-filter:
enabled: true
stat-view-servlet:
enabled: true
url-pattern: /druid/* # 配置监控后台访问路径
login-username: admin # 配置监控后台登录的用户名、密码
login-password: admin
filter:
config:
enabled: true
stat:
enabled: true
log-slow-sql: true # 开启慢 sql 记录
slow-sql-millis: 2000 # 若执行耗时大于 2s,则视为慢 sql
merge-sql: true
wall: # 防火墙
config:
multi-statement-allow: true
logging:
level:
com.quanxiaoha.xiaohashu.user.biz.domain.mapper: debug
整合代码生成器
接下来,为用户服务整合代码生成器 Maven 插件。编辑 xiaohashu-user-biz 模块的 pom.xml 文件,添加对应插件依赖,如下:
<build>
<plugins>
// 省略...
<!-- 代码生成器 -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
预创建相关文件夹
插件添加好后,分别创建 /domain/dataobject 实体类包、/domain/mapper 接口包、/resources/mapper 映射文件文件夹,如上图所示。
创建配置文件
并在 /resources 文件夹下新建 generatorConfig.xml 生成器配置文件,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<context id="mysqlTables" targetRuntime="MyBatis3" defaultModelType="flat">
<!-- 自动检查关键字,为关键字增加反引号,如:`type` -->
<property name="autoDelimitKeywords" value="true"/>
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<!-- 指定生成的 Java 文件编码 -->
<property name="javaFileEncoding" value="UTF-8"/>
<!-- 对生成的注释进行控制 -->
<commentGenerator>
<!-- 由于此插件生成的注释不太美观,这里设置不生成任何注释 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!-- 数据库链接 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://127.0.0.1:3306/xiaohashu"
userId="root"
password="123456">
<!-- 解决多个重名的表生成表结构不一致问题 -->
<property name="nullCatalogMeansCurrent" value="true"/>
</jdbcConnection>
<!-- 不强制将所有的数值类型映射为 Java 的 BigDecimal 类型 -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- DO 实体类存放路径 -->
<javaModelGenerator targetPackage="com.quanxiaoha.xiaohashu.user.biz.domain.dataobject"
targetProject="src/main/java"/>
<!-- Mapper xml 文件存放路径-->
<sqlMapGenerator targetPackage="mapper"
targetProject="src/main/resources"/>
<!-- Mapper 接口存放路径 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.quanxiaoha.xiaohashu.user.biz.domain.mapper"
targetProject="src/main/java"/>
<!-- 需要生成的表-实体类 -->
<table tableName="t_user" domainObjectName="UserDO"
enableCountByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false"
enableSelectByExample="false"
selectByExampleQueryId="false"/>
</context>
</generatorConfiguration>
Tip
: 每个服务的
DO实体类、mapper接口、xml映射文件的包路径会有所区别,小伙伴们可以直接从别的服务中,复制过来然后稍作修改一下。
生成代码
点击右侧栏中 xiaohashu-user-biz 模块中 Plugins 插件下的 generate , 开始自动生成相关代码,操作如下图所示:
生成完毕后,就能在刚刚创建的文件夹中,看到生成好的代码啦,如下图所示:
修改一下 UserDO 实体类,删除掉 get/set 方法,并添加上 Lombok 相关注解,以及将 Date 日期类修改为 LocalDateTime Java8 新的日期类, 最终代码如下:
package com.quanxiaoha.xiaohashu.user.biz.domain.dataobject;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDate;
import java.time.LocalDateTime;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class UserDO {
private Long id;
private String xiaohashuId;
private String password;
private String nickname;
private String avatar;
private LocalDate birthday;
private String backgroundImg;
private String phone;
private Integer sex;
private Integer status;
private String introduction;
private LocalDateTime createTime;
private LocalDateTime updateTime;
private Boolean isDeleted;
}
添加 @MapperScan 注解
在启动类头上添加 @MapperScan 注解,并配置 mapper 接口的包路径,代码如下:
package com.quanxiaoha.xiaohashu.user.biz;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.quanxiaoha.xiaohashu.user.biz.domain.mapper")
public class XiaohashuUserBizApplication {
public static void main(String[] args) {
SpringApplication.run(XiaohashuUserBizApplication.class, args);
}
}
测试一波
最后,重启用户服务,观察控制台日志,若打印了 Init DruidDataSource 信息,说明 Druid 连接池整合成功了。