我有一个像这样的弹簧启动应用程序:
package my.package;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration;
import org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration;
@SpringBootApplication
public class MySpringBootApp{
public static void main(String[] args) {
SpringApplication.run(MySpringBootApp.class, args);
}
}
我在包my.package.service
@Service
public class MyService {
private ServiceInADifferentJar dep;
public MySerivce(ServiceInADifferentJar dep) {
this.dep = dep;
}
}
类ServiceInADifferentJar
是另一个JAR中的@Service
注释类,我将其作为maven依赖项包含在内。
JAR具有以下文件结构:
src/main/java
- some.package.repository
MyRepository.java
- some.package.service
ServiceInADifferentJar.java
MyRepository
是一个@Repository
带注释的接口,用于扩展Spring Data接口。
ServiceInADifferentJar
在其构造函数中注入MyRepository
。
当我启动应用程序时,出现无法找到ServiceInADifferentJar
的错误。
然后我将其添加到我的SpringBootApp
@SpringBootApplication(scanBasePackages = {"some.package"})
找到和ServiceInADifferentJar
,但不是MyRepository
。
为什么不呢?为什么不扫描其他JAR中some.package
的所有子包?
*编辑*
存储库
package some.package.repository;
@Repository
public interface MyRepository extends MongoRepository<SomeEntity, String> {
}
答案 0 :(得分:1)
您可能希望使用EnableMongoRepositories注释,以便找到您的Mongo存储库。
@EnableMongoRepositories(basePackages = "some.package.repository")
以下问题,尽管是关于JPA存储库,但有关于存储库扫描如何工作的更多解释:
Can't Autowire @Repository annotated interface in Spring Boot
答案 1 :(得分:0)
嘿,你应该在@SpringBootApplication标签后把它放在你的主类中 @ComponentScan(basePackages = {“some.package”})