排除DataSourceAutoConfiguration后Spring Boot JPA Repository Bean缺失求助
问题解决步骤
1. 恢复数据源自动配置
你之前排除DataSourceAutoConfiguration.class的操作会完全禁用Spring Boot的数据源、JPA自动配置逻辑,导致@Repository接口无法被实例化为Bean。首先移除启动类中的exclude配置:
@SpringBootApplication public class AtlokalUserMgmtApplication { public static void main(String[] args) { SpringApplication.run(AtlokalUserMgmtApplication.class, args); } }
2. 修复SQL文件加载错误
最初的Unable to load resources from db/scripts/*.sql错误是资源路径配置或文件位置问题,按以下方式排查修正:
- 确认文件位置:确保
db/scripts目录位于src/main/resources下,Spring默认从classpath(即resources目录)加载初始化脚本 - 修正配置路径:在
application.properties中明确指定classpath前缀:spring.sql.init.data-locations=classpath:db/scripts/*.sql - 检查文件有效性:确认
db/scripts下存在.sql文件,文件名无拼写错误
3. 调整初始化顺序(可选)
因为你设置了spring.jpa.hibernate.ddl-auto=none(不自动建表),如果SQL脚本是插入数据到已存在的表中,建议将数据源初始化延迟到JPA初始化完成后,避免因表不存在导致的插入失败:
spring.jpa.defer-datasource-initialization=true
4. 确保Repository被扫描
如果UserRepository所在包不在AtlokalUserMgmtApplication类所在包的子包下,需要显式指定Repository扫描路径:
@SpringBootApplication @EnableJpaRepositories(basePackages = "com.atlokal.user.mgmt.user.dao") public class AtlokalUserMgmtApplication { public static void main(String[] args) { SpringApplication.run(AtlokalUserMgmtApplication.class, args); } }
最终修正后的application.properties
spring.jpa.hibernate.ddl-auto=none spring.sql.init.mode=always spring.sql.init.data-locations=classpath:db/scripts/*.sql spring.jpa.defer-datasource-initialization=true
内容的提问来源于stack exchange,提问作者Thirumalesu
相关产品推荐
相关产品推荐

