[Spring]spring-boot中使用springloaded实现热部署

0x0前言

JAVA实现热部署的解决方案JRebel比较多,但是JRebel是收费的,之前还写过一篇《Nginx+Tomcat集群解决均衡负载及生产环境热部署》,的解决方案,这个可以说是一个伪热部署方案,只是通过负载均衡,在生产环境解决平滑部署的问题,并不能解决开发环境,修改、删除、添加代码及时生效的效果,近日接触spring-boot有看到springloaded的热部署解决方案,于是试了一下,在此做下笔记。

0x1_1关键环境

  • 系统:macOS sierra
  • JDK:1.8
  • spring-boot 1.3.5RELEASE
  • IDE:IntelliJ IDEA(部分操作仅限IDEA)

0x1 项目配置

0x1_1单moudle的maven项目

spring-boot其他的就不在此累述累述,需要注意的一点是,spring-boot官方建议入口函数Application.java要放到根目录

  • pom.xml添加配置如下:
<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <dependencies>
                    
                    <dependency>
                        <groupId>org.springframeworkgroupId>
                        <artifactId>springloadedartifactId>
                        <version>1.2.6.RELEASEversion>
                    dependency>
                dependencies>
            plugin>
        plugins>
    build>
  • 启动:mvn spring-boot:run
    出现如下配置表实配置成功:

    [INFO] Attaching agents: [/Users/SuperZemo/.m2/repository/org/springframework/springloaded/1.2.6.RELEASE/springloaded-1.2.6.RELEASE.jar]
  • 如果Application.java不在根目录下,或有多个入口,可以修改pom.xml如下配置指定入口文件:

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <dependencies>
                    
                    <dependency>
                        <groupId>org.springframeworkgroupId>
                        <artifactId>springloadedartifactId>
                        <version>1.2.6.RELEASEversion>
                    dependency>
                dependencies>
                <configuration>
                       <mainClass>org.zemo.controller.ApplicationmainClass>
                configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackagegoal>
                        goals>
                    execution>
                executions>
            plugin>
        plugins>
    build>

修改后build–>compile 'XXX.java' 即可,快捷键command+shift+F9(windows:ctrl+shift+F9)

0x1_1多moudle的maven项目

此部分内容应该也同样适用于单moudle项目,只是由于我的项目特殊(也可能是配置不标准),只能使用下面的这种方式Debug。原则上单moudle也适用有兴趣的朋友也可以试一下。

  • 添加Debug热部署 Run–>Edit configuration–>+ –> remote–>Apply 使用默认参数即可。
  • 添加JVM参数(一下两种方式,其一即可)
    • mvn spring-boot:run -Drun.jvmArguments=”-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005”
    • pom.xml中配置:

    
       -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
    
  • Debug 运行remote,启动项目即可。
    修改后build–>compile 'XXX.java' 即可,快捷键command+shift+F9(windows:ctrl+shift+F9)

0x2 录制Macros宏设置

为了方便操作,可以做如下配置:

  1. Edit -> Macros -> Start Macro Recording
  2. Click File -> Save All
  3. Cilck Build -> Make Project
  4. Edit -> Macros -> Stop Macro Recording
  5. 保存你录制的Macro,名称为Save&Make

因为IDEA是自动保存,所以可以把新Macros替换掉原来的保存快捷键command+s(ctrl+s)
preferences(setting)–>keymap

  1. Main menu–>File–>Save All remove 掉原来的快捷键
  2. Main menu–>Edit–>Macros–>Save&Make添加快捷键Command+S

0x3参考文献

  • https://qbgbook.gitbooks.io/spring-boot-reference-guide-zh/content/I.%20Spring%20Boot%20Documentation/3.%20First%20steps.html
  • http://docs.spring.io/spring-boot/docs/1.4.1.BUILD-SNAPSHOT/maven-plugin/examples/run-debug.html
  • https://my.oschina.net/u/563848/blog/522548
  • http://stackoverflow.com/questions/29831953/maven-build-failing-when-generating-war-package-for-spring-boot-application
  • http://stackoverflow.com/questions/23217002/how-do-i-tell-spring-boot-which-main-class-to-use-for-the-executable-jar

0x4关于我

  • @Author:Zemo
  • @Email:zemochen#126.com
  • 欢迎转载,让更多的人学到东西

你可能感兴趣的:(Spring,maven)