Les*_*ler 5 spring-data-rest spring-boot
我有一个解决这个问题的方法,但我想发布这个以防其他人遇到这个问题。
我们有一个 Spring Boot Web 应用程序,它被打包为一个 war 文件并部署到 Tomcat。它有几个用@RepositoryRestResource 注释的PagingAndSortingRepository 类来处理rest 请求,还有一些用@RestController 注释的其他类。RestController 类确实对存储库类进行了一些调用。
通过 spring-boot 的 2.2.5.RELEASE 版本,一切正常。升级到 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>
Run Code Online (Sandbox Code Playgroud)
这是我们的问题:事实证明我们有多个 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=""/>
Run Code Online (Sandbox Code Playgroud)
这是位于 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>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
262 次 |
最近记录: |