<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] # spring loaded方式 Spring Loaded是一個用于在JVM運行時重新加載類文件更改的JVM代理,Spring Loaded允許你動態的新增/修改/刪除某個方法/字段/構造方法,同樣可以修改作用在類/方法/字段/構造方法上的注解.也可以新增/刪除/改變枚舉中的值。 spring-loaded是一個開源項目,項目地址:[https://github.com/spring-projects/spring-loaded](https://github.com/spring-projects/spring-loaded) Spring Loaded有兩種方式實現,分別是Maven引入依賴方式或者添加啟動參數方式 ~~~ <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> ~~~ 啟動:`mvn spring-boot:run` ![](https://img.kancloud.cn/e4/f4/e4f48d40efda4bd3ffcc387d06103f83_936x1216.png) 注意:maven依賴的方式只適合spring-boot:run的啟動方式,右鍵那種方式不行 出現如下配置表實配置成功 ~~~ [INFO] Attaching agents: [C:\Users\tengj\.m2\repository\org\springframework\springloaded\1.2.6.RELEASE\springloaded-1.2.6.RELEASE.jar] ~~~ **添加啟動參數方式** 這種方式是右鍵運行啟動類 首先先下載對應的springloaded-1.2.6.RELEASE.jar,可以去上面提到的官網獲取 博主這里直接引用maven依賴已經下載好的路徑哈 然后打開下圖所示的Edit Configurations配置,在VM options中輸入: ~~~ -javaagent:C:\Users\tengj\.m2\repository\org\springframework\springloaded\1.2.6.RELEASE\springloaded-1.2.6.RELEASE.jar -noverify ~~~ ![](https://img.kancloud.cn/2c/e0/2ce0d4071090e9700f0cd8dfbc8b0e63_1728x404.png) 然后直接右鍵運行啟動類即可啟動項目。 上面2種方式小伙伴隨便選擇一種即可,當系統通過 mvn spring-boot:run啟動或者 右鍵application debug啟動Java文件時,系統會監視classes文件,當有classes文件被改動時,系統會重新加載類文件,不用重啟啟動服務。 > 注:IDEA下需要重新編譯文件 Ctrl+Shift+F9或者編譯項目 Ctrl+F9 如何測試熱部署是否可用呢,你可以先寫個簡單的Controller方法,返回個字符串,然后啟動項目,接著修改下這個方法返回的字符串,Ctrl+Shift+F9編譯下當前類,然后再刷新下頁面看看是否內容改變了。 在 Spring Boot,模板引擎的頁面默認是開啟緩存,如果修改頁面內容,刷新頁面是無法獲取修改后的頁面內容,所以,如果我們不需要模板引擎的緩存,可以進行關閉。 ~~~ spring.freemarker.cache=false spring.thymeleaf.cache=false spring.velocity.cache=false ~~~ 發現大多數情況可以使用熱部署,有效的解決了文章頭部中提到的那個痛點,不過還是有一些情況下需要重新啟動,不可用的情況如下: 1. 對于一些第三方框架的注解的修改,不能自動加載,比如:spring mvc的@RequestMapping 2. application.properties的修改也不行 3. log4j的配置文件的修改不能即時生效 # spring-boot-devtools **idea** idea配置文件`make project automatically` ![](https://img.kancloud.cn/3a/ab/3aab81aa2e7475e318413884c89f4af8_1076x486.png) CTRL + SHIFT + A --> 查找Registry --> 找到并勾選compiler.automake.allow.when.app.running ![](https://img.kancloud.cn/03/a5/03a521f7f256285621dc01711e9652ea_874x46.png) 最后重啟idea 加maven依賴 將依賴關系標記為可選`<optional>true</optional>`是一種最佳做法,可以防止使用項目將devtools傳遞性地應用于其他模塊。 ~~~ <!--添加熱部署--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <!-- optional=true,依賴不會傳遞,該項目依賴devtools;之后依賴myboot項目的項目如果想要使用devtools,需要重新引入 --> <optional>true</optional> <scope>runtime</scope> </dependency> ~~~ 開啟熱部署 ~~~ <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!-- 如果沒有該項配置,devtools不會起作用,即應用不會restart--> <fork>true</fork> </configuration> </plugin> </plugins> </build> ~~~ **默認屬性** 在Spring Boot集成Thymeleaf時,`spring.thymeleaf.cache`屬性設置為false可以禁用模板引擎編譯的緩存結果。 現在,devtools會自動幫你做到這些,禁用所有模板的緩存,包括Thymeleaf, Freemarker, Groovy Templates, Velocity, Mustache等。 更多的屬性,請參考[DevToolsPropertyDefaultsPostProcessor](https://github.com/spring-projects/spring-boot/blob/v1.5.3.RELEASE/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/env/DevToolsPropertyDefaultsPostProcessor.java)。 **自動重啟** 自動重啟的原理在于spring boot使用兩個classloader:不改變的類(如第三方jar)由base類加載器加載,正在開發的類由restart類加載器加載。應用重啟時,restart類加載器被扔掉重建,而base類加載器不變,這種方法意味著應用程序重新啟動通常比“冷啟動”快得多,因為base類加載器已經可用并已填充。 **排除靜態資源文件** 靜態資源文件在改變之后有時候沒必要觸發應用程序重啟,例如thymeleaf模板文件就可以實時編輯,默認情況下,更改/META-INF/maven, /META-INF/resources ,/resources ,/static ,/public 或/templates下的資源不會觸發重啟,而是觸發live reload(devtools內嵌了一個LiveReload server,當資源發生改變時,瀏覽器刷新,下面會介紹)。 ~~~ spring: thymeleaf: cache: false devtools: restart: enabled: true additional-paths: src/main/java exclude: WEB-INF/** ~~~ 可以使用spring.devtools.restart.exclude屬性配置,例如 ~~~ spring.devtools.restart.exclude=static/**,public/** ~~~ 如果想保留默認配置,同時增加新的配置,則可使用 ~~~ spring.devtools.restart.additional-exclude屬性 ~~~ **觀察額外的路徑** 如果你想觀察不在classpath中的路徑的文件變化并觸發重啟,則可以配置 spring.devtools.restart.additional-paths 屬性。 不在classpath內的path可以配置spring.devtools.restart.additionalpaths屬性來增加到監視中,同時配置spring.devtools.restart.exclude可以選擇這些path的變化是導致restart還是live reload。 **關閉自動重啟** 設置 spring.devtools.restart.enabled 屬性為false,可以關閉該特性。可以在application.properties中設置,也可以通過設置環境變量的方式。 ~~~ public static void main(String[] args) { System.setProperty("spring.devtools.restart.enabled", "false"); SpringApplication.run(MyApp.class, args); } ~~~ **使用一個觸發文件** 若不想每次修改都觸發自動重啟,可以設置spring.devtools.restart.trigger-file指向某個文件,只有更改這個文件時才觸發自動重啟。 **自定義自動重啟類加載器** 默認時,IDE中打開的項目都會由restart加載器加載,jar文件由Base加載器加載,但是若你使用multi-module的項目,并且不是所有模塊都被導入到IDE中,此時會導致加載器不一致。這時你可以創建META-INF/spring-devtools.properties文件,并增加restart.exclude.XXX,restart.include.XXX來配置哪些jar被restart加載,哪些被base加載。如: ~~~ restart.include.companycommonlibs=/mycorp-common-[\\w-]+\.jar restart.include.projectcommon=/mycorp-myproj-[\\w-]+\.jar ~~~ **LiveReload** DevTools內置了一個LiveReload服務,可以在資源變化時用來觸發瀏覽器刷新。當然這個需要你瀏覽器安裝了LiveReload插件,并且啟動這個插件才行。很有意思,這里介紹下如何弄。 先去谷歌商店安裝LiveReload插件 安裝好在要自動刷新的頁面點擊下圖中圖標,啟動應用后更新頁面內容或者css等都會觸發頁面自動刷新了。如下圖,圈中的就是,點一下會變黑就是啟動了。 最后展示效果,修改完html頁面后,Ctrl+Shift+F9,沒有重啟,頁面也會自動刷新了,太有趣了。 如果您不想在應用程序運行時啟動LiveReload服務器,則可以將spring.devtools.livereload.enabled屬性設置為false。 一次只能運行一個LiveReload服務器。開始應用程序之前,請確保沒有其他LiveReload服務器正在運行。 如果你的IDE啟動多個應用程序,則只有第一個應用程序將支持LiveReload。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看