Java Spring数据Rest存储库偶尔不导出
我的Spring引导应用程序(Java Spring数据Rest存储库偶尔不导出,java,spring,spring-boot,spring-data,spring-data-rest,Java,Spring,Spring Boot,Spring Data,Spring Data Rest,我的Spring引导应用程序(2.2.6.RELEASE)使用Spring数据Rest(3.2.6.RELEASE)时出现了一个奇怪的问题。有时我的存储库不会通过rest公开。这种情况发生在使用完全相同配置的应用程序的完全相同版本(相同jar)上 有4个@RepositoryRestResource,当它工作时,根资源会公开以下内容: { "_links": { "entity-a": { "href": "http://localhost:808
2.2.6.RELEASE
)使用Spring数据Rest(3.2.6.RELEASE
)时出现了一个奇怪的问题。有时我的存储库不会通过rest公开。这种情况发生在使用完全相同配置的应用程序的完全相同版本(相同jar)上
有4个@RepositoryRestResource
,当它工作时,根资源会公开以下内容:
{
"_links": {
"entity-a": {
"href": "http://localhost:8080/api/entity-a{?projection}",
"templated": true
},
"entity-b": {
"href": "http://localhost:8080/api/entity-b"
},
"entity-c": {
"href": "http://localhost:8080/api/entity-c{?page,size,sort,projection}",
"templated": true
},
"entity-d": {
"href": "http://localhost:8080/api/entity-d"
},
"profile": {
"href": "http://localhost:8080/api/profile"
}
}
}
当它不工作时,它会返回:
{
"_links": {
"profile": {
"href": "http://localhost:8080/api/profile"
}
}
}
其他一些调查结果:
- JPA组件扫描在这两种情况下都有效
- 存储库本身在这两种情况下都正常工作,使用这些repo的自定义控制器工作正常
- 为
启用调试日志记录会在两种情况下产生完全相同的输出org.springframework.data
- 比较执行器端点的响应没有显示出任何明显的差异
- 存储库检测策略设置为
RepositoryDetectionStrategies。显式注释
- 我无法在SSCE中复制它
- 模块已从Spring Boot 1.5.18升级,升级后问题开始出现
以前有没有其他人遇到过这个问题?这可能是什么原因造成的?或者一些关于如何进一步分析此问题的建议?听起来像是您遇到了3.2.7及更新版本中已修复的问题。似乎是RepositoryRestResource有问题,当您在
两种情况下都说时,您的意思是重启后会中断吗?或者它也可能在运行时发生?一个好的选择是跟踪和调试针对任何发现的实体/服务创建映射的代码段,以交叉检查库是否不匹配there@AntJavaDev是的,这是一个启动/上下文加载问题,它在运行时从不更改。我尝试了尽可能多的跟踪/调试,但在我看来,这归结为org.springframework.data.repository.core.support.RepositoryFactoryInformation
,在这两种情况下,这四个存储库都应该是这样。我也想到了库不匹配/冲突,但在我看来,这里只涉及与spring数据相关的依赖项,所有依赖项都是通过starter依赖项管理的,没有任何特定版本。嗯,非常尴尬,我们确定这不是任何短类型的代理缓存/响应缓存吗?我的意思是,如果你不重新启动整个应用程序,它不会暴露4个api调用,不管怎样?如果您正在添加另一个自定义的呢?新类是否放在不同的pkg/jar中?不,它在几个小时(甚至几天)内保持不变。repo在模块本身的同一个包中(为@EntityScan
配置的基本包的子包)。很可能是一个暂时的依赖关系在起作用,您建议返回引导父1.5.18不会产生这个问题?感谢您指出这一点!这让我确信升级到SpringBoot2.2.7实际上解决了这个问题。