Spring Boot拆分DAO层为独立项目 找不到Dao接口bean如何解决
报错解决方案
错误根本原因是业务服务项目没有扫描到数据项目中的DAO层Bean,可按以下步骤逐一排查修改:
- 第一步:给业务项目
InsuranceCleanupService启动类补充组件扫描和JPA仓库扫描注解
你当前只加了@EntityScan,这个注解仅用于扫描JPA实体类,不会扫描@Repository、@Service等Spring托管Bean,也不会识别Spring Data JPA的DAO接口。修改后的启动类代码如下:
说明:package com.ics; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.domain.EntityScan; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication(scanBasePackages = {"com.ics", "com.dis"}) @EnableScheduling @EntityScan(basePackages = {"com.ms.base.entity", "com.dis" }) @EnableJpaRepositories(basePackages = {"com.dis.dao"}) public class InsuranceCleanupServiceApplication { public static void main(String[] args) { SpringApplication.run(InsuranceCleanupServiceApplication.class, args); } }scanBasePackages配置告诉Spring要扫描的根包,包含业务项目自身的com.ics和数据项目的com.dis,所有标注了Spring注解的类都会被识别为Bean@EnableJpaRepositories用于扫描Spring Data JPA的DAO接口,生成实现类托管为Bean
- 第二步:调整数据项目
DatabaseInteractionService的打包配置
作为依赖被引入的Spring Boot项目不能用官方的可执行jar打包方式,需要修改pom.xml:- 移除
spring-boot-maven-plugin插件 - 改用原生
maven-jar-plugin打包为普通jar包,否则业务项目无法加载到数据项目的类文件
- 移除
- 第三步:修复数据项目的配置注入错误
你当前写的@Value注解写法错误,没有用${}包裹配置key,会导致注入的是纯字符串而非配置文件中的值,修改方式有两种:- 方式1:修正@Value写法:
@Value("${spring.datasource.driverClassName}") String driverClassName; @Value("${spring.datasource.url}") String url; @Value("${spring.datasource.username}") String username; @Value("${spring.datasource.password}") String password; - 方式2:直接删除自定义的
DataSource、JdbcTemplateBean,Spring Boot的自动配置机制只要检测到类路径下有jdbc相关依赖、配置文件中有数据源参数,会自动生成这两个Bean,不需要手动声明
- 方式1:修正@Value写法:
- 第四步:检查DAO类的注解
确认com.dis.dao.EmployeeDao要么是继承了JpaRepository/CrudRepository的Spring Data JPA接口,要么是手动实现类上标注了@Repository注解。
内容的提问来源于stack exchange,提问作者Vineel Pellella
相关产品推荐
相关产品推荐

