Idea springboot 配置热部署

摘要:
概念配置热部署1.概念热部署是一个处于运行状态的应用程序。修改源代码后,增量内容可以自动编译并部署到服务器,而无需重新启动,从而使修改立即生效。
Idea配置热部署

 

一、概念

热部署就是正在运行状态的应用,修改了他的源码之后,在不重新启动的情况下能够自动把增量内容编译并部署到服务器上,使得修改立即生效。热部署为了解决的问题有两个, 一是在开发的时候,修改代码后不需要重启应用就能看到效果,大大提升开发效率;二是生产上运行的程序,可以在不停止运行的情况下进行升级,不影响用户使用。


二、Idea开启热部署

本篇文章主要是介绍Idea这款开发工具的热部署,而用Idea的人大多数都是用来开发java程序,当前流行的java程序主要有两种,第一种是传统的Web应用,依赖Tomcat这种web容器运行;第二种是Spring boot程序, 内嵌了运行环境。


2.1 Tomcat热部署

a). 在顶部找到程序运行操作栏, 点击Edit Configurations

Idea springboot 配置热部署第1张

b). 点击你要配置的tomcat,点击deployment,点击”+“

image


c). 然后选择你要部署的war包,热部署必须要选择带有exploded的war包

image


d). 再切换回Server,按照下图标注配置

image


配置完后点击ok即可启动你的tomcat,然后改一下jsp、java文件实验热部署配置是否成功。

最后提示一下,Idea热部署并非绝对实时, 还是会有延时的,假如你手速快的话可能会出现改了并没有马上生效。所以此时不要怀疑热部署没有配置成功,稍微等一会你会看到开发工具左下角会有一个class reload的提示,出现这个提示才说明已经热部署完成了。

image


当然, 如果你想马上生效的话,可以点击下图标标注的按钮,或者使用快捷键Ctrl + F10

image


2.2 Spring boot程序热部署


a). 在顶部找到程序运行操作栏, 点击Edit Configurations,点击要配置的程序,按照下图标注地方配置

image


配置完后点击ok即可启动你的程序,java文件实验热部署配置是否成功。


但配置到这里只是会使java文件和其他静态资源热部署成功,但如果您的Spring boot程序是web程序,并且有jsp或Thymeleaf等页面模板引擎,则还需要在Spring boot的配置文件中配置。


如果是jsp, 在application.yml文件下加入配置

image


如果是Thymeleaf, 则在application.yml文件加入spring:thymeleaf:cache: false 配置

Spring boot程序除了通过上述步奏实现热部署,还可以通过给程序添加spring-boot-devtools依赖实现。

<!-- 热部署 -->
<dependency>

     <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
     <version>2.0.4.RELEASE</version>

     <!-- 启用 -->
     <optional>true</optional>
 </dependency>

 

三、其他配置


如果你通过上面的步骤还没实现想要的热部署效果,可以继续做以下两个配置


3.1 开启Java Compiler的自动build

image


3.2 按住ctrl + shift +alt + / 选择Registry,按照下图标注配置

image



IntelliJ IDEA 中SpringBoot对Run/Debug Configurations配置 SpringBoot热部署

运行一个SpringBoot多模块应用

使用SpringBoot配置启动:

Use classpath of module选中要运行的模块

VM options:内部配置参数

-Dserver.port=8080 -Dspring.profiles.active=test -Ddebug

server.port可以设置端口号,spring.profiles.active=test可以设置运行环境

-Ddebug 开启debug模式

Idea springboot 配置热部署第11张

这种方式的好处就是不用对代码进行任何变动,比较方便。

使用maven启动:

不同版本的spring-boot-maven-plugin的jvm参数配置有所不同,同时与通过main方法启动springboot程序传递参数也有所不同。

在运行main方法时,可以通过java -jar 后面通过添加-D的参数即可传递,比如:

java -jar -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 huishi-api-implementation.jar

参考:

java -Djsse.enableSNIExtension=false -Xmx1200m -XX:MaxPermSize=256M  -agentlib:jdwp=transport=dt_socket,server=y,address=30306,suspend=n -jar mac-quickstart-2.0.jar -gui

pom.xml文件配置:

复制代码
<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <jvmArguments>-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005</jvmArguments>
                </configuration>
            </plugin>
        </plugins>
    </build>
复制代码

此时运行spring-boot:run,是可以正常传递参数。但此时通过mvn spring-boot:run命令来传递参数,参数值将会无效。

同样,即使项目中pom文件配置了上面的plugin,直接通过main方法启动,此参数也是不会生效的。打包部署时依旧需要在执行命令中添加参数项。

这种方式要改动文件,对于提交比较麻烦,不太喜欢。

idea中对springboot进行热部署

1.SpringLoaded

使用pom.xml修改

复制代码
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <dependencies>
        <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>springloaded</artifactId>
        <version>1.2.6.RELEASE</version>
        </dependency>
    </dependencies>
</plugin>
复制代码

或者添加vm参数:

-javaagent:D:maven
epositoryorgspringframeworkspringloaded1.2.6.RELEASEspringloaded-1.2.6.RELEASE.jar -noverify

我比较喜欢添加vm参数的方式

这种方式系统会监视classes文件,当有classes文件被改动时,系统会重新加载类文件,不用重启启动服务。

2.使用spring-boot-devtools

pom.xml中添加

复制代码
<!-- ideal修改文件自动重启工具 ,eclipse不需要 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
复制代码

将依赖关系标记为可选<optional>true</optional>是一种最佳做法,可以防止使用项目将devtools传递性地应用于其他模块。

这种方式是使用自动重启

自动重启的原理在于spring boot使用两个classloader:不改变的类(如第三方jar)由base类加载器加载,正在开发的类由restart类加载器加载。应用重启时,restart类加载器被扔掉重建,而base类加载器不变,这种方法意味着应用程序重新启动通常比“冷启动”快得多,因为base类加载器已经可用并已填充。

所以,当我们开启devtools后,classpath中的文件变化会导致应用自动重启。

总之上面这两种方式都是在改动class文件的时候才会进行热部署,所以要手动进行编译或者开始idea的自动编译。

3.jrebel插件,以前还好破解,现在越来越难破解,没钱,pass.

免责声明:文章转载自《Idea springboot 配置热部署》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇动态任务定义和任务链WindowsForm 公共控件 菜单和工具栏下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java程序员的IntelliJ IDEA使用教程

前言 博主是Java程序员,以前一直都用myeclipse来开发的,说实话感觉myeclipse毫无美感可言,后来经过同事介绍,认识了IDEA,一眼就相中了IDEA黑色的主题风格,自此就抛弃了旧爱myeclipse。当时还不懂IDEA功能上比myeclipse好在哪里,只是单纯的爱上了黑色的主题。后来用了一段时间,事实证明还真的更好用。下文我将介绍一下正...

IDEA正确设置编码统一为UTF-8

之前代码在myeclispe10跑得好好的来这个intellij idea 就一直出错 改了好久的编码都没卵用,如下设置才正确。还有idea的web工程目录和myeclispe的目录是不一样的,神坑。 File -> Settings->File Encodings -> Defaule encoding for properties f...

IntelliJ IDEA 2018.3 永久激活 破解[Windows]

IntelliJ IDEA 作为一个优秀的Java开发环境,深受许多开发者喜爱,但是它的价格却贵得让人无法接受,这篇文章将介绍永久激活IntelliJ IDEA的方法(使用破解补丁)。 系统环境:Win10 64位软件版本:IntelliJ IDEA 2018.3 下载 废话不多说,直接扔下载链接 程序安装包:https://download.jetbra...

【小技巧】IDEA设置不自动生成import *

今天在学习TestNG框架的时候,用到@BeforeSuite , @AfterSuite,  @BeforeTest, @AfterTest, @BeforeClass, @AfterClass, @BeforeMethod, @AfterMethod, @Test等, 不过在查看import导入详情时,发现仅有 import org.testng.an...

IDEA、Pycharm学生免费使用(无教育邮箱)

一、打开JetBrains学生产品网站 JetBrains Products for Learning:https://www.jetbrains.com/shop/eform/students 二、选择官方文件OFFICIAL DOCUMENT 三、获取学信网认证 1. 进入学信网,并登录 学信网:https://www.chsi.com.cn/ 2....

Webstorm/IntelliJ Idea 过期破解方法

一、Webstorm过期破解方法  如下图,WebStorm过期了,每次都是用30分钟,重新打开。 解决方法: 第一步:先删除C:Users本机用户名.WebStorm2016.3config文件中eval文件。 第二步:打开webstrom 如图,填写许可证激活码:http://idea.imsxm.com/,点击Activate完成。 如图 如果此...