1. 程式人生 > >spring boot參考文件——Part III

spring boot參考文件——Part III

Part III. 使用Spring Boot
    本節將深入講述使用spring boot的更多細節。包括專案構建系統,自動配置,和如何執行應用等主題。同樣包含一些spring boot的練習。
    雖然spring boot沒有什麼特殊的地方,但是這裡還是做了一些介紹,跟著學習,可以使你的開發過程更容易一些。

    如果你是spring boot的新手,進入本節之前你應該先閱讀啟動指南。

    13. 專案構建系統
        強烈建議選擇一個支援依賴管理並且可以釋出到maven中心倉庫的工具。我們推薦maven和gradle。當然也可以使用其他的專案構建系統(如ant)
        ,但是可能不會支援的很好。
        
        13.1 依賴管理
            每個spring boot版本都提供了它所支援的依賴的列表。實際上,在建立配置時不需要為這些依賴提供版本資訊,spring boot會自動匹配。
            如果升級spring boot,這些依賴也會隨著升級。

            [注意]
                如果需要,同樣可以自己指定依賴的版本。
            
            列表中包含所有可用的spring模組和第三方庫,提供maven和grade可使用的標準依賴。

            [警告]
                每個spring boot的版本和spring框架的版本是一致的,不推薦自定義spring boot的版本。

        13.2 Maven
            maven使用者可以通過繼承spring-boot-starter-parent實現預設。spring-boot-starter-parent提供了以下特性:
                Java 1.8作為預設編譯器級別。
                UTF-8編碼。
                繼承自spring-boot-dependencies pom的依賴管理模組,這個模組使你無需自己指定依賴的版本。
                合理的資源過濾。
                合理的外掛配置。
                注意,由於application.properties和application.yml檔案接受spring風格的${…​}佔位符,maven過濾改為了使用@

[email protected]佔位符。

            13.2.1 繼承Starter Parent
                如下設定繼承spring-boot-starter-parent:

                    <!-- Inherit defaults from Spring Boot -->
                    <parent>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-parent</artifactId>
                        <version>2.0.3.RELEASE</version>
                    </parent>
                
                [注意]
                    你只需要在這裡設定spring boot的版本,匯入其他starter可以忽略版本設定。

                
                你也可以通過以下方式覆蓋上面的版本設定:

                    <properties>
                        <spring-data-releasetrain.version>Fowler-SR2</spring-data-releasetrain.version>
                    </properties>
                [小竅門]
                    檢查spring-boot-dependencies pom,獲得所支援的屬性列表。

            13.2.2 使用沒有Parent POM的spring boot
                並不是所有人都喜歡繼承spring-boot-starter-parent POM,你可以宣告自己的依賴。
                
                如果你不想使用the spring-boot-starter-parent,你依然可以通過設定<scope>import</scope>使用依賴管理功能
                (外掛功能就不能使用了),如下:
                
                <dependencyManagement>
                        <dependencies>
                        <dependency>
                            <!-- Import dependency management from Spring Boot -->
                            <groupId>org.springframework.boot</groupId>
                            <artifactId>spring-boot-dependencies</artifactId>
                            <version>2.0.3.RELEASE</version>
                            <type>pom</type>
                            <scope>import</scope>
                        </dependency>
                    </dependencies>
                </dependencyManagement>
                
                以上的設定並不是不允許你設定自己的依賴版本了。要設定自己的依賴版本,就需要在spring-boot-dependencies入口之前新增你的
                依賴管理入口。以下是spring data升級的例子:

                    <dependencyManagement>
                        <dependencies>
                            <!-- Override Spring Data release train provided by Spring Boot -->
                            <dependency>
                                <groupId>org.springframework.data</groupId>
                                <artifactId>spring-data-releasetrain</artifactId>
                                <version>Fowler-SR2</version>
                                <type>pom</type>
                                <scope>import</scope>
                            </dependency>
                            <dependency>
                                <groupId>org.springframework.boot</groupId>
                                <artifactId>spring-boot-dependencies</artifactId>
                                <version>2.0.3.RELEASE</version>
                                <type>pom</type>
                                <scope>import</scope>
                            </dependency>
                        </dependencies>
                    </dependencyManagement>
                    
                    
                [注意]
                    上面例子中自定義了BOM, 所有依賴型別都可以用同樣的方式覆蓋.

            13.2.3 使用Spring Boot Maven外掛
                spring boot包括一個maven外掛,它可以將專案打包為一個可執行jar。如下設定:

                    <build>
                        <plugins>
                            <plugin>
                                <groupId>org.springframework.boot</groupId>
                                <artifactId>spring-boot-maven-plugin</artifactId>
                            </plugin>
                        </plugins>
                    </build>
                
                [注意]
                    如果你使用Spring Boot starter parent pom,除非要改變parent中的設定,否則,你只需新增<plugin>而不需要其他配置,

        13.3 Gradle
            
        13.4 Ant
        

        13.5 Starters
            Starters是一組非常方便的依賴。
            Starters命名格式為spring-boot-starter-*,方便尋找。
            以下starters由org.springframework.boot提供:
                ....
            

    14. 結構化程式碼
        spring boot對程式碼佈局沒有要求。然而這裡有一些幫助範例。

        14.1 使用預設包
            如果一個類沒有包含在任何一個包中,它就會被認為屬於預設包。要儘量避免使用預設包,它會在應用使用@ComponentScan, @EntityScan, 
            或 @SpringBootApplication註解時導致一些特殊的錯誤,因為它們會讀取每一個jar中的每一個類。

            [Tip]
                推薦遵循java的命名規則,使用反向域名命名(例如,com.example.project)。

        14.2 定位主應用類
            建議將主應用類放在root包中所有其他類之前。@SpringBootApplication經常在主類上,它會為專案定義一個基本的搜尋包。例如,
            如果寫一個JPA類,@SpringBootApplication類的包用於搜尋@Entity專案。使用root包也允許元件掃描只用於你自己的專案。

            [小竅門]
                如果你不想使用@SpringBootApplication,可以用@EnableAutoConfiguration和@ComponentScan代替。
            
            以下展示了一個典型的程式碼結構佈局:

            com
             +- example
                 +- myapplication
                     +- Application.java
                     |
                     +- customer
                     |   +- Customer.java
                     |   +- CustomerController.java
                     |   +- CustomerService.java
                     |   +- CustomerRepository.java
                     |
                     +- order
                         +- Order.java
                         +- OrderController.java
                         +- OrderService.java
                         +- OrderRepository.java
                         
                        
            Application.java檔案會和@SpringBootApplication一起宣告主函式,如下: 

                package com.example.myapplication;

                import org.springframework.boot.SpringApplication;
                import org.springframework.boot.autoconfigure.SpringBootApplication;

                @SpringBootApplication
                public class Application {

                    public static void main(String[] args) {
                        SpringApplication.run(Application.class, args);
                    }

                }
                
    15. 配置類
        spring boot支援java基本配置。即使可以使用xml配置,但是還是推薦使用@Configuration類。通常定義主方法的類是作為主@Configuration
        類的好的候選者。
        
        [小竅門]
            網上有許多使用xml配置spring的例子。如果有可能,使用等價的基於java的配置。可以將查詢Enable*註解作為一個好的起點。
            
        15.1 匯入額外配置類
            你不需要將所有的@Configuration放在一個類中。@Import註解可以匯入額外的配置類。另外,你可以使用@ComponentScan註解自動查詢
            所有的spring元件,包括@Configuration類。

        15.2 匯入XML配置
            如果必須使用XML配置,依然推薦從@Configuration開始。然後你可以使用@ImportResource註解載入XML配置檔案。

    16. 自動配置
        spring boot試圖通過你新增的依賴自動配置spring應用。例如,如果HSQLDB在你的類路徑中,如果你沒有手動配置任何資料庫連線bean,spring boot會自動配置一個記憶體中的資料庫。
        
        你需要在你的一個@Configuration類中新增@EnableAutoConfiguration或@SpringBootApplication註解選擇加入到自動配置。

        [小竅門]
            你只需要新增一個@SpringBootApplication或@EnableAutoConfiguration註解,推薦在主@Configuration類新增。

        16.1 逐步取代自動配置
            自動配置是非侵入性的。在任何時候,你都可以定義你自己的配置來替代自動配置的特定部分。例如,你增加了一個自己的資料來源bean,
            預設的嵌入式資料庫支援就會回退。
            
            如果你需要找出當前應用的自動配置,為什麼,使用--debug開啟你的應用。這樣做可以使核心記錄器生成debug日誌,
            並且將報告以log方式輸出到控制檯。
            
        16.2 禁止特定的自動配置類
            如果你發現你不想要的特定自動配置類出現在應用中,你可以使用@EnableAutoConfiguration的排除(exclude)屬性禁止它,如下例:

                import org.springframework.boot.autoconfigure.*;
                import org.springframework.boot.autoconfigure.jdbc.*;
                import org.springframework.context.annotation.*;

                @Configuration
                @EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
                public class MyConfiguration {
                }
                
                如果類沒有在類路徑中,你可以使用excludeName屬性加入全類名代替。最後,你也可以通過使用spring.autoconfigure.exclude
                屬性,控制自動配置類列表來排除不想要出現的類。

            [小竅門]
                你既可以用註解亦可以用屬性配置定義排除特定的類。

    17. Spring Beans和依賴注入
        你可以自由的使用任何標準的spring框架來定義你的beans和它們的注入依賴項。簡單起見,使用@ComponentScan(尋找bean)和
        @Autowired(尋找構造注入)很方便。
        
        如果你按以上所述結構化你的程式碼(將application類放到root包),你可以新增@ComponentScan註解而不需要給註解新增任何屬性。
        所有的應用元件(@Component, @Service, @Repository, @Controller)都會自動註冊為spring bean。

        下面的例子展示了使用構造注入生成RiskAssessor bean的@Service Bean:

            package com.example.service;

            import org.springframework.beans.factory.annotation.Autowired;
            import org.springframework.stereotype.Service;

            @Service
            public class DatabaseAccountService implements AccountService {

                private final RiskAssessor riskAssessor;

                @Autowired
                public DatabaseAccountService(RiskAssessor riskAssessor) {
                    this.riskAssessor = riskAssessor;
                }

                // ...

            }
            
        如果一個bean只含有一個構造方法,你可以忽略@Autowired,如下:
        
            @Service
            public class DatabaseAccountService implements AccountService {

                private final RiskAssessor riskAssessor;

                public DatabaseAccountService(RiskAssessor riskAssessor) {
                    this.riskAssessor = riskAssessor;
                }

                // ...

            }
            
        [小竅門]
            注意構造注入如何將riskAssessor標記為常量的,表明riskAssessor隨後不能再被修改。

    18. 使用@SpringBootApplication註解
        許多spring boot開發者希望他們應用的Application類中能夠同時具有使用自動配置,元件掃描和可以定義額外配置的功能。
        一個@SpringBootApplication註解就可以滿足以上三個特性。如下:

            @EnableAutoConfiguration: 開啟spring boot的自動配置功能
            @ComponentScan: 開啟application所在包@Component掃描
            @Configuration: 允許在上下文中註冊額外的beans或匯入額外的配置類
            @SpringBootApplication註解相當於使用@Configuration, @EnableAutoConfiguration, 和 @ComponentScan作為預設屬性,如下所示:

                package com.example.myapplication;

                import org.springframework.boot.SpringApplication;
                import org.springframework.boot.autoconfigure.SpringBootApplication;

                @SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan
                public class Application {

                    public static void main(String[] args) {
                        SpringApplication.run(Application.class, args);
                    }

                }
                
        [注意]
            @SpringBootApplication同樣提供了別名自定義@EnableAutoConfiguration和@ComponentScan的屬性

        [注意]
            這些特性都不是強制性的。你可以選擇任何可用的特性來替代原有的單個註解。例如,你如果不想在應用中使用元件掃描:
            
                package com.example.myapplication;

                import org.springframework.boot.SpringApplication;
                import org.springframework.context.annotation.ComponentScan
                import org.springframework.context.annotation.Configuration;
                import org.springframework.context.annotation.Import;

                @Configuration
                @EnableAutoConfiguration
                @Import({ MyConfig.class, MyAnotherConfig.class })
                public class Application {

                    public static void main(String[] args) {
                            SpringApplication.run(Application.class, args);
                    }

                }
                
            在本例中,除了@Component註解的類不會被掃描,並且匯入了使用者自定義的beans(@Import)以外,Application和其他的
            spring boot應用沒有什麼不同。
            

    19. 執行應用
        將你的應用打包為jar並使用嵌入式HTTP伺服器的一個最大的優勢是你可以像其他任何方式一樣執行你的應用。debug spring boot也很方便。
        你不需要任何特殊的IDE外掛或擴充套件。
        
        [注意]
            本節只包括基於jar的打包方式,若果你選擇打war包,你應該參考你的伺服器和IDE文件。


        19.1 從IDE執行
            你可以將你的spring boot應用作為一個單個的java應用在IDE上執行。然而,你首先需要匯入你的專案。匯入步驟根據你的IDE和構建系統的
            不同而不同。大多數的IDE可以直接匯入maven專案。例如,eclipse使用者可以從檔案選單中選擇Import…​ → Existing Maven Projects。

            如果你不能直接將專案匯入到IDE,你可能需要使用構建外掛建立IDE metadata(元資料)。maven有支援Eclipse和IDEA的外掛。Gradle
            為各種IDE提供外掛。

            [小竅門]
                如果你意外的運行了兩側web應用程式,你會看到“Port already in use”錯誤。STS使用Relaunch(重啟)按鈕而不是運按鈕保證所有的
                例項都已經關閉。

        19.2 執行打包的應用
            如果你使用spring boot maven或Gradle外掛建立一個可執行jar,你可以使用java -jar執行應用,如下:

                $ java -jar target/myapplication-0.0.1-SNAPSHOT.jar
                
            同樣支援遠端啟動debug打包應用。如下:

                $ java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n \
                       -jar target/myapplication-0.0.1-SNAPSHOT.jar
                       
        19.3 使用Maven外掛
            spring boot Maven外掛包括了一個可以用於快速編譯和啟動應用的入口。效果和在IDE中執行一樣。以下展示了一個執行spring boot應用的
            典型的Maven命令:

                $ mvn spring-boot:run
            
            你也可是使用MAVEN_OPTS執行系統環境變數,如下:

                $ export MAVEN_OPTS=-Xmx1024m
                
        19.4 使用Gradle外掛
            
            spring boot Gradle外掛可以使用bootRun以同樣的方式啟動應用,如下:
                
                $ gradle bootRun
                
            你也可以使用JAVA_OPTS執行系統環境變數,如下:

                $ export JAVA_OPTS=-Xmx1024m
            
        19.5 熱插拔
            由於spring boot應用只是簡單的java應用,所以可以使用JVM熱插拔。但是JVM受可替代的位元組碼的限制,可以使用JRebel。
            Since Spring Boot applications are just plain Java applications, JVM hot-swapping should work out of the box. JVM hot swapping is somewhat limited with the bytecode that it can replace. For a more complete solution, JRebel can be used.

            spring-boot-devtools模組也支援快速重啟應用。第20章,開發者工具部分熱插拔“How-to”檢視詳細資訊。

    20. 開發者工具
        spring boot包括一組可以使應用開發體驗更加愉快的工具。spring-boot-devtools模組可以被加入到任何專案中提供開發時特性。新增模組依賴
        ,如下為maven和Gradle的配置內容:
        
            Maven. 

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

            dependencies {
                compile("org.springframework.boot:spring-boot-devtools")
            }
        [注意]
            在執行完全打包的應用程式時開發者工具會自動失效。如果你的應用通過java -jar或特殊的類載入器啟動,它會被認為是一個生產應用。
            在maven中標記為可選或是在Gradle中使用compileOnly,是一個最實際的阻止devtools應用到使用您的專案的其他模組的方式。

        [小竅門]
            重新打包不會預設包含devtools。如果你想要使用遠端的devtools特性,你需要通過禁止excludeDevtools屬性加入devtools。Maven和
            Gradle外掛都支援這個屬性。
            
        20.1 預設屬性
            spring boot支援的一些庫使用快取提高效能。例如,末班引擎快取編譯後的模板來避免重複的解析模板檔案。同樣,spring MVC可以增加
            HTTP快取頭響應靜態資源。
            
            雖然快取很在生產中很有用,但是在開發時會起反作用,使得剛開發的程式碼不能立即生效。基於這個原因,spring-boot-devtools預設禁止
            快取。
            
            快取通常在你的application.properties配置檔案中配置。例如,Thymeleaf提供spring.thymeleaf.cache配置。相對於手動配置,
            spring-boot-devtools模組提供了更好的自動的合理的開發時配置。

            [小竅門]
                通過DevToolsPropertyDefaultsPostProcessor檢視devtools的所有配置。

        20.2 自動重啟
            無論何時類路徑中的檔案發生改變都可使用spring-boot-devtools自動重啟。這個特性在使用IDE開發時會非常有用,它為程式碼改變提供了
            一個快速的反饋迴路。預設情況下,指向資料夾的類路徑上的任何條目都會被監控以進行更改。注意,某些資源,如靜態資源和檢視模板,
            不需要重啟應用。

            觸發重啟
            
            由於DevTools監控類路徑資源,唯一觸發重啟的方式就是修改類路徑。修改類路徑的方式取決於你使用的IDE。在Eclipse中,儲存一個被修改
            的檔案會導致類路徑的改變觸發重啟。在IntelliJ IDEA中,建立專案(Build -> Build Project)可以達到同樣的效果。

            [注意]
                只要啟用forKing,你就可以通過使用支援的構建外掛(Maven和Gradle)啟動應用,因為DevTools正常執行需要單獨的類載入器。
                預設的,Gradle和Maven在類路徑中檢測到DevTools時會提供單獨的類載入器。

            [小竅門]
                使用LiveReload可以使自動重啟效果更好。在LiveReload部分檢視詳細資訊。如果你使用JRebel,為了支援動態類載入,自動重啟會被
                禁用。devtools的其他特性(例如LiveReload和屬性覆蓋)仍然可以使用。

            [注意]
                在重啟時,DevTools依賴應用上下文的shutdown hook關閉應用。如果shutdown hook被禁用
                (SpringApplication.setRegisterShutdownHook(false)),DevTools重啟功能就不能正常工作了。

            [注意]
                當決定類路徑中條目改變是否觸發重啟時,DevTools自動忽略以spring-boot, spring-boot-devtools, spring-boot-autoconfigure, spring-boot-actuator, and spring-boot-starter命名的專案。

            [注意]
                DevTools需要自定義ApplicationContext所使用的ResourceLoader。如果你的應用已經提供了一個,那麼它會被覆蓋。不支援直接
                覆蓋ApplicationContext中的getResource方法。

            重啟vs過載

            重啟技術是spring boot提供的通過使用兩個類載入器實現的。不變的類被載入在基本載入器中,你開發的變化的類載入到重啟載入器中。
            應用重啟時,重啟類載入器會被刪掉並建立一個新的重啟類載入器。這種方式意味著,應用重啟的速度比冷啟動更快,這是因為基本類載入
            器一直可以使用。
            
            如果你發現對於你的應用來說重啟已經不夠快你可以考慮過載技術,如來自於ZeroTurnaround的JRebel。這些工作通過重寫類來完成,使
            它們更易於重新載入。

            20.2.1 條件評估中日誌改變
                預設的,每次重啟應用,顯示條件評估delta的報告會以日誌的形式記錄下來。報告顯示了你應用的自動配置的改變,如新增刪除beans
                和設定配置屬性。
                
                禁止記錄報告日誌,做如下設定:

                    spring.devtools.restart.log-condition-evaluation-delta=false
                    
            20.2.2 排除資源
                有些資源在發生改變時不需要觸發重啟。例如,Thymeleaf模板可以就地編輯。預設的,在/META-INF/maven, /META-INF/resources, /resources, /static, /public, or /templates中修改資源不會觸發重啟,但是會觸發線上過載。你可以使用
                spring.devtools.restart.exclude自定義無需觸發重啟的資源。例如,只排除/static和/public,你可以如下設定:

                    spring.devtools.restart.exclude=static/**,public/**
                
                [小竅門]
                    如果你想要保持預設的同時新增額外的排除資源,你可以使用he spring.devtools.restart.additional-exclude設定。

            20.2.3 檢視額外路徑
                當你想要不在類路徑中的檔案改變時觸發重啟或過載。可以使用spring.devtools.restart.additional-paths配置額外的路徑。
                可以提前使用spring.devtools.restart.exclude設定額外路徑觸發重啟還是線上過載。

            20.2.4 禁止重啟
                如果你不想使用重啟特性,可以使用spring.devtools.restart.enabled禁止。大多數情況,可以在application.properties中設定。
                
                如果需要完全禁止重啟支援,在呼叫SpringApplication.run(…​)之前設定spring.devtools.restart.enabled為false,如下:

                    public static void main(String[] args) {
                        System.setProperty("spring.devtools.restart.enabled", "false");
                        SpringApplication.run(MyApp.class, args);
                    }
                    
            20.2.5 使用觸發檔案
                如果你使用頻繁編譯改變檔案的IDE,你可能需要特定時間觸發重啟。你可以使用觸發檔案,觸發檔案是一個特殊的檔案,必須修改觸
                發文件才能實際開啟觸發重啟的檢查。改變檔案只觸發檢查並且只有Devtools檢測到做了什麼時才觸發重啟。觸發檔案可以手動修改也
                可以通過IDE外掛來修改。
                
                如果使用觸發檔案,通過spring.devtools.restart.trigger-file設定觸發檔案的路徑。

                [小竅門]
                    將spring.devtools.restart.trigger-file設為全域性屬性,整個專案都以同樣的方式運作。

            20.2.6 自定義重啟類載入器
                如上所描述的,重啟功能的實現需要使用兩個類載入器。對於大多數應用,整個方式比較適合。然而,它有時候可能會導致類載入問題。
                
                預設的,IDE開啟的任何專案都使用重啟類載入器載入,並且任何常規的jar檔案都使用基本類載入器載入。如果你開發一個多模組的專案,
                並且並不是所有模組都匯入IDE中,可以通過建立META-INF/spring-devtools.properties檔案進行自定義。

                spring-devtools.properties檔案包含以restart.exclude和restart.include為字首的配置。包含項是需要加入到重啟類載入器中的,
                排除項是需要加入到基本類載入器中的。屬性值是正則格式的類路徑,如下:

                    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 瞭解限制
                重啟動能對於被標準物件輸入流反序列化的物件支援的不是很好。如果你需要反序列化資料,你可以使用spring的 ConfigurableObjectInputStream結合Thread.currentThread().getContextClassLoader()。
                
                不幸的是,一些第三方庫在反序列化時沒有考慮使用上下文類載入器。如果發現這個問題,你需要和原作者協商。

        20.3 線上過載
            spring-boot-devtools模組包括一個嵌入式線上過載伺服器可以在資源改變時觸發瀏覽器重新整理。可以從livereload.com獲取支援
            Chrome, Firefox和Safari的線上過載擴充套件。
            
            如果你在程式執行時不想啟動線上過載,你可以設定spring.devtools.livereload.enabled property為false。

            [注意]
                你可以一次只執行一個線上過載伺服器。啟動應用之前,確定其他線上過載伺服器沒有執行。如果你使用IDE開啟多個應用,
                只有第一個支援線上過載。

        20.4 全域性設定
            你可以在你的$HOME資料夾中通過新增一個名為.spring-boot-devtools.properties(注意檔名以“.”開頭)的配置檔案來對devtools
            進行全域性配置。任何新增到這個檔案的屬性都會作用在你機器中所有支援devtools的spring boot應用中。例如,配置總是使用觸發
            檔案重啟,你需要新增一下配置:

                ~/.spring-boot-devtools.properties. 

                spring.devtools.reload.trigger-file=.reloadtrigger
                
        20.5 遠端應用
            spring boot開發者工具對本地開發沒有限制。你在執行遠端應用時也可以使用它的一些特性。遠端支援是可以選擇的。如果啟用它,
            需要確保重新打包的結構中包含devtools,如下所示:

                <build>
                    <plugins>
                        <plugin>
                            <groupId>org.springframework.boot</groupId>
                            <artifactId>spring-boot-maven-plugin</artifactId>
                            <configuration>
                                <excludeDevtools>false</excludeDevtools>
                            </configuration>
                        </plugin>
                    </plugins>
                </build>
                
            然後需要設定spring.devtools.remote.secret屬性,如下所示:

                spring.devtools.remote.secret=mysecret
                
            [警告]
                遠端啟用spring-boot-devtools存在安全問題。永遠不要在生產中啟動。
            
            遠端devtools支援包括兩部分:接受連線的伺服器端和在IDE中執行的客戶端。當spring.devtools.remote.secret屬性設定好以後伺服器端
            會自動啟動devtools。客戶端元件必須手動啟動。

            20.5.1 執行遠端客戶端應用
                遠端客戶端應用在IDE中執行。你需要以所連線的遠端客戶端相同的類路徑執行
                org.springframework.boot.devtools.RemoteSpringApplication。應用所需的唯一引數是要連線的遠端的URL。
                
                例如,如果使用Eclipse或STS並且以專案名為my-app部署到Cloud Foundry,如下操作:
                    從Run選單中選擇Run Configurations…​ 
                    建立一個新的Java應用“launch configuration”。
                    瀏覽my-app專案.
                    org.springframework.boot.devtools.RemoteSpringApplication作為主類。
                    在專案引數中新增https://myapp.cfapps.io(你的遠端URL)
                    
                    
                    一個執行的遠端客戶端內容如下所示:

                      .   ____          _                                              __ _ _
                     /\\ / ___'_ __ _ _(_)_ __  __ _          ___               _      \ \ \ \
                    ( ( )\___ | '_ | '_| | '_ \/ _` |        | _ \___ _ __  ___| |_ ___ \ \ \ \
                     \\/  ___)| |_)| | | | | || (_| []::::::[]   / -_) '  \/ _ \  _/ -_) ) ) ) )
                      '  |____| .__|_| |_|_| |_\__, |        |_|_\___|_|_|_\___/\__\___|/ / / /
                     =========|_|==============|___/===================================/_/_/_/
                     :: Spring Boot Remote :: 2.0.3.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.spring

相關推薦

spring boot參考——Part III

Part III. 使用Spring Boot     本節將深入講述使用spring boot的更多細節。包括專案構建系統,自動配置,和如何執行應用等主題。同樣包含一些spring boot的練習。     雖然spring boot沒有

spring boot參考——PartI和PartII

Part I. Spring Boot參考文件     本小節是對Spring Boot參考文件的概述. 是文件其餘部分的對映.     1. 關於本參考文件         

spring boot參考——目錄

sprint boot操作指南 ------------------------- 作者:     Phillip Webb, Dave Syer, Josh Long, Stéphane Nicoll, Rob Winch, Andy Wilkinson, Marc

Spring Boot 配置詳解:Properties和YAML

列表 config 其他 操作系統 des num mat 變量 onf 一.配置文件的生效順序,會對值進行覆蓋: 1. @TestPropertySource 註解 2. 命令行參數 3. Java系統屬性(System.getProperties

spring boot工程上傳出現net::ERR_CONNECTION_ABORTED,上傳失敗

when servlet pri 出了 connect ride 技術 threshold 這一 SpringBoot做文件上傳時出現了The field file exceeds its maximum permitted size of 1048576 bytes.錯

Spring Boot配置規則以及使用方法官方檔查找以及Spring項目的官方檔查找方法

lan 屬於 tps pri ati html 查詢 為什麽 發現 比如要使用Spring Boot實現一個功能,最直接的方式是Google,但是往往搜索出來的都比較亂,關鍵是亂在不同的版本上,比如1.x版本和2.x版本的配置是不一樣的。最明顯區別是在使用Thymeleaf

【日常錯誤】spring-boot配置讀取不到

無法 pan factory sdn 一個 pre nco span xxx 最近在用spring-boot做項目時,遇到自定義的配置文件無法讀取到的問題,通過在appcation.java類上定義@PropertySource(value = {"classpath:XX

spring-boot配置使用

one rop boot 生產 參數 註解註入 環境 開發環境 ring 配置文件格式兩種application.properties和application.yml .yml配置的使用 1、使用@Value("${配置文件中的屬性名}")註解註入配置內容 2、在配置中引用

Spring Boot配置放在jar外部

最大 config文件 cati res 記事本 log classpath dev 不想 Spring Boot程序默認從application.properties或者application.yaml讀取配置,如何將配置信息外置,方便配置呢? 查詢官網,可以得到下面的幾

詳解Spring Boot配置之多環境配置

多個 提高效率 橫線 文件 style ica property form blog 一. 多環境配置的好處: 1.不同環境配置可以配置不同的參數~ 2.便於部署,提高效率,減少出錯~ 二. properties多環境配置 1. 配置激活選項 spring.profile

Spring Boot 配置詳解

單引號 批量 down list 可謂 通過 數據結構 created 作用 Spring Boot配置文件詳解 Spring Boot提供了兩種常用的配置文件,分別是properties文件和yml文件。他們的作用都是修改Spring Boot自動配置的默認值。相對於pr

Spring Boot入門——上傳與下載

stat sts att nload file cep transfer dba sco Spring Boot入門——文件上傳與下載https://www.cnblogs.com/studyDetail/p/7003253.html 1、在pom.xml文件中添加依賴

附錄B. Spring Boot 配置application.properties

sheel jaas embed stat none ets roc error tablet #SPRING CONFIG (ConfigFileApplicationListener) spring.config.name= # config file name (d

spring boot配置spring.mvc.static-path-pattern 配置項

div AD 路由 add hand 源文件 PE 前綴 ML spring boot項目中的靜態資源文件存放在static文件下面,當通過瀏覽器訪問這些靜態文件時,發現必須要添加static作為前綴才能訪問,折騰了一番後發現,這個前綴跟 spring.mvc.static

二、Spring Boot 配置

rand .so property lns 通過 gda object boot.s handle 1、配置文件 Spring Boot使用一個全局的配置文件,配置文件名是固定的 application.properties applicatioin.yml

【01】Spring Boot配置相關

其他 boot 默認 命令行參數 標註 yml 環境 獲取 rop 1、Spring Boot 獲取屬性的屬性源,優先級從高到低 (1)命令行參數 (2)java:comp/env裏的JNDI屬性 (3)JVM系統屬性 (4)操作系統的環境變量 (5)隨機生成的的帶rand

Spring-Boot ? ShapeFile讀寫工具類+接口調用

void while har ble mage cto next() bound 添加 一、項目目錄結構樹 二、項目啟動 三、往指定的shp文件裏寫內容 (1) json數據【Post】 {

Spring Boot官方筆記--PartIV: Spring Boot特性

23. SpringApplication特性 Banner SpringApplicationBuilder Events and Listeners Web Environment ApplicationArguments: 獲取SpringApplication.run(...)

Spring Boot 官方筆記

【轉載】原文來源:https://blog.csdn.net/luqiang81191293/article/details/54949197 Spring Boot每次釋出時都會提供一個它所支援的精選依賴列表。實際上,在構建配置裡你不需要提供任何依賴的版本,因為Spring Boot已

史上最全面的Spring Boot配置詳解

\n 系統環境 dfa 文件比較 打包 body XML contex 字符 Spring Boot在工作中是用到的越來越廣泛了,簡單方便,有了它,效率提高不知道多少倍。Spring Boot配置文件對Spring Boot來說就是入門和基礎,經常會用到,所以寫下做個總結以