【问题标题】:Spring Data Rest repositories occasionally not exportedSpring Data Rest 存储库偶尔不会导出
【发布时间】:2020-09-14 02:18:56
【问题描述】:

我在使用 Spring Data Rest (3.2.6.RELEASE) 的 Spring Boot 应用程序 (2.2.6.RELEASE) 中遇到了一个奇怪的问题。有时我的存储库不会通过休息暴露。使用完全相同的配置,我的应用程序的完全相同的版本(相同的 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 组件扫描在两种情况下都有效
  • 存储库本身在这两种情况下都可以正常工作,使用这些存储库的自定义控制器可以正常工作
  • org.springframework.data 启用调试日志记录会在两种情况下产生完全相同的输出
  • 比较来自执行器端点的响应没有显示任何明显的差异
  • 存储库检测策略显式设置为RepositoryDetectionStrategies.ANNOTATED
  • 我无法在 SSCE 中重现它
  • 模块已从 Spring Boot 1.5.18 升级,升级后开始出现此问题。

以前有没有其他人遇到过这个问题?这可能是什么原因造成的?或者一些关于如何进一步分析这个问题的指针?

【问题讨论】:

  • 似乎 RepositoryRestResource 存在问题,当您在 both scenarios 中说时,您的意思是重启后会中断?或者它也可以在运行时发生?一个不错的选择是跟踪和调试针对任何发现的实体/服务创建映射的代码片段,以交叉检查您那里没有库不匹配
  • @AntJavaDev 是的,这是一个启动/上下文加载问题,它在运行时永远不会改变。我尽可能多地尝试跟踪/调试,但在我看来,这归结为找到了org.springframework.data.repository.core.support.RepositoryFactoryInformation,这两种情况下的所有四个存储库都应该是这种情况。我也想到了库不匹配/冲突,但在我看来,这里只涉及与 spring 数据相关的依赖项,所有依赖项都通过启动器依赖项进行管理,没有任何特定版本。
  • 嗯很尴尬,我们确定这不是代理缓存/响应缓存的任何短类型吗?我的意思是,如果您不重新启动整个应用程序,无论如何它都不会公开 4 个 api 调用?如果您要添加另一个自定义项怎么办?新类是否被放置在不同的 pkg / jar 中?
  • 不,它在几个小时(甚至几天)内保持不变。存储库位于模块本身的同一包中(@EntityScan 的已配置基本包的子包)。
  • 很可能是一个暂时的依赖,你建议回到引导父 1.5.18,不会产生这个问题?

标签: java spring spring-boot spring-data spring-data-rest


【解决方案1】:

听起来您遇到了DATAREST-1502,它已在 3.2.7 及更高版本中得到修复。

【讨论】:

  • 感谢您指出这一点!让我确信升级到 Spring Boot 2.2.7 确实可以解决问题。
猜你喜欢
  • 2017-10-18
  • 2017-04-30
  • 1970-01-01
  • 1970-01-01
  • 2012-09-17
  • 2015-10-31
  • 2015-07-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多