我正在开发一个SpringBoot应用程序(例如MyApp),它依赖于两个具有不同实现的数据项目:
数据-了jdbc.jar
spring-boot-starter-jdbc
构建,它公开了我的应用程序将使用的JDBCDataService类示例代码:
@Service
public class JDBCDataServiceImpl implements JDBCDataService {
@Autowired
private JDBCDataRepository jdbcDataRepository;
...
}
my.data.jdbc
JDBCTemplate
示例存储库:
@Repository
public class JDBCDataRepositoryImpl implements JDBCDataRepository {
@Autowired
protected JdbcTemplate jdbcTemplate;
...
}
数据jpa.jar
spring-boot-starter-data-jpa
构建,它还公开了我的应用程序也将使用的JPADataService类示例代码:
@Service
public class JPADataServiceImpl implements JPADataService {
@Autowired
private JPADataRepository jpaDataRepository;
...
}
my.data.jpa
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 {
...
}
我现在找到了解决问题的方法。为了扫描我的数据库,我必须向上移动我的主要MyApp.java一个包级别。
我不得不将MyApp.java
放在my.app
包下,而是将其移至my
下,以便使用my.data.jpa
和my.data.jdbc
成功扫描我的库包。
答案 0 :(得分:8)
我现在找到了解决问题的方法。为了扫描我的数据库,我必须向上移动我的主要MyApp.java一个包级别。
我不得不将MyApp.java
放在my.app
包下,而是将其移至my
下,以便使用my.data.jpa
和my.data.jdbc
成功扫描我的库包。
答案 1 :(得分:6)
如果您尝试自动装配的类未使用@Component注释,则添加@ComponentScan将不起作用。为了使其工作,您必须在@Configuration
课程中注释方法。这样的事情应该允许你自动使用该类:
@Configuration
public class ConfigClass{
@Bean
public JPADataService jpaDataService(){
return new JPADataService();
}
}
答案 2 :(得分:1)
您需要在外部jar上配置spring.factories
:
external-jar-project
|--java
|--resources
|-- META-INF
|-- spring.factories
spring.factoires的接触点,像这样:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=xxx
答案 3 :(得分:-3)
这个问题同样也造成了我很久。我发现是应为springboot不能扫面到你约会的jar包路径下的相关类。
你可能需要使用类似@EnableJpaRepositories(“ cn.XXX”)@EntityScan(“ cn.XXX”)这样的注解来加载你的类(此问题也困扰了我很长时间。我发现的是springboot无法扫描您引入的jar包路径下的相关类。
您可能需要使用@EnableJpaRepositories(“ cn.XXX”)@EntityScan(“ cn.XXX”)之类的注释来扫描您的类)
希望对看到这个问题的人有帮助(希望对看到此问题的工程师有所帮助)