我有一个解决此问题的方法,但是我想将其发布,以防其他人遇到。
我们有一个Spring boot Web应用程序,该应用程序打包为war文件并部署到Tomcat。它有几个用@RepositoryRestResource注释的PagingAndSortingRepository类,它们用于处理其余请求,还有其他一些用@RestController注释的类。 RestController类确实对存储库类进行了一些调用。
通过2.2.5.RELEASE版本的spring-boot,一切都可以正常工作。升级到2.2.6.RELEASE后,我们遇到了问题。一切都很好(意味着可以访问两种类型的剩余资源),但是运行了大约10-15分钟后,通过RepositoryRestResource访问的所有内容开始返回404错误。任何日志中都没有错误消息,以前它们运行正常时,它们才开始返回404错误。 RestControllers一直保持正常运行。回到2.2.5.RELEASE之后,我们再也没有问题了。
由于我们使用的是dependencyManagement,所以我认为这不是版本不匹配的问题。 pom.xml文件中的spring构件都没有版本。这是pom中的内容:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
答案 0 :(得分:2)
升级到spring-boot 2.2.6后,我重现了完全相同的问题:带有@RepositoryRestResource批注的PagingAndSortingRepository类随机开始返回404错误...回滚到版本2.2.5解决了该问题!
答案 1 :(得分:1)
这是我们的问题:事实证明,我们有多个context.xml文件以及多个application.properties文件,尽管似乎罪魁祸首是context.xml文件。有些东西(Netbeans?)不断生成src / main / webapp / META-INF / context.xml文件,但是在生产中,我们使用外部文件,而不是与war文件捆绑在一起的文件。无论如何,发生的是src中生成的context.xml文件与war文件捆绑在一起,并且它的路径与生产上下文文件不同。我不知道为什么,但是当使用2.2.5版本时,它似乎忽略了那个伪造的捆绑的context.xml文件,而对于2.2.6,它感到困惑并开始返回“未找到”错误。从war文件中删除该无关的context.xml文件即可正常工作。
这是生成的(且是虚假的)context.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<Context path=""/>
这是位于conf / Catalina / localhost下的有效app.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/tdapp" docBase="${catalina.base}/warfiles/tdapp.war">
<Environment name="spring.config.location" value="file:/usr/share/tdapp/application.properties" type="java.lang.String"/>
</Context>
答案 2 :(得分:0)
这是2.2.6的已知问题。 特别: https://jira.spring.io/browse/DATAREST-1502 数小时后具有导致404错误的副作用(其他人观察并报告为https://jira.spring.io/browse/DATAREST-1518)
简而言之,升级到2.2.7+应该可以解决此特定问题。