1. 程式人生 > >spring boot入門指南(來自官網入門指南)

spring boot入門指南(來自官網入門指南)

1. spring boot 可以使你通過很小的前期配置儘可能快的啟動和執行專案,spring boot用自己的觀點來建立產品已有的應用
2. 啟動:
    使用spring boot建立一個應用:
        本指南提供了spring boot如何幫助你加快和促進應用的開發。和你看過的其他啟動指南一樣,在本指南中你會看到更多spring boot的使用案例。
        意味著給你一個更快的spring boot體驗。如果你想要建立自己的spring boot專案,訪問Spring Initializr,填寫你的詳細專案資訊,選擇你的
        選項,你可以下載maven構建檔案,或將一個打包的專案作為zip檔案下載。
    你將要建立什麼:
        你將要使用spring boot建立一個簡單的web應用並給他新增一些有用的而服務。
    你需要什麼:
        大約15分鐘
        一個喜愛的文字編輯器或整合開發環境
        1.8或以上JDK
        Gradle 4+ 或 Maven 3.2+
        你也可以直接將程式碼匯入你的整合開發環境:
            Spring Tool Suite (STS)
            IntelliJ IDEA
    如何完成這次引導:
        和其他的spring啟動指南一樣,你可以從頭開始一步步的完成也可以跳過已經熟悉的基本步驟。無論以那種方式,最終都是使程式碼正常執行。
        如果從頭開始,請移步到Build with Gradle.
        如果要跳過基礎操作,執行以下步驟:
            下載和解壓本指南的原始碼庫,或使用git下載:
                git clone https://github.com/spring-guides/gs-spring-boot.git
                切換進入gs-spring-boot/initial
                向前跳到[initial].
        如果你已經完成以上步驟,請將你的操作結果與gs-spring-boot/complete中的程式碼進行對比。
    使用maven建立:
        你首先要設定一個基本構建指令碼。你可以使用任何你喜歡的構建系統來構建spring應用,但是你要執行的程式碼必須包含maven。如果你不熟悉maven,
        可以參考Building Java Projects with Maven。
        建立目錄結構:
            src
            |-main
                |-java
                    |-hello
                    
        pom.xml:
        
        <?xml version="1.0" encoding="UTF-8"?>
        <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
            <modelVersion>4.0.0</modelVersion>

            <groupId>org.springframework</groupId>
            <artifactId>gs-spring-boot</artifactId>
            <version>0.1.0</version>

            <parent>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>2.0.3.RELEASE</version>
            </parent>

            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-web</artifactId>
                </dependency>
            </dependencies>

            <properties>
                <java.version>1.8</java.version>
            </properties>


            <build>
                <plugins>
                    <plugin>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-maven-plugin</artifactId>
                    </plugin>
                </plugins>
            </build>

        </project>
        
        spring boot maven外掛-spring-boot-maven-plugin提供了許多方便的特性:
            它集合了類路徑中所有jar,建立了一個單一的可執行的"über-jar",使得你的服務更方便的執行和傳輸。
            它查詢public static void main()方法作為啟動類
            它提供了一個內建依賴解析器來設定與spring boot的依賴相匹配的版本號。無論你覆蓋你想要的任何版本,都會被重置為為Boot選擇的預設
            版本設定。
    使用ide建立:    
        直接去Spring Tool Suite獲取如何直接匯入guide專案
        從IntelliJ IDEA中獲取如何執行guide專案
    學習你可以用spring boot幹什麼:
        spring boot提供了一種快速建立應用的方式。他會檢視你的類路徑和你已經配置的bean,並對你缺少的內容作出合理的假設,並新增它。使用
        spring boot您可以更多的關注業務特性,而較少的關注基礎設施。
        例如:
            spring mvc中對於你總是用到的一些特定的bean,spring boot會自動新增。一個Spring MVC需要servlet容器,spring boot會自動配置嵌入式
            comcat
            如果你需要jetty而不是tomcat,spring boot會自動嵌入jetty。
            Thymeleaf?一些必須總是新增到上下文中的bean,spring boot會自動為您新增。
        這些只是spring boot提供自動配置的幾個例子。與此同時,spring boot不會影響你的操作。例如,如果Thymeleaf在你的路徑下,spring boot會自動的在你的應用上下文中提供一個SpringTemplateEngine。如果你用自己的配置檔案定義了自己的SpringTemplateEngine,spring boot就不會再添加了。這可以使你在你的角色上付出很少的努力。
        
        spring boot不會生成程式碼或編輯你的檔案。相反,當你啟動應用時,spring boot會動態的的連線bean和設定,並將它們應用到你應用程式的上下文中。
        
        建立一個簡單的web應用:
            現在你可以為一個簡單的web應用建立一個web控制器。
                package hello;

                import org.springframework.web.bind.annotation.RestController;
                import org.springframework.web.bind.annotation.RequestMapping;

                @RestController
                public class HelloController {

                    @RequestMapping("/")
                    public String index() {
                        return "Greetings from Spring Boot!";
                    }

                }
                
                這個類被標記為@RestController,意味著它已經準備好被spring mvc使用來處理web請求。@RequestMapping對映“/”到index()方法。當從瀏覽器或命令列的curl呼叫index()方法時,該方法會返回純文字。
                那是因為@RestController結合了@Controller和@ResponseBody,這兩個註解會導致web請求返回資料而不是檢視。
            
            建立一個應用類:
                在這裡你用元件建立一個應用類:
                    package hello;

                    import java.util.Arrays;

                    import org.springframework.boot.CommandLineRunner;
                    import org.springframework.boot.SpringApplication;
                    import org.springframework.boot.autoconfigure.SpringBootApplication;
                    import org.springframework.context.ApplicationContext;
                    import org.springframework.context.annotation.Bean;

                    @SpringBootApplication
                    public class Application {

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

                        @Bean
                        public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
                            return args -> {

                                System.out.println("Let's inspect the beans provided by Spring Boot:");

                                String[] beanNames = ctx.getBeanDefinitionNames();
                                Arrays.sort(beanNames);
                                for (String beanName : beanNames) {
                                    System.out.println(beanName);
                                }

                            };
                        }

                    }
                
                    @SpringBootApplication是一個方便的添加了以下所有內容的註解:
                        @Configuration標記本類作為應用上下文bean定義的來源
                        @EnableAutoConfiguration告訴spring boot開始基於類路徑,其他bean和各種屬性設定新增bean。
                        通常你會為spring mvc應用新增@EnableWebMvc,但是spring boot在類路徑中看到spring-webmvc時就會將它自動新增上。
                        會把應用程式標記為web應用,並激活諸如設定DispatcherServlet之類的關鍵行為。
                        @ComponentScan告訴spring去尋找hello包中的其他元件、配置和服務,讓他能夠找到控制器。
                    
                    main()方法通過使用spring boot的SpringApplication.run()方法啟動應用,你有沒有注意到其中一行xml程式碼都沒有?也沒有web.xml檔案。這個web應用是100%純java,您不需要處理任何管道和基礎設施的配置。
                    
                    這裡也有一個標記為@Bean的CommandLineRunner方法在啟動時執行。它會檢查所有的你的應用建立的或是spring boot建立的bean,給他們排序並打印出來。
                    
            執行應用:
                    如果你使用maven,執行:mvn package && java -jar target/gs-spring-boot-0.1.0.jar
                    從輸出中你會清晰的看到org.springframework.boot.autoconfigure這個bean
                    也會看到tomcatEmbeddedServletContainerFactory。
                    檢驗服務:
                        $ curl localhost:8080
                        Greetings from Spring Boot!
        
        新增單元測試:
            您希望為您新增的端點新增一個測試,spring測試已經提供了一些機制,可以很容易的包含到您的專案中。
            
            如果你使用maven,將以下內容新增到依賴列表中:
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-test</artifactId>
                    <scope>test</scope>
                </dependency>
            現在寫一個簡單的單元測試,通過你的終端模擬sevlet的請求和響應:
                @RunWith(SpringRunner.class)
                @SpringBootTest
                @AutoConfigureMockMvc
                public class HelloControllerTest {

                    @Autowired
                    private MockMvc mvc;

                    @Test
                    public void getHello() throws Exception {
                        mvc.perform(MockMvcRequestBuilders.get("/").accept(MediaType.APPLICATION_JSON))
                                .andExpect(status().isOk())
                                .andExpect(content().string(equalTo("Greetings from Spring Boot!")));
                    }
                }
                
                MockMvc來自於Spring Test,並且允許你通過一組建造者類對DispatcherServlet傳送HTTP請求並對結果進行斷言。
                @AutoConfigureMockMvc和@SpringBootTest結合在一起注入一個MockMvc例項。我們使用@SpringBootTest建立整個應用上下文。
                另一種方法是使用@WebMvcTest告訴spring boot只建立上下文的web層。spring boot在任何情況下都能夠自動定位主應用程式,
                但是如果你想要建立一些不同的應用,你可以覆蓋或縮減它。
                
            和模擬http請求一樣,我們可以使用spring boot寫一個簡單的全棧整合測試。例如,我們可以這樣做:
                @RunWith(SpringRunner.class)
                @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
                public class HelloControllerIT {

                    @LocalServerPort
                    private int port;

                    private URL base;

                    @Autowired
                    private TestRestTemplate template;

                    @Before
                    public void setUp() throws Exception {
                        this.base = new URL("http://localhost:" + port + "/");
                    }

                    @Test
                    public void getHello() throws Exception {
                        ResponseEntity<String> response = template.getForEntity(base.toString(),
                                String.class);
                        assertThat(response.getBody(), equalTo("Greetings from Spring Boot!"));
                    }
                }    
                
                這個嵌入式伺服器藉助webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT在隨機埠上啟動,
                使用@LocalServerPort來獲取實際埠號。
        
        新增工業級服務:
            如果您正在為您的業務建立一個網站,您可能需要新增一些管理服務。spring boot通過actuator module模組提供了一些開箱即用的
            功能,如健康,審計,beans等。
            
            如果你使用maven,將以下內容加入到依賴中:
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-actuator</artifactId>
                </dependency>
                
            如果你使用maven,執行以下命令:
                mvn package && java -jar target/gs-spring-boot-0.1.0.jar
                
            你會看到一組新的RESTful終端加入到了應用中,這是spring boot提供的管理服務。
            
            他們包括 errors, actuator/health, actuator/info, actuator.
            
            同樣有一個/actuator/shutdown終端,但是它只通過JMX可見。在你的application.properties檔案中增加management.endpoints.shutdown.enabled=true,可以使它作為一個http終端使用。
            
            很容易就可以檢測應用的健康情況:
                $ curl localhost:8080/actuator/health
                {"status":"UP"}
            
            你可以嘗試通過curl呼叫shutdown方法:
                $ curl -X POST localhost:8080/actuator/shutdown
                {"timestamp":1401820343710,"error":"Method Not Allowed","status":405,"message":"Request method 'POST' not supported"}
                由於我們沒有開啟此功能,所以請求會因為不存在而阻塞。
                
            要想知道更多REST終端的詳細資訊以及終端在application.properties檔案中的引數配置,你可以詳細的閱讀docs about the endpoints。
            
            檢視spring boot的啟動項:
                你已經看到了一下spring boot的啟動項,你可以在 here in source code.中檢視spring boot的所有啟動項。
            
        JAR支援和Groovy支援:
            最後的例子展示spring boot如何將您沒有意識到但是您需要的bean連線起來。展示如何啟動方便的管理服務。
            
            但是spring boot做的更多。它不僅支援war檔案的部署,還通過載入器模型很容易的將可執行的jar包組合在一起。以下演示了對
            spring-boot-gradle-plugin和spring-boot-maven-plugin的雙重支援:
                以下是groovy程式碼。。。不使用,不翻譯
            
        總結:
            恭喜!你使用spring boot建立了一個簡單的應用並且學會了如何使用spring boot加快你的開發步伐。你也開啟了一些有幫助的產品服務。
            這只是spring boot的一小部分樣例。如果你想要挖掘的更深可以參考 Spring Boot’s online docs。