使用 Spring Boot + IntelliJ 进行开发的最佳方式

Posted

技术标签:

【中文标题】使用 Spring Boot + IntelliJ 进行开发的最佳方式【英文标题】:Best way to develop with Spring Boot + IntelliJ 【发布时间】:2015-03-07 00:28:01 【问题描述】:

我们有一个构建在 Spring Boot 之上的产品,并通过嵌入式 Tomcat 通过可执行战争进行部署,但在开发过程中,我们采用了在托管 Tomcat 上开发的方法,因此我们的 IDE(主要是 IntelliJ)将具有热插拔/重新部署支持(而不是循环我们的整个应用程序,这需要一段时间才能启动)。

我们最近在我们的项目中添加了spring-boot-starter-websocket,并且在使用嵌入式 Tomcat 的资源时遇到了托管 Tomcat 的类加载器的问题,并且出现问题。我们可以通过使用配置文件并将嵌入的库标记为provided 来解决它,这样只有我们的 CI 构建包含它们,但它最容易出错和 hacky。


所以,我的问题是:有没有更好的做事方式? 使用 Maven 插件或可运行类会带来问题,因为 maven 插件不会热插拔,而可运行类有寻找 JSP 之类的类路径的问题(希望我们事先切换到 Thymeleaf,但下次;)

“更好”的开发周期的要求是:

    代码热插拔 - 也就是在开发时不必重新启动应用程序/服务器(除了更改方法签名等)

    良好的工具支持

    简单、可重复的设置——几乎是“检查并运行”

谢谢!

【问题讨论】:

你试用过spring Tool Suite吗?它非常适合 spring 应用程序,特别是 spring boot。 是的,我们喜欢 STS 并且有几个人在使用它。我现在非常喜欢 IntelliJ,因为它也有非常棒的数据库工具 【参考方案1】:

您不再需要 tomcat 来重新加载类。使用 Spring-boot 1.2,您只需调试 maven 目标 spring-boot:run 并重新加载类。 这在 intellij 中对我有用。

【讨论】:

我刚刚试了一下,一切正常,但我无法设置断点/使用 IDE 进行调试。您必须手动配置调试器吗? 不,我只有一个常规的 spring-boot maven 项目,其中在构建部分添加了 spring-boot 插件。然后我在调试模式下启动 spring-boot:run 目标。然后我可以在代码中设置断点。 @PatrickCornelissen 您在 Windows 上吗?因为在 Linux 上,可执行 gradle/maven 任务 bootRun 的 pid 存在问题。它通过 fork 创建一个子进程,当您从 IDEA 停止任务时,它确实停止了父进程,而不是子进程。所以端口仍然被它阻塞,你必须手动杀死它 当你运行主类本身时,intelliJ 不使用 gradle/maven 来运行它。但即使在使用 maven/gradle 时,到目前为止,我还没有遇到旧 java 进程的任何问题,但我正在使用 Mac。我再也受不了窗户了 ;-)

以上是关于使用 Spring Boot + IntelliJ 进行开发的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章

使用 IntelliJ 部署启用嵌入式 tomcat 的 spring-boot 应用程序

使用 Spring Boot + IntelliJ 进行开发的最佳方式

Spring Cloud Spring Boot mybatis分布式微服务云架构使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程

Spring Cloud Spring Boot mybatis分布式微服务云架构使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程

如何在 IDEA Intellij 上使用 Spring-boot 进行自动重新加载

Springboot:使用Intellij中的Spring Initializr来快速构建Spring Boot工程