我创建了一个库,用于在多个Spring Boot应用程序上共享代码。
该库包含一个存储库类// Library: RequestRepository.java
package org.test.lib;
public interface RequestRepository extends CrudRepository<Request, Integer> {}
// Application: Application.java
package org.test.app;
@SpringBootApplication
@ComponentScan(basePackages = {"org.test.app", "org.test.lib"})
public class Application {
// ...
}
。将库添加到Spring Boot项目后,它会编译并成功运行单元测试。
NoSuchBeanDefinitionException
当Spring尝试自动连接存储库时,启动应用程序会引发org.springframework.beans.factory.NoSuchBeanDefinitionException
。
原因:
org.test.lib.repositories.RequestRepository
:否 类型为“doc.setFontStyle('normal'); doc.setFontSize(12); var columns = [ { title: "Month", dataKey: "Month" }, { title: "2017", dataKey: "2017" }, ]; var vehicle=[{'Month':'January','2017':'Fatal'},{'Month':'February'},{'Month':'March'},{'Month':'April'},{'Month':'May'},{'Month':'June'},{'Month':'July'},{'Month':'August'},{'Month':'September'},{'Month':'October'},{'Month':'November'},{'Month':'December'}]; doc.autoTable(columns,vehicle, { startY:55, margin: {horizontal: 5}, bodyStyles: {valign: 'middle'}, styles: {overflow: 'linebreak'}, theme: 'grid', columnStyles: { text: { columnWidth: 'wrap' }, Month: { columnWidth: '10', fontStyle: 'bold', textColor: 40 , valign: 'left' }, 2017: { columnWidth: '20', fontStyle: 'bold', textColor: 40 , valign: 'left' } }); doc.save('Accident.pdf'); }
”的合格Bean 可用:至少有1个符合自动装配条件的bean 候选人。依赖项注释:{}
我为组件扫描启用了DEBUG日志记录,并获得了有关存储库的以下输出。
2018-07-10 08:33:25.035调试14976 --- [主要] .i.s.PathMatchingResourcePatternResolver:已解析的位置模式 [classpath *:org / test / lib / ** / *。class]到资源[URL [jar:file:/ C:/ Users /.../ lib-request-1.0.0-SNAPSHOT.jar!/org/test/lib/repositories/RequestRepository.class], ...
我错过了什么吗?
答案 0 :(得分:1)
您必须使用@EnableJpaRepositories
明确地在Spring Boot应用程序之外启用存储库。
@SpringBootApplication
@EnableJpaRepositories(basePackages = {"org.test.app", "org.test.lib"})
@ComponentScan(basePackages = {"org.test.app", "org.test.lib"})
public class Application {
// ...
}
请参见Spring guide。
默认情况下,Spring Boot将启用JPA存储库支持并查看 包(及其子包),其中
@SpringBootApplication
是 位于。如果您的配置具有JPA存储库接口 包中的定义不可见,您可以指出 使用@EnableJpaRepositories
及其类型安全的备用软件包basePackageClasses=MyRepository.class
参数。
用于使用库集@Entity
中的@EntityScan
类。