SpringBoot:无法从其他Jar库中自动布线类
2022-09-02 10:11:56
我正在开发一个SpringBoot应用程序(例如MyApp),该应用程序依赖于两个具有不同实现的数据项目:
data-jdbc.jar
- 使用它公开 JDBCDataService 类构建,该类将由我的应用程序使用
spring-boot-starter-jdbc
示例代码:
@Service
public class JDBCDataServiceImpl implements JDBCDataService {
@Autowired
private JDBCDataRepository jdbcDataRepository;
...
}
- 带包装
my.data.jdbc
- 没有SpringBoot主类。仅为单元测试类创建的弹簧配置
- 存储库类正在使用
JDBCTemplate
示例存储库:
@Repository
public class JDBCDataRepositoryImpl implements JDBCDataRepository {
@Autowired
protected JdbcTemplate jdbcTemplate;
...
}
data-jpa.jar
- 使用也公开了 JPADataService 类构建,该类也将由我的应用程序使用
spring-boot-starter-data-jpa
示例代码:
@Service
public class JPADataServiceImpl implements JPADataService {
@Autowired
private JPADataRepository jpaDataRepository;
...
}
- 带包装
my.data.jpa
- 没有SpringBoot主类。仅为单元测试类创建的弹簧配置
- 存储库类扩展了接口
CrudRepository
示例存储库:
@Repository
public interface JPADataRepository extends CrudRepository<MyObject, Integer{
...
}
在我的SpringBoot项目中,我有以下SpringBoot主要应用程序:
@SpringBootApplication
public class MyApp extends SpringBootServletInitializer {
}
在我的商务服务班上,我有以下注射MainService
@Service
public class MainServiceImpl implements MainService {
@Autowired
private JDBCDataService jdbcDataService;
@Autowired
private JPADataService jpaDataService;
但是,我遇到了一个问题,这个问题只存在于班级中,但对班级来说却很好。"Could not Autowire. No beans of 'JPADataService' type found"
JPADataService
JDBCService
我已经尝试了以下问题中找到的解决方案,但在我的情况下,这些解决方案都不起作用:
我不能@Autowire依赖库 Jar 中存在的 Bean 吗?
@ComponentScan(basePackages = {"org.example.main", "package.of.user.class"})
@Configuration
@ComponentScan("com.package.where.my.class.is")
class Config {
...
}
我现在已经找到了解决问题的方法。我必须将主 MyApp.java一个更高的包级别才能扫描我的数据库。
我必须不把我的包放在下面,而是把它移到下面,以便成功地扫描我的库和包。MyApp.java
my.app
my
my.data.jpa
my.data.jdbc