我正在开发一个SpringBoot应用程序(例如MyApp),它依赖于两个具有不同实现的数据项目:
data-jdbc.jar
- 使用
spring-boot-starter-jdbc
构建,它公开了应用程序将使用的JDBCDataService类
样本代码:
@Service
public class JDBCDataServiceImpl implements JDBCDataService {
@Autowired
private JDBCDataRepository jdbcDataRepository;
...
}
- 带封装
my.data.jdbc
- 没有SpringBoot主类。Spring配置仅为单元测试类创建
- 存储库类使用
JDBCTemplate
示例存储库:
@Repository
public class JDBCDataRepositoryImpl implements JDBCDataRepository {
@Autowired
protected JdbcTemplate jdbcTemplate;
...
}
data-jpa.jar
- 使用
spring-boot-starter-data-jpa
构建,spring-boot-starter-data-jpa
还公开了我的应用程序也将使用的JPADataService类
样本代码:
@Service
public class JPADataServiceImpl implements JPADataService {
@Autowired
private JPADataRepository jpaDataRepository;
...
}
- 带有封装
my.data.jpa
- 没有SpringBoot主类。Spring配置仅为单元测试类创建
- 存储库类扩展了
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
类中运行良好。
我已经尝试了以下问题中的解决方案,但这些方案都不适用于我的情况:
Can't I @Autowire a Bean which is present in a dependent Library Jar?
@ComponentScan(basePackages = {"org.example.main", "package.of.user.class"})
How can I @Autowire a spring bean that was created from an external jar?
@Configuration
@ComponentScan("com.package.where.my.class.is")
class Config {
...
}
我现在已经找到了解决我的问题的方法。我必须把我的主wwwiderexampleidercom向上移动MyApp.java一个包级别,以便扫描我的数据库。
为了成功地扫描带有my.data.jpa
和my.data.jdbc
包的库,我不得不将MyApp.java
放在my.app
包下,而不是将它移到my
下。
4条答案
按热度按时间vi4fp9gy1#
我现在已经找到了解决我的问题的方法。我必须把我的主wwwiderexampleidercom向上移动MyApp.java一个包级别,以便扫描我的数据库。
为了成功扫描带有
my.data.jpa
和my.data.jdbc
包的库,我不得不将MyApp.java
放在my.app
包下,而不是放在my
包下。lh80um4z2#
如果你试图自动连接的类没有用
@Component
注解,那么添加@ComponentScan
就不起作用。为了使它起作用,你必须在你的@Configuration
类中注解一个方法。类似这样的东西应该可以让你自动连接类:siv3szwd3#
您需要在外部jar中配置
spring.factories
:Spring的内容。
rxztt3cl4#
这个问题也困扰了我很长时间,我发现的是springboot无法扫描你介绍的jar包路径下的相关类。
您可能需要使用@EnableJpaRepositories(“cn.XXX”)@EntityScan(“cn.XXX”)之类的注解来扫描您的类)