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模式

這種方式的好處就是不用對代碼進行任何變動,比較方便。

使用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\repository\org\springframework\springloaded\1.2.6.RELEASE\springloaded-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.

比較好的文章:

http://tengj.top/2017/06/01/springboot10/

參考:

http://blog.hanqunfeng.com/2016/12/09/spring-boot-study/

https://blog.csdn.net/wo541075754/article/details/75017014

https://stackoverflow.com/questions/42618277/how-to-set-a-run-debug-configuration-in-intellij-idea-using-a-jar-file

https://blog.kazaff.me/2014/07/28/java%E5%91%BD%E4%BB%A4%E8%A1%8C%E8%BF%90%E8%A1%8C%E5%8F%82%E6%95%B0/

http://xinklabi.iteye.com/blog/837435

http://jadyer.cn/2016/07/29/idea-springboot-jsp/

http://www.tianshouzhi.com/api/tutorials/jvm/99


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM