Spring Boot测试Maven构建报jdbcUrl is required with driverClassName错误如何解决
错误触发原因
- 自定义数据源未被Spring容器识别:你编写的
MyDataSourceCfg配置类中,数据源创建方法appDataSource是private私有访问权限,且未添加@Bean注解,Spring无法扫描、实例化该数据源并注入到上下文。 - Quartz依赖触发数据源校验:你的项目引入了
quartz-scheduler依赖,Quartz默认会尝试加载数据源来持久化调度任务;你在测试类中排除了Spring Boot默认的数据源自动配置,又没有可用的自定义数据源,Quartz自动配置会尝试初始化Hikari连接池,但缺少必要的jdbcUrl配置,最终抛出该错误。 - 代码存在语法疏漏:数据源构建代码中
env.getProperty("url")、env.getProperty("password")两行末尾缺少右括号,也会导致配置加载异常。
解决方案
你可以根据自己的测试需求选择以下任意一种方案:
方案1:修复自定义数据源配置(适用需要使用数据库+Quartz持久化的场景)
修改MyDataSourceCfg类,给数据源方法添加@Bean、@Primary注解,调整访问权限为public,补全代码括号:
@Configuration public class MyDataSourceCfg { // 注入环境变量对象,原有代码缺少这行也会导致env为空 @Autowired private Environment env; @Bean @Primary public DataSource appDataSource() { return DataSourceBuilder.create() .driverClassName("org.postgresql.Driver") .url(env.getProperty("url")) .username(env.getProperty("user")) .password(env.getProperty("password")) .build(); } }
方案2:测试类排除Quartz自动配置(适用测试不需要用到Quartz功能的场景)
修改测试类的@EnableAutoConfiguration注解,添加Quartz自动配置排除项,避免Quartz去加载数据源:
@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class, QuartzAutoConfiguration.class })
方案3:配置Quartz使用内存存储(适用测试需要Quartz但不需要持久化调度任务的场景)
在测试资源目录下的application.properties或application.yml中添加如下配置,让Quartz使用内存存储任务,无需加载数据源:
spring.quartz.job-store-type=memory
内容的提问来源于stack exchange,提问作者continuousLearner
相关产品推荐
相关产品推荐

