Dynamic-datasource加载报错:jdbcUrl is required with driverClassName

问题描述

在给项目配置动态数据源时使用的时

<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.1.1</version>
        </dependency>

使用的配置文件如下

spring:
	datasource:
	    dynamic:
	      primary: center-bill
	      datasource:
	        master:
	          type: com.zaxxer.hikari.HikariDataSource
	          driver-class-name: com.mysql.cj.jdbc.Driver
	          jdbc-url: jdbc:mysql://127.127.127.1:3306/center_bill?characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai
	          password: '*******'
	          username: dev_rw
	          maximumPoolSize: 10 # Default: 10
	          poolName: center-bill_master
	        slave0:
	          type: com.zaxxer.hikari.HikariDataSource
	          driver-class-name: com.mysql.cj.jdbc.Driver
	          jdbc-url: jdbc:mysql://127.128.122.2:3306/center_bill?characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai
	          password: '*********'
	          username: dev_rw
	          maximumPoolSize: 10 # Default: 10
	          poolName: center-bill_slave0

运行时代码报错:

Caused by: java.lang.IllegalArgumentException: jdbcUrl is required with driverClassName.
	at com.zaxxer.hikari.HikariConfig.validate(HikariConfig.java:1000)
	at com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:77)
	at com.baomidou.dynamic.datasource.creator.HikariDataSourceCreator.createDataSource(HikariDataSourceCreator.java:47)
	at com.baomidou.dynamic.datasource.creator.DataSourceCreator.createHikariDataSource(DataSourceCreator.java:165)
	at com.baomidou.dynamic.datasource.creator.DataSourceCreator.createDataSource(DataSourceCreator.java:95)
	at com.baomidou.dynamic.datasource.provider.AbstractDataSourceProvider.createDataSourceMap(AbstractDataSourceProvider.java:45)
	at com.heytea.service.order.admin.config.DynamicDataSourceConfig$1.loadDataSources(DynamicDataSourceConfig.java:41)
	at com.baomidou.dynamic.datasource.DynamicRoutingDataSource.afterPropertiesSet(DynamicRoutingDataSource.java:254)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1855)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1792)
	... 181 common frames omitted
问题分析

这个问题看起来很明显,加载driverClassName时缺少jdbcUrl,但是我们的配置中的jdbcUrl明明有配置,这种情况只能是直接进源码看了,经过一番操作,找到了这个参数实在创建Hikari数据源时使用的类名:HikariDataSourceCreator,加载时的代码为:

@Data
@AllArgsConstructor
public class HikariDataSourceCreator {

    private HikariCpConfig hikariCpConfig;

    public DataSource createDataSource(DataSourceProperty dataSourceProperty) {
        HikariConfig config = dataSourceProperty.getHikari().toHikariConfig(hikariCpConfig);
        config.setUsername(dataSourceProperty.getUsername());
        config.setPassword(dataSourceProperty.getPassword());
        config.setJdbcUrl(dataSourceProperty.getUrl());
        config.setDriverClassName(dataSourceProperty.getDriverClassName());
        config.setPoolName(dataSourceProperty.getPoolName());
        return new HikariDataSource(config);
    }
}

问题大家可能已经发现了,这里报错的原因就是这行代码
config.setJdbcUrl(dataSourceProperty.getUrl());
取的配置中的Url赋值给jdbcUrl,所以配置中应该配的是url而不是jdbc-url

问题处理

将配置中的jdbc-url改为url问题即可解决。

写在后面

dyncmic-datasource之前看到好像是不支持hikari连接池的,因为hikari连接池的url使用的是jdbc-url,但是dyncmic-datasource为了保持架构配置的统一,全部使用了url属性,但是这个数据源的加载是hikari完成的,所以配置有问题,报的错误就是jdbcUrl的错误。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值