我正在用spring boot编写一个REST API,它在运行时生成一个类、控制器和存储库。一旦代码生成,我就会使用dev工具重新编译这个类。
我已经在我的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重新编译和扫描所有生成的组件,而不必关闭服务器?
发布于 2020-04-05 12:23:03
问题可能是您在本地使用了某种嵌入式Tomcat或Jetty。它能够在运行时获取更改。
我假设您使用Tomcat作为web服务器(而不是jar本身附带的嵌入式服务器),因为您提到必须手动重新启动它。不确定Tomcat web服务器是否能够在运行时获取类更改。
如果您希望Tomcat在运行时重新加载类,请尝试查看此answer。
发布于 2020-04-05 16:12:49
spring-boot-devtools在运行哪个IDE时是一个很有用的功能,因为它为代码更改提供了一个非常快的反馈循环,请注意,当运行一个完全打包的应用程序时,开发工具会自动禁用。
当使用java -jar部署/启动它时,或者使用特定的类加载器触发它时,它将被禁用。那么它就被认为是生产应用程序。
您可以将依赖项标记为可选,这是防止devtools应用于其他模块的最佳实践。您可以在这个spring文档中参考更多详细信息,
https://stackoverflow.com/questions/61037949
复制相似问题