我很高兴为您提供“详解MybatisPlus集成nacos导致druid连接不上数据库”的完整攻略。
-
问题描述
MybatisPlus集成nacos后,我们发现druid连接池无法连接数据库了,导致应用程序无法启动。这是由于Druid数据源在生成时需要使用一些配置参数,例如驱动类名、连接字符串、用户名/密码等,而这些参数在nacos配置中心中没有被正确指定。 -
解决方案
为了解决这个问题,我们需要在nacos配置中心中指定正确的配置参数。下面是解决方案的具体步骤:
步骤1:创建nacos数据源配置文件
我们需要创建一个dataId为“db.properties”,group为“DEFAULT_GROUP”的配置文件,并填写连接相关的配置信息。例如:
#连接池初始化大小、最小、最大值
druid.initialSize=1
druid.minIdle=1
druid.maxActive=20
#连接超时时间
druid.maxWait=60000
# 配置获取连接等待超时的时间
druid.timeBetweenEvictionRunsMillis=60000
# 连接保持活跃的最小时间
druid.minEvictableIdleTimeMillis=300000
# 配置检测连接是否有效
druid.testWhileIdle=true
druid.testOnBorrow=false
druid.testOnReturn=false
# 是否缓存preparedStatement,也就是PSCache
druid.poolPreparedStatements=true
# 预处理语句缓存大小,最大为 2048
druid.maxPoolPreparedStatementPerConnectionSize=20
# 配置 Druid 数据源的监控信息
# 开启监控统计功能
druid.stat=true
# 统计 SQL 执行的最大时间,单位为毫秒
druid.stat.sql.MaxTimeMillis=2000
# SQL 执行日志记录
druid.filter.stat.logSlowSql=true
druid.filter.stat.slowSqlMillis=1000
# 配置 MySQL 连接信息
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
步骤2:在MybatisPlus中指定nacos配置中心的地址,并读取db.properties配置文件
我们需要在MybatisPlus的配置文件(通常是application.yml文件)中指定nacos配置中心的地址,并读取之前创建的db.properties配置文件。例如:
mybatis-plus:
# mapper文件所在路径
mapper-locations: classpath:/mybatis/mapper/**/*.xml
# 实体扫描,多个package用逗号或者分号分隔
typeAliasesPackage: com.example.demo.dto
global-config:
# 全局查询参数默认值
db-config:
logic-delete-value: 0
logic-not-delete-value: 1
# 超过10000条sql自动开启分页
sql-injector: com.baomidou.mybatisplus.core.injector.DefaultSqlInjector
# 公共字段自动填充
meta-object-handler: com.example.demo.handler.MyMetaObjectHandler
spring:
main:
#spring boot应用的name
web-application-type: servlet
# 指定nacos的地址
cloud:
nacos:
config:
server-addr: localhost:8848
application:
# 命名空间
name: demo
datasource:
# druid数据源配置
druid:
name: DruidDataSource
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.1.20:3306/nacos?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
username: root
password: root
# 读取nacos配置中心上的db配置文件
async-init: true
filter:
#druid监控器,用于统计监控信息
stat:
logSlowSql: true
#防御SQL注入,避免黑客攻击
wall:
enabled: true
dbType: mysql
config:
multiStatementAllow: true
# 允许一次执行多条SQL语句
noneBaseStatementAllow: true
# 允许非基础SQL语句的访问,如SQLServer的sp_executesql语句
deleteAllow: false
updateAllow: false
selectAllow: false
truncateAllow: false
- 示例说明
假设我们有一个Spring Boot项目,项目名称为“demo”,我们想要将Druid连接池集成到MybatisPlus中,并将数据库连接信息保存在nacos配置中心中。
示例1:创建nacos配置文件
我们在nacos配置中心中创建一个dataId为“db.properties”,group为“DEFAULT_GROUP”的配置文件,内容如下:
# 配置 MySQL 连接信息
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#连接池配置
druid.initialSize=1
druid.minIdle=1
druid.maxActive=20
示例2:在MybatisPlus中引入nacos配置中心
我们在MybatisPlus的配置文件(通常是application.yml文件)中指定nacos配置中心的地址,并读取之前创建的db.properties配置文件,代码如下:
spring:
application:
name: demo
cloud:
nacos:
config:
server-addr: localhost:8848
mybatis-plus:
global-config:
db-config:
logic-delete-value: 0
logic-not-delete-value: 1
sql-injector: com.baomidou.mybatisplus.core.injector.DefaultSqlInjector
meta-object-handler: com.example.demo.handler.MyMetaObjectHandler
configuration:
map-underscore-to-camel-case: false
datasource:
druid:
name: com.alibaba.druid.pool.DruidDataSource
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: ${spring.datasource.driver-class-name}
url: ${spring.datasource.url}
username: ${spring.datasource.username}
password: ${spring.datasource.password}
async-init: true
filter:
stat:
logSlowSql: true
wall:
enabled: true
dbType: mysql
在这种配置下,我们可以实现MybatisPlus与Druid的集成,并将配置信息保存在nacos配置中心中。
希望本文对您有所帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解MybatisPlus集成nacos导致druid连接不上数据库 - Python技术站