Spring Boot整合pi4j启动报错javax.sql.DataSource找不到问题求助
错误根因排查及解决办法
1. 确认Spring Boot版本与命名空间适配
- 如果你使用的是Spring Boot 3.x版本,该版本全量切换到了jakarta命名空间,
javax.sql.DataSource已被废弃改为jakarta.sql.DataSource,如果你的pi4j或其他依赖仍在使用javax规范包,就会触发类找不到错误:- 方案1:降级Spring Boot到2.7.x稳定版本,该版本仍支持javax命名空间,适配绝大多数旧版pi4j组件
- 方案2:升级pi4j到支持jakarta规范的适配版本,同时检查所有第三方依赖是否已完成jakarta迁移
2. 检查JDBC相关依赖是否完整
javax.sql.DataSource属于JDBC规范类,你需要确认pom.xml中已经引入对应的启动器:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!-- 如使用特定数据库,还需引入对应驱动依赖 -->
如果之前的依赖配置中错误排除了spring-jdbc相关包,也需要把排除规则删掉。
3. 修正module-info.java配置
由于你使用了Java模块系统,必须在module-info.java中显式声明依赖JDBC模块:
module 你的模块名 { // 必须添加这行引入javax.sql所在的基础模块 requires java.sql; // 如用到Spring JDBC还需添加 requires spring.jdbc; // 其他原有配置保持不变 }
4. 无数据库需求优先用本方案:关闭DataSource自动配置
如果你的pi4j项目根本不需要用到数据库功能,可以直接关闭Spring Boot的DataSource自动配置,避免触发不必要的类加载逻辑,这是最快解决问题的方案:
在启动类的@SpringBootApplication注解上添加排除规则:
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration; @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, JdbcTemplateAutoConfiguration.class }) public class 你的启动类名 { public static void main(String[] args) { SpringApplication.run(你的启动类名.class, args); } }
内容的提问来源于stack exchange,提问作者Dadzio008
相关产品推荐
相关产品推荐

