摘要:觸發(fā)器文件可以手動更新,也可以使用插件進行更新。例如,要配置重新啟動以始終使用觸發(fā)器文件,你需要添加以下屬性遠程應(yīng)用程序開發(fā)工具并不局限于本地開發(fā),在遠程運行應(yīng)用程序時,還可以使用幾個特性。
20. 開發(fā)者工具
Spring Boot包括一組額外的工具,這些工具可以使應(yīng)用程序開發(fā)體驗變得更加愉快,spring-boot-devtools模塊可以包含在任何項目中,以提供額外的development-time特性,要包含devtools支持,請將模塊依賴項添加到你的構(gòu)建中,如下所示的Maven和Gradle列表:
Maven.
org.springframework.boot spring-boot-devtools true
Gradle.
dependencies { compile("org.springframework.boot:spring-boot-devtools") }
在運行完全打包的應(yīng)用程序時,開發(fā)工具會自動被禁用,如果你的應(yīng)用程序是從java -jar啟動的,或者是從一個特殊的類加載器開始的,那么它就被認為是一個“生產(chǎn)應(yīng)用程序”。將依賴項標記為Maven中的可選項或使用compileOnly在Gradle中是一種最佳實踐,它可以防止devtools被傳遞到其他使用你的項目的模塊中。
默認情況下,重新打包的存檔不包含devtools,如果你想要使用某些遠程devtools特性,你需要禁用該excludeDevtools構(gòu)建屬性來包含它,該屬性同時支持Maven和Gradle插件。20.1 屬性默認值
Spring Boot所支持的幾個庫都使用緩存來提高性能。例如,模板引擎緩存已編譯的模板以避免重復(fù)解析模板文件。另外,Spring MVC可以在提供靜態(tài)資源時向響應(yīng)添加HTTP緩存標頭。
雖然緩存在生產(chǎn)中非常有益,但在開發(fā)過程中可能會產(chǎn)生相反的效果,使你無法看到你在應(yīng)用程序中所做的更改。出于這個原因,spring-boot-devtools在默認情況下禁用了緩存選項。
緩存選項通常由application.properties文件中的設(shè)置配置,例如,Thymeleaf提供了spring.thymeleaf.cache屬性,spring-boot-devtools模塊不需要手動設(shè)置這些屬性,而是自動應(yīng)用合理的development-time配置。
有關(guān)devtools應(yīng)用的屬性的完整列表,請參見DevToolsPropertyDefaultsPostProcessor。20.2 自動重啟
當類路徑上的文件發(fā)生更改時,使用spring-boot-devtools的應(yīng)用程序?qū)⒆詣又匦聠樱斣贗DE中工作時,這可能是一個有用的特性,因為它為代碼更改提供了非常快速的反饋循環(huán)。默認情況下,類路徑中指向文件夾的任何條目都會被監(jiān)控是否有更改,請注意,某些資源(如靜態(tài)資產(chǎn)和視圖模板)不需要重新啟動應(yīng)用程序。
引發(fā)重啟當DevTools監(jiān)視類路徑資源時,觸發(fā)重啟的惟一方法是更新類路徑,導(dǎo)致類路徑更新的方式取決于你使用的IDE。在Eclipse中,保存修改后的文件會導(dǎo)致類路徑被更新并觸發(fā)重新啟動,在IntelliJ IDEA中,構(gòu)建項目(Build -> Build Project)具有相同的效果。
只要啟用了forking,你就可以使用支持的構(gòu)建插件(Maven和Gradle)來啟動應(yīng)用程序,因為DevTools需要一個獨立的應(yīng)用程序類加載器才能正常運行。默認情況下,Gradle和Maven在類路徑上檢測DevTools時是這樣做的。
當與LiveReload一起使用時,自動重啟非常有效。詳情請參閱LiveReload部分。如果你使用JRebel,自動重新啟動將被禁用,以支持動態(tài)類重載。其他devtools特性(如LiveReload和property overrides)仍然可以使用。
在重新啟動時,DevTools依賴于應(yīng)用程序上下文的shutdown hook關(guān)閉它,如果你已經(jīng)禁用了shutdown hook(SpringApplication.setRegisterShutdownHook(false)),那么它將無法正常工作。
當決定是否在類路徑上的條目發(fā)生更改時觸發(fā)重啟時,DevTools自動忽略了名為spring-boot、spring-boot-DevTools、spring-boot-autoconfigure、spring-boot-actuator和spring-boot-starter的項目。
DevTools需要定制被ApplicationContext使用的ResourceLoader,如果你的應(yīng)用程序已經(jīng)提供了一個,它將被包裝,不支持在ApplicationContext上直接覆蓋getResource方法。
重啟和重新加載20.2.1 日志記錄條件評估中的改變Spring Boot提供的重啟技術(shù)使用兩個類加載器。不改變的類(例如,來自第三方j(luò)ar的類)被加載到一個基類加載器中,正在積極開發(fā)的類被加載到重啟類加載器中,當應(yīng)用程序重新啟動時,重啟類加載器將被丟棄,并創(chuàng)建一個新的類加載器。這種方法意味著應(yīng)用程序重新啟動通常要比“冷啟動”快得多,因為基類加載器已經(jīng)可用并填充了。
如果發(fā)現(xiàn)重新啟動對應(yīng)用程序來說不夠快,或者遇到了類加載問題,你可以考慮重新加載技術(shù),如零周轉(zhuǎn)期的JRebel,這些工作通過在加載類時重寫類,使它們更易于重新加載。
默認情況下,每次應(yīng)用程序重新啟動時,都會記錄顯示狀態(tài)評估增量的報告。報告顯示了在進行更改(如添加或刪除bean和設(shè)置配置屬性)時對應(yīng)用程序的自動配置的更改。
若要禁用報告的日志記錄,請設(shè)置以下屬性:
spring.devtools.restart.log-condition-evaluation-delta=false20.2.2 排除資源
某些資源在更改時不一定需要觸發(fā)重新啟動,例如,Thymeleaf模板可以就地編輯,默認情況下,改變/META-INF/maven、/META-INF/resources、/resources、/static、/public,或/templates的資源不會觸發(fā)重新啟動,但會觸發(fā)重新加載。如果你想定制這些排除性,你可以使用spring.devtools.restart.exclude屬性,例如,僅排除/static和/public,你將設(shè)置以下屬性:
spring.devtools.restart.exclude=static/**,public/**
如果你想要保留這些默認值并添加額外的排除,請使用spring.devtools.restart.additional-exclude屬性代替。20.2.3 監(jiān)視附加路徑
當你對不在類路徑上的文件進行更改時,你可能希望你的應(yīng)用程序重新啟動或重新加載。可以這樣做,使用spring.devtools.restart.additional-paths屬性來配置額外的路徑以監(jiān)視更改,你可以使用前面描述的spring.devtools.restart.exclude屬性來控制在附加路徑下的更改是否會觸發(fā)完全重啟或重新加載。
20.2.4 禁用重啟如果你不想使用重啟功能,你可以使用spring.devtools.restart.enabled屬性禁用它。在大多數(shù)情況下,你可以在application.properties中設(shè)置此屬性。(這樣做仍然初始化重啟類加載器,但它不注意文件的更改)。
如果你需要完全禁用重新啟動支持(例如,因為它不能與特定的庫一起工作),那么你需要設(shè)置spring.devtools.restart.enabled System屬性為false,然后調(diào)用SpringApplication.run(…),如下例所示:
public static void main(String[] args) { System.setProperty("spring.devtools.restart.enabled", "false"); SpringApplication.run(MyApp.class, args); }20.2.5 使用觸發(fā)器文件
如果你使用一個持續(xù)編譯已更改文件的IDE,你可能只需要在特定的時間觸發(fā)重新啟動,為此,你可以使用一個“觸發(fā)文件”,它是一個特殊的文件,當你想要實際觸發(fā)重新啟動檢查時,必須對其進行修改。更改文件只會觸發(fā)檢查,只有當Devtools檢測到它必須做某事時才會重新啟動。觸發(fā)器文件可以手動更新,也可以使用IDE插件進行更新。
要使用一個觸發(fā)器文件,請將spring.devtools.restart.trigger-file屬性設(shè)置為觸發(fā)器文件的路徑。
你可能想要設(shè)置spring.devtools.restart.trigger-file作為全局設(shè)置,以便所有的項目都以相同的方式運行。20.2.6 自定義重啟類加載器
如前所述,在重啟與重載部分中,重新啟動功能是通過使用兩個類加載器實現(xiàn)的,對于大多數(shù)應(yīng)用程序來說,這種方法運行良好。然而,它有時會導(dǎo)致類加載問題。
默認情況下,IDE中的任何開放項目都包含“重啟”類加載器,任何常規(guī)的.jar文件都裝載了“基礎(chǔ)”類加載器,如果你在一個多模塊項目中工作,而不是每個模塊都導(dǎo)入到你的IDE中,你可能需要定制一些東西。為此,你可以創(chuàng)建一個META-INF/spring-devtools.properties文件。
spring-devtools.properties可以包含有restart.exclude和restart.include的屬性,include元素是應(yīng)該被拉到“重啟”類加載器中的項,而exclude元素則是應(yīng)該被推入“基礎(chǔ)”類加載器的項,屬性的值是應(yīng)用于類路徑的regex模式,如下例所示:
restart.exclude.companycommonlibs=/mycorp-common-[w-]+.jar restart.include.projectcommon=/mycorp-myproj-[w-]+.jar
所有屬性鍵必須是唯一的,只有屬性以restart.include.或restart.exclude.開頭才被認可。
所有類路徑下的META-INF/spring-devtools.properties被加載,你可以在項目中或項目使用的庫中打包文件。20.2.7 已知的限制
通過使用標準ObjectInputStream來反序列化的對象,重新啟動功能不會很好地工作,如果需要反序列化數(shù)據(jù),可能需要使用Spring的ConfigurableObjectInputStream和Thread.currentThread().getcontextclassloader()。
不幸的是,一些第三方庫在不考慮上下文類加載器的情況下反序列化。如果你發(fā)現(xiàn)這樣的問題,你需要向原始作者請求修復(fù)。
20.3 LiveReloadspring-boot-devtools模塊包含一個嵌入式的LiveReload服務(wù)器,當資源被更改時,它可以用來觸發(fā)瀏覽器刷新。LiveReload瀏覽器擴展可以從livereload.com免費提供給Chrome、Firefox和Safari。
如果你不想在應(yīng)用程序運行時啟動LiveReload服務(wù)器,則可以設(shè)置spring.devtools.livereload.enabled屬性為false。
你一次只能運行一個LiveReload服務(wù)器,在啟動應(yīng)用程序之前,確保沒有其他的LiveReload服務(wù)器在運行。如果你在IDE中啟動多個應(yīng)用程序,那么只有第一個應(yīng)用程序得到了LiveReload的支持。20.4 全局設(shè)置
你可以通過添加名為.spring-boot-devtools.properties的文件來配置全局devtools設(shè)置到$HOME文件夾(注意文件名以“.”開頭)。添加到該文件的任何屬性都適用于使用devtools的機器上的所有Spring Boot應(yīng)用程序。例如,要配置重新啟動以始終使用觸發(fā)器文件,你需要添加以下屬性:
~/.spring-boot-devtools.properties.
spring.devtools.reload.trigger-file=.reloadtrigger20.5.遠程應(yīng)用程序
Spring Boot開發(fā)工具并不局限于本地開發(fā),在遠程運行應(yīng)用程序時,還可以使用幾個特性。遠程支持是可選的,要啟用它,你需要確保將devtools包含在重新打包的歸檔文件中,如下面的清單所示:
org.springframework.boot spring-boot-maven-plugin false
然后你需要設(shè)置spring.devtools.remote.secret屬性,如下面的示例所示:
spring.devtools.remote.secret=mysecret
在遠程應(yīng)用程序上啟用spring-boot-devtools是一種安全風(fēng)險,你不應(yīng)該在生產(chǎn)部署上啟用支持。
遠程devtools支持分兩部分提供:一個服務(wù)器端端點接受連接,一個客戶端應(yīng)用程序在IDE中運行。當spring.devtools.remote.secret屬性被設(shè)置時,服務(wù)器組件自動啟用,客戶端組件必須手動啟動。
20.5.1 運行遠程客戶端應(yīng)用程序遠程客戶端應(yīng)用程序設(shè)計為從你的IDE中運行,你需要運行org.springframework.boot.devtools.RemoteSpringApplication與你連接到的遠程項目相同的類路徑,應(yīng)用程序的唯一必需參數(shù)是它連接的遠程URL。
例如,如果你正在使用Eclipse或STS,并且你有一個名為my-app的項目,你已經(jīng)部署到Cloud Foundry,那么你將執(zhí)行以下操作:
從Run菜單選擇Run Configurations…?。
創(chuàng)建一個新的Java Application“l(fā)aunch configuration”。
瀏覽my-app項目。
使用org.springframework.boot.devtools.RemoteSpringApplication作為主類。
添加https://myapp.cfapps.io到Program arguments(或任何遠程URL)。
正在運行的遠程客戶端可能類似于以下清單:
. ____ _ / / ___"_ __ _ _(_)_ __ __ _ ( ( )\___ | "_ | "_| | "_ / _` | / ___)| |_)| | | | | || (_| []::::::[] / -_) " __ _ _ ___ _ | _ \___ _ __ ___| |_ ___ / _ _/ -_) ) ) ) ) " |____| .__|_| |_|_| |_\__, | |_|_\___|_|_|_\___/\__\___|/ / / / =========|_|==============|___/===================================/_/_/_/ :: Spring Boot Remote :: 2.0.5.RELEASE 2015-06-10 18:25:06.632 INFO 14938 --- [main] o.s.b.devtools.RemoteSpringApplication : Starting RemoteSpringApplication on pwmbp with PID 14938 (/Users/pwebb/projects/spring-boot/code/ spring-boot-devtools/target/classes started by pwebb in /Users/pwebb/projects/spring-boot/code/ spring-boot-samples/spring-boot-sample-devtools) 2015-06-10 18:25:06.671 INFO 14938 --- [main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@2a17b7b6: startup date [Wed Jun 10 18:25:06 PDT 2015]; root of context hierarchy 2015-06-10 18:25:07.043 WARN 14938 --- [main] o.s.b.d.r.c.RemoteClientConfiguration : The connection to http://localhost:8080 is insecure. You should use a URL starting with "https://". 2015-06-10 18:25:07.074 INFO 14938 --- [main] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 2015-06-10 18:25:07.130 INFO 14938 --- [main] o.s.b.devtools.RemoteSpringApplication : Started RemoteSpringApplication in 0.74 seconds (JVM running for 1.105)
因為遠程客戶端使用與實際應(yīng)用程序相同的類路徑,它可以直接讀取應(yīng)用程序?qū)傩浴_@是spring.devtools.remote.secret屬性被讀取并傳遞給服務(wù)器進行身份驗證的方法。
使用https://作為連接協(xié)議總是明智的,這樣就可以加密傳輸并不能截獲密碼。
如果需要使用代理訪問遠程應(yīng)用程序,請配置spring.devtools.remote.proxy.host和spring.devtools.remote.proxy.port屬性。20.5.2 遠程更新
遠程客戶端監(jiān)控你的應(yīng)用程序類路徑,以與本地重啟相同的方式進行更改。任何更新的資源都被推送到遠程應(yīng)用程序,并且(如果需要的話)觸發(fā)重啟。如果你在一個使用不是本地的云服務(wù)的特性上進行迭代,這將是很有幫助的。一般來說,遠程更新和重新啟動比完整的重建和部署周期要快得多。
文件只在遠程客戶機運行時受到監(jiān)視,如果在啟動遠程客戶端之前更改一個文件,則不會將其推送到遠程服務(wù)器。21.為生產(chǎn)打包你的應(yīng)用程序
可執(zhí)行jar可以用于生產(chǎn)部署,由于它們是自包含的,所以它們也非常適合基于云的部署。
對于額外的“生產(chǎn)就緒”特性,如健康、審計和指標REST或JMX端點,考慮添加spring-boot-actuator,參見第V部分,“Spring Boot Actuator:生產(chǎn)就緒特性”的詳細信息。
22.下一步要讀什么現(xiàn)在你應(yīng)該了解了如何使用Spring Boot和你應(yīng)該遵循的一些最佳實踐,現(xiàn)在,你可以深入了解特定的Spring Boot特性,或者你可以跳過,閱讀Spring Boot的“生產(chǎn)就緒”方面的內(nèi)容。
上一篇:運行你的應(yīng)用程序 下一篇:SpringApplication文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/69524.html
摘要:參考指南使你可以輕松地創(chuàng)建可運行的獨立的生產(chǎn)級的基于的應(yīng)用程序,我們對平臺和第三方庫有自己的看法,這樣你就可以以最低限度工作開始了,大多數(shù)應(yīng)用程序都需要很少的配置。文檔本節(jié)簡要概述了參考文檔,它充當文檔其余部分的映射。 Spring Boot 參考指南 Spring Boot使你可以輕松地創(chuàng)建可運行的獨立的、生產(chǎn)級的基于Spring的應(yīng)用程序,我們對Spring平臺和第三方庫有自己的看...
摘要:關(guān)于文檔參考指南可用如下方式最新的副本可以在中找到。嘗試操作文檔,它們?yōu)樽畛R姷膯栴}提供解決方案。學(xué)習(xí)基礎(chǔ),構(gòu)建在許多其他項目上,網(wǎng)站提供豐富的參考文檔,如果你要從開始,嘗試其中一個指南。我們對進行監(jiān)視,以解決帶有標記的問題。 1. 關(guān)于文檔 Spring Boot 參考指南可用如下方式: HTML PDF EPUB 最新的副本可以在 docs.spring.io/spring-b...
摘要:安裝可以與經(jīng)典開發(fā)工具一起使用,也可以作為命令行工具安裝。下面的示例展示了一個典型的文件安裝命令行接口是一個命令行工具,你可以使用它來快速地實現(xiàn)的原型。 10. 安裝Spring Boot Spring Boot可以與經(jīng)典Java開發(fā)工具一起使用,也可以作為命令行工具安裝。無論哪種方式,都需要Java SDK v1.8或更高版本。在開始之前,你應(yīng)該使用以下命令檢查當前的Java安裝: ...
摘要:我們的主要目標是為所有開發(fā)提供一個非常快的廣泛可訪問的入門體驗。要跳出固有的思維模式,但是當需求開始偏離默認設(shè)置時,要迅速避開。提供大型項目如嵌入式服務(wù)器安全性指標健康檢查和外部化配置所共有的一系列非功能特性。系統(tǒng)要求需要或和或以上。 8. Spring Boot介紹 Spring Boot使你可以輕松地創(chuàng)建可運行的獨立的、生產(chǎn)級的基于Spring的應(yīng)用程序,我們對Spring平臺和第...
摘要:從運行你可以從運行應(yīng)用程序作為簡單的應(yīng)用程序,但是,你首先需要導(dǎo)入你的項目,導(dǎo)入步驟取決于你的和構(gòu)建系統(tǒng)。如果你不小心運行了兩次應(yīng)用程序,你你會看到一個錯誤,用戶可以使用按鈕而不是按鈕來確保任何現(xiàn)有實例都已關(guān)閉。 19. 運行你的應(yīng)用程序 將你的應(yīng)用程序打包為jar并使用嵌入式HTTP服務(wù)器的最大優(yōu)點之一是,你可以像對待其他應(yīng)用程序一樣運行應(yīng)用程序,調(diào)試Spring Boot應(yīng)用程序也...
摘要:安裝可以使用手動安裝命令行接口或如果你是用戶,可以使用或。有關(guān)全面的安裝說明,請參閱開始部分中的第節(jié),安裝。推斷抓取依賴項標準包含一個注解,它允許你聲明對第三方庫的依賴關(guān)系,這個有用的技術(shù)讓可以像或那樣下載,但不需要你使用構(gòu)建工具。 第VII章. Spring Boot CLI 如果你想快速開發(fā)Spring應(yīng)用程序,可以使用Spring Boot CLI命令行工具,它允許你運行Groo...
閱讀 922·2021-10-13 09:48
閱讀 3907·2021-09-22 10:53
閱讀 3114·2021-08-30 09:41
閱讀 1943·2019-08-30 15:55
閱讀 2920·2019-08-30 15:55
閱讀 1839·2019-08-30 14:11
閱讀 2205·2019-08-29 13:44
閱讀 764·2019-08-26 12:23