根据Spring Boot Devtools docs,devtools不会以“生产模式”运行;也就是说,如果您使用java -jar ..,
执行Spring Boot应用程序,那么它将不会使用devtools的内置JVM魔法。但是,Spring Boot starter docs只显示运行Spring Boot应用程序的一种方式......通过java -jar...
。
首先,我想知道:如何在非生产模式下运行我的Spring Boot应用程序?我知道您可以使用Spring Boot CLI运行您的应用程序(例如spring run
) ,但这是唯一的方法吗?
此外,相同的devtools文档提到您可以使用一些excludeDevtools
选项从生产二进制文件中显式删除devtools jar,但它们从不解释在何处/如何使用它。这里有任何例子/想法吗?
答案 0 :(得分:8)
1)在非生产模式(即不是来自JAR)中运行Spring Boot应用程序的一个示例来自IDE(更具体地说是Eclipse或IntelliJ),您可以从main方法启动应用程序,或者使用Spring Boot发布支持。这是Dev Tools最实际的用途,因为它允许在不重新启动的情况下持续观察应用程序中的更改。
2)excludeDevTools
是Spring Boot Maven插件http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/maven-plugin/repackage-mojo.html或Gradle插件的选项 - 请参阅http://docs.spring.io/spring-boot/docs/current/reference/html/build-tool-plugins-gradle-plugin.html#build-tool-plugins-gradle-repackage-configuration。
所以在你的情况下它会是
bootRepackage {
mainClass = 'demo.Application'
excludeDevtools = true
}
答案 1 :(得分:1)
从Spring启动开始,devtools使开发更容易。 Spring引导使用嵌入式servlet容器(tomcat,underow,jetty),即使在非生产环境中也可以使用生产就绪代码。
关于如何在非生产环境中运行Spring-boot应用程序的问题,我们可以通过右键单击 - >直接从Spring工具套件IDE运行应用程序。如果是本地环境,则以Spring引导运行。
如果使用的构建工具是maven,那么从命令提示符mvn boot:run,如果它是gradle,则在命令提示符中从项目位置的根文件夹gradle bootRun。如果您将应用程序打包为超级jar,那么Java -jar ..,如果您的环境是Linux,则可以从一个进程开始。
关于忽略生产环境中的devtools,如果我们将Spring-boot-devtools指定为构建工具(maven,gradle)的依赖项中的可选范围,则Spring启动会智能地忽略devtools jar。在gradle中,Spring引导gradle插件负责忽略最终部署的jar或war的devtools
更新:: 调试使用Gradle运行的Spring Boot应用程序,如http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#howto-remote-debug-gradle-run596
所示将其添加到build.gradle文件中:
applicationDefaultJvmArgs = [
" -agentlib:JDWP =运输= dt_socket,服务器= Y,暂停= Y,地址= 5005" ]
在IntelliJ Idea IDE或STS中,设置新的Debug配置,然后在选项中选择" Remote"。默认值应该没问题,但要注意端口号和传输类型(" socket")。玩得开心!