spring boot 2.0 报错:“jdbcUrl is required with driverClassName.” 解决办法!

springboot 升级到2.0之后发现配置多数据源的时候报错:

“jdbcUrl is required with driverClassName.”或者Cause: java.lang.IllegalArgumentException: dataSource or dataSourceClassName or jdbcUrl is required.] with root cause

 

主要原因是在1.0 配置数据源的过程中主要是写成:spring.datasource.url 和spring.datasource.driverClassName。

而在2.0升级之后需要变更成:spring.datasource.jdbc-url 和spring.datasource.driver-class-name即可解决!

 

 

`org.springframework.beans.factory.BeanCreationException` 是 Spring 框架中的异常,表示在创建某个 Bean 的过程中发生了错误。从你的描述来看,这个异常发生在尝试实例化名为 `'dataAuthRuleDbLoadImpl'` 的 Bean 时。 以下是问题的核心原因以及解决思路: ### 核心分析 1. **Bean 创建失败**: - 异常堆栈显示,在加载 `DataAuthRuleDbLoadImpl` 这个类作为 Spring 容器中的一个 Bean 时发生错误。 2. **构造函数抛出异常**: - 具体原因是该类的构造函数在执行期间引发了另一个异常 (`Constructor threw exception`)。 3. **数据库表不存在**: - 最底层的原因是由 H2 数据库驱动返回了 `JdbcSQLException: Table "SYS_DATA_AUTH" not found` 错误,表明程序试图访问的数据表 `"SYS_DATA_AUTH"` 并未存在于当前数据库中。 --- ### 解决方案 #### 步骤一:确认数据表是否存在 检查目标数据库(H2 或其他实际使用的数据库),验证是否确实存在 `SYS_DATA_AUTH` 表。如果此表缺失,则需要通过以下方式之一解决问题: - 确认项目的初始化脚本文件(如 `.sql` 文件)已正确运行,并包含建表语句。 - 如果是测试环境,手动添加对应的表结构到数据库中。 #### 步骤二:确保正确的启动配置 如果你正在使用嵌入式 H2 数据库进行本地调试,请确保其连接字符串、模式等配置无误。例如,在 application.properties 中应有类似下面的内容: ```properties spring.datasource.url=jdbc:h2:mem:testdb;MODE=MySQL; spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password=password ``` 同时注意 schema 和 data 脚本路径设置: ```properties spring.sql.init.schema-locations=classpath:schema.sql spring.sql.init.data-locations=classpath:data.sql ``` #### 步骤三:检查依赖注入与业务逻辑 审查 `DataAuthRuleDbLoadImpl` 类及其构造方法内容,判断是否有对非空资源或其他前置条件的假设(比如强制查询某些记录)。如果有这种需求,请补充必要的校验或日志提示信息。 --- ### 示例代码片段 (部分修正示例) 假如我们怀疑是因为 SQL 初始化顺序导致的问题,可以修改如下: ```java // DataAuthRuleDbLoadImpl.java 构造函数内增加健壮性处理 public DataAuthRuleDbLoadImpl() { try { // 查询 SYS_DATA_AUTH 是否为空 if (!tableExists("SYS_DATA_AUTH")) { throw new IllegalStateException("Required table 'SYS_DATA_AUTH' does NOT exist!"); } } catch (SQLException e) { log.error("Error checking database tables", e); throw new RuntimeException(e); // 将低层异常包装后再次抛给上层 } } private boolean tableExists(String tableName) throws SQLException { Connection connection = dataSource.getConnection(); // 使用数据源获取链接 DatabaseMetaData metaData = connection.getMetaData(); ResultSet rs = metaData.getTables(null, null, tableName.toUpperCase(), null); return rs.next(); // 存在则 true,反之 false } ``` --- ### 总结 此次报错的根本在于缺少关键表格 `SYS_DATA_AUTH` 导致后续操作无法继续完成。因此,建议优先排查数据库状态并修复相关缺陷。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值