Closed xiaozcy closed 5 months ago
我在https://start.spring.io/ 初始化工程,然后下载到本地,添加druid配置, 将application.properties去除,使用application.yml, 且使用你的配置,只是将db换成H2,验证一切正常。
请核实你的配置,感觉是你把application.properties和application.yml并存使用,导致解析配置触发了别的逻辑导致问题出现在,注意看我特意改了application.properties的名字为applicationbak.properties
application.yml配置如下:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
filter:
config:
enabled: true
stat:
enabled: true
filters: stat,wall,slf4j
initial-size: 5
max-active: 20
max-pool-prepared-statement-per-connection-size: -1
max-wait: 60000
min-evictable-idle-time-millis: 300000
min-idle: 5
pool-prepared-statements: false
test-on-borrow: false
test-on-return: false
test-while-idle: true
time-between-eviction-runs-millis: 60000
validation-query: SELECT 1
validation-query-timeout: 1
url: jdbc:h2:mem:testdb
username: sa
password: sa
build.gradle配置如下:
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.0'
id 'io.spring.dependency-management' version '1.1.4'
}
group = 'com.lizongbo'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
repositories {
maven {
url "https://maven.aliyun.com/nexus/content/groups/public/"
}
mavenCentral()
maven { url 'https://repo.spring.io/milestone' }
}
configurations {
all {
resolutionStrategy.cacheChangingModulesFor 60, 'seconds'
exclude module: 'HikariCP-java7' // quartz依赖的,我们不需要
exclude module: 'c3p0' // quartz依赖的,我们不需要
exclude module: 'slf4j-log4j12' // 过滤掉slf4j-log4j12
exclude module: 'log4j-to-slf4j' // 过滤掉slf4j-log4j12
exclude group: 'ch.qos.logback'
}
}
def log4j2_ver = "2.23.1"
List log4j_lib = [
"org.apache.logging.log4j:log4j-api:$log4j2_ver",
"org.apache.logging.log4j:log4j-core:$log4j2_ver",
'com.lmax:disruptor:3.4.4'
]
dependencies {
implementation log4j_lib
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-log4j2'
implementation 'com.alibaba:druid-spring-boot-3-starter:1.2.22'
runtimeOnly 'com.h2database:h2'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('test') {
useJUnitPlatform()
}
@lizongbo 我的配置下没有application.properties
,我使用了springboot 2.4之后引入的配置组的方式(Spring Boot Config Data Migration Guide),包含多个配置文件,简化后配置项大致如下:
application.yaml
:
spring:
profiles:
group:
dev: datasource
application-dev.yaml
:
# 一些与datasource无关的配置
application-datasource.yaml
:
# 与示例基本一致
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/xxx?charset=utf8mb4&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: xxx
# druid 连接池管理
druid:
filter:
config:
enabled: true
stat:
enabled: true
filters: stat,wall,slf4j
initial-size: 5
max-active: 20
max-pool-prepared-statement-per-connection-size: -1
max-wait: 60000
min-evictable-idle-time-millis: 300000
min-idle: 5
pool-prepared-statements: false
test-on-borrow: false
test-on-return: false
test-while-idle: true
time-between-eviction-runs-millis: 60000
validation-query: SELECT 1
validation-query-timeout: 1
启动springboot时指定--spring.profiles.active=dev
,此时就会出现上面的问题
以上配置能够被Spring正常装载到org.springframework.boot.autoconfigure.jdbc.DataSourceProperties
中:
但似乎没有被正确装载到Druid的配置中
补充一下,似乎不只是在druid-spring-boot-3-starter 1.2.22版本中如此,在1.2.21和1.2.20中也是如此
同样的配置切换到hikari后,可以正常获取配置建立连接池
同样的配置切换到hikari后,可以正常获取配置建立连接池
现在druid里starter的写法其实不太规范,我最近调整一下, 照着 springboot里适配其它数据源的写法调整。
同样的问题,换到HikariCP正常
我使用spring boot 3.2.0 + druid-spring-boot-3-starter 1.2.22,配置文件内容如下
启动时抛出如下异常,配置信息无法正常绑定: