1. 程式人生 > >spring boot專案中使用spring-boot-devtools模組進行程式碼熱部署,避免重新啟動web專案

spring boot專案中使用spring-boot-devtools模組進行程式碼熱部署,避免重新啟動web專案

devtools模組,是為開發者服務的一個模組。主要的功能就是程式碼修改後一般在5秒之內就會自動重新載入至伺服器,相當於restart成功。

spring-boot提供的重新啟動技術使用兩個類載入器,一個類載入器用來載入那些不變的類(如第三方jar包提供的類),另外一個用來載入正在開發的程式碼類,你正在開發的類被載入進了一個重新啟動類載入器中,當應用程式 重新啟動時會拋棄掉之前的類載入器,然後重新建立一個重新啟動的類載入器,所以使用DevTools工具模組重新部署程式碼是很快的。

只要我們修改了classpath下任何檔案只要儲存Devtools模組都會重新啟動應用程式。

一、spring-boot-devtools模組是一個為開發者服務的模組,其中最重要的功能就是程式碼的熱部署,只需在pom檔案中加入如下依賴不需要任何其他的配置

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-devtools</artifactId>
		<optional>true</optional>
	</dependency>
</dependencies>

二、加入如上的程式碼依賴我們使用啟動web專案,然後修改一下程式碼可以看到後臺重新編譯運行了專案,而且結果也改變了
2017-10-15 17:14:58.619  INFO 1519 --- [       Thread-6] ConfigServletWebServerApplicationContext : Closing org.springframework.boot.web.ser
[email protected]
895709: startup date [Sun Oct 15 17:14:20 CST 2017]; root of context hierarchy 2017-10-15 17:14:58.624 WARN 1519 --- [ Thread-6] o.s.b.f.support.DisposableBeanAdapter : Invocation of destroy method failed on bean with name 'classPathFileSystemWatcher': java.lang.NullPointerException 2017-10-15 17:14:58.625 INFO 1519 --- [ Thread-6] o.s.j.e.a.AnnotationMBeanExporter : Unregistering JMX-exposed beans on shutdown . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.0.0.BUILD-SNAPSHOT) 2017-10-15 17:14:58.876 INFO 1519 --- [ restartedMain] ggauthority.v1.GgauthorityApplication : Starting GgauthorityApplication on yaomingyangdeMacBook-Pro.local with PID 1519 (/Users/yaomingyang/Documents/IDE/workplace/ggauthority/target/classes started by yaomingyang in /Users/yaomingyang/Documents/IDE/workplace/ggauthority) 2017-10-15 17:14:58.877 INFO 1519 --- [ restartedMain] ggauthority.v1.GgauthorityApplication : No active profile set, falling back to default profiles: default 2017-10-15 17:14:58.880 INFO 1519 --- [ restartedMain] ConfigServletWebServerApplicationContext : Refreshing org.springframework.boot.web.ser
[email protected]
2fc9f5: startup date [Sun Oct 15 17:14:58 CST 2017]; root of context hierarchy 2017-10-15 17:14:59.401 INFO 1519 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8011 (http) 2017-10-15 17:14:59.402 INFO 1519 --- [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2017-10-15 17:14:59.403 INFO 1519 --- [ restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.23 2017-10-15 17:14:59.409 INFO 1519 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2017-10-15 17:14:59.410 INFO 1519 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 530 ms 2017-10-15 17:14:59.446 INFO 1519 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/] 2017-10-15 17:14:59.447 INFO 1519 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*] 2017-10-15 17:14:59.447 INFO 1519 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 2017-10-15 17:14:59.447 INFO 1519 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*] 2017-10-15 17:14:59.447 INFO 1519 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*] 2017-10-15 17:14:59.480 INFO 1519 --- [ restartedMain] org.mongodb.driver.cluster : Cluster created with settings {hosts=[127.0.0.1:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500} 2017-10-15 17:14:59.547 INFO 1519 --- [127.0.0.1:27017] org.mongodb.driver.connection : Opened connection [connectionId{localValue:2, serverValue:19}] to 127.0.0.1:27017 2017-10-15 17:14:59.548 INFO 1519 --- [127.0.0.1:27017] org.mongodb.driver.cluster : Monitor thread successfully connected to server with description ServerDescription{address=127.0.0.1:27017, type=STANDALONE, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 2, 11]}, minWireVersion=0, maxWireVersion=4, maxDocumentSize=16777216, roundTripTimeNanos=635614} 2017-10-15 17:14:59.678 INFO 1519 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.web.ser[email protected]2fc9f5: startup date [Sun Oct 15 17:14:58 CST 2017]; root of context hierarchy 2017-10-15 17:14:59.691 INFO 1519 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/users/list],methods=[GET || POST]}" onto public ggauthority.v1.user.entity.User ggauthority.v1.user.controller.UserController.list(java.lang.Long) 2017-10-15 17:14:59.691 INFO 1519 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/users/get_user/{user_id}],methods=[GET || POST]}" onto public java.util.Map<java.lang.String, java.lang.Object> ggauthority.v1.user.controller.UserController.get_user(java.lang.Long) 2017-10-15 17:14:59.696 INFO 1519 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest) 2017-10-15 17:14:59.696 INFO 1519 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) 2017-10-15 17:14:59.708 INFO 1519 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2017-10-15 17:14:59.709 INFO 1519 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2017-10-15 17:14:59.727 INFO 1519 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2017-10-15 17:14:59.776 INFO 1519 --- [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 2017-10-15 17:14:59.883 INFO 1519 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup 2017-10-15 17:14:59.904 INFO 1519 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8011 (http) 2017-10-15 17:14:59.907 INFO 1519 --- [ restartedMain] ggauthority.v1.GgauthorityApplication : Started GgauthorityApplication in 1.07 seconds (JVM running for 40.767)


三、當你更改不在classpath下的檔案你可能想讓你的應用程式重新啟動或者只加載對應的檔案,你可以使用spring.devtools.restart.additional-paths屬性配置檔案將對應的檔案載入到devtools工具的檢測範圍之內,spring.devtools.restart.exclude排除那個目錄下不需要載入。

#新增那個目錄的檔案需要restart
spring.devtools.restart.additional-paths=src/main/java
#排除那個目錄的檔案不需要restart
spring.devtools.restart.exclude=static/**,public/**


四、可以通過設定spring.devtools.restart.enabled=false禁用devtools模組的功能。

相關推薦

spring boot專案使用spring-boot-devtools模組進行程式碼部署避免重新啟動web專案

devtools模組,是為開發者服務的一個模組。主要的功能就是程式碼修改後一般在5秒之內就會自動重新載入至伺服器,相當於restart成功。 spring-boot提供的重新啟動技術使用兩個類載入器,一個類載入器用來載入那些不變的類(如第三方jar包提供的類),另外一個用來

spring bootDevTools 部署修改程式碼立刻見效快速重啟

IDEA新建sping boot選擇  DevTools spring-boot-devtools 模組能夠實現熱部署,新增類  新增方法  修改配置檔案  修改頁面等 都能實現熱部署     原理就是重啟專案,但比手動重啟快

spring bootDevTools 部署修改程式碼立刻見效快速重啟

IDEA新建sping boot選擇  DevTools spring-boot-devtools 模組能夠實現熱部署,新增類  新增方法  修改配置檔案  修改頁面等 都能實現熱部署     原理就是重啟專案,但比手動重啟快多了,其深層原理是使用了兩個ClassLoade

使用Intellij IDEA 開發 Spring-boot專案 部署自動部署

使用Intellij IDEA 開發 Spring-boot專案,即使專案使用了spring-boot-devtools,修改了類或者html、js等,idea還是不會自動重啟,非要手動去make一下或者重啟,就更沒有使用熱部署一樣。 網上關於spring-b

spring boot部署使用devtools,更新任務內容不需要重啟服務

如果不使用devtools,我們對類的任何修改都需要重啟服務才能看到效果,這是不是很操蛋,現在介紹一個如果實現熱部署的方法 1:pom.xml中增加 <dependency> &

專案spring容器載入的問題

今天做一個專案採用的是傳統架構,沒有采用分散式,部署時出現了異常,資訊是: org.springframework.beans.factory.NoSuchBeanDefinitionException:No qualifying bean of type found for dependency &nb

Maven專案Spring整合Mybatis

新增jar包依賴 spring需要的jar包依賴 <dependency> <groupId>org.springframework</groupId> <artifactId>

spring boot 部署省去頻繁編譯的步驟

一、熱啟動:   每自修改後, 程式自動啟動Spring Application上下文。 Pom中直接新增依賴即可:   <dependency>            <groupId>org.

ssm框架web專案spring-mvc.xml解析

spring-mvc.xml配置檔案主要用於配置SpringMVC檢視解析器、控制器、部分靜態資源等。 type:Spring Bean Configuration File <?xml version="1.0" encoding="UTF-8"?> <beans xml

Maven專案spring異常之CannotLoadBeanClassException

(注:此異常發生在全註解開發下)      異常釋義:此異常意為無法載入xml檔案中配置的bean。      產生機制:當maven專案開始執行的時候,會根據@Autowired註解,載入被註解

web專案spring如何整合RabbitMQ?

如何在Windows下安裝rabbitMQ?這個問題已在我的上一篇文章中講解清楚,不清楚的同學可以看看我的上一篇文章。  接下來講解如何在web專案中配合spring來使用rabbitMQ?

spring boot部署修改java程式碼不重啟

我用的idea外掛,雖然每次用虛擬機器重啟快很多,但是每次看到有日誌列印專案重啟感覺還是不舒服。所以部署了不重啟的方法 首先和其他的類似,idea中的配置 registry 勾選 compiler.automake.allow.when.app.running 然後

大型專案C語言的模組化建議

一個大型的軟體專案通常包含很多複雜的功能,實現這個專案不是一個程式設計師單槍匹馬可以勝任的,往往需要一個團隊的有效分工合作,另外,在一個以C程式碼為主的完整的專案中,經常也需要加入一些其他語言的程式碼,例如,C程式碼和彙編程式碼的混合使用,C檔案和C++的同時使用。這些都增

取出微服務整體的專案的單獨一個模組

編寫單獨模組是不需要啟動整個專案的方案 修改服務中的bootstrap配置檔案 有四個關鍵點修改 1.修改資料庫連結配置 datasource: url: jdbc:mysql://localhost:3306/demo?useUnicode=true&am

【問題記錄】eclipse啟動web專案spring會初始化兩次

背景:一個tomcat,一個eclipse,一個SSM框架的web專案。在eclipse中新建tomcat伺服器,預設配置,然後在伺服器配置中將Server Locations改成Use Tomcat

Interllij IDEA啟動web專案

1、在IDEA中開啟你的Web應用,點選一下綠色三角形左邊的框框,然後在彈出框上選擇Edit Configurations,會彈出一個配置面板。 2、在彈出的面板中我們點選Defaults,然後找到Tomcat Server並點選。緊接著我們點選右邊的綠色加號,會有一個Add New Configura

Android關於專案遇到的按home鍵退出到桌面再次開啟重新啟動程式的解決方法

我的專案是使用高德地圖做交通類的,主要是Activity和Fragment之間的切換。 我遇到的問題是:我在執行打包後的apk時,進入程式後,無論在哪個介面按home鍵回到桌面,當再次開啟需要重新啟動而不是回到開啟之前的操作介面;而在程式碼除錯的時候不會出現這種問題。 解決方法:在網上搜了好

eclipse專案當使用註解時找不到類

今天遇到一個奇怪的問題,在pom.xml 中匯入下面的jar包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>s

如何在安卓原生專案加入mui相關檔案進行開發(使用新版本5+SDK建立最簡Android原生工程(Android studio))

緣起 最近在搭一個android開發的demo,專案使用androidstudio作為開發工具,使用混合式開發,途中需要整合mui.但是網上找了很多教程都是老版本的,以至於MUI官網提供的demo已經不符合教程了。後來進過多方努力終於找到了新版的教程,特此記錄。 新版教程連結點這

Eclipse使用jetty啟動web專案

第一步: pom.xml的配置: <build> <plugins> <plugin> <groupId>org.mortbay.jetty&l