0

我正在 Spring Boot 中编写一个 REST API,它在运行时生成一个类、控制器和存储库。生成代码后,我正在使用开发工具重新编译该类。

我在我的 pom.xml 中包含了开发工具依赖项,并且在我的本地机器上一切正常。但是,一旦我部署到 Ubuntu 服务器并在运行时创建了一个新类,当我尝试访问端点时它会生成一个错误。

{
"timestamp": "2020-04-05T03:26:53.733+0000",
"status": 404,
"error": "Not Found",
"message": "No message available",
"path": "/api/reg"

}

当我关闭 Tomcat 服务器并重新运行应用程序时,先前生成的类及其控制器变得可用并且能够访问端点。

所以我的问题是;一旦在运行时生成类,如何让spring boot重新编译和扫描所有生成的组件,而无需关闭服务器?

4

2 回答 2

0

spring-boot-devtools 在使用哪个 IDE 时是一个有用的功能,因为它为代码更改提供了非常快速的反馈循环,请注意,在运行完全打包的应用程序时,开发工具会自动禁用。

它在使用 java -jar 部署/启动或使用特定类加载器触发时被禁用。然后它被认为是一个生产应用程序。

您可以将依赖项标记为可选,这是防止 devtools 应用于其他模块的最佳实践。您可以在此春季文档中参考更多详细信息,

https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-devtools

于 2020-04-05T08:12:48.570 回答
0

问题可能是您在本地使用某种嵌入式 Tomcat 或 Jetty。它能够在运行时获取更改。

我假设您将 Tomcat 用作 Web 服务器(不是 jar 本身附带的嵌入式服务器),因为您提到必须手动重新启动它。不确定 Tomcat Web 服务器是否能够在运行时获取类更改。

如果您希望 Tomcat 在运行时重新加载类,请尝试查看此答案。

于 2020-04-05T04:23:02.920 回答