1. 程式人生 > >記錄我的第一個Spring Boot

記錄我的第一個Spring Boot

Spring Boot的guides有推薦的建立spring專案的外掛,但是我現在不打算用

使用工具

  1. myeclipse
  2. myeclpse自帶maven(3.3.3)

成功頁面:

建立過程:

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.5.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>

在src/main/java/hello下新建HelloController.java

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!我的第一個Spring Boot.";
    }

}

該類被標記為 @RestController,這意味著Spring MVC可以使用它來處理Web請求。@RequestMapping對映/index()方法。從瀏覽器呼叫或在命令列上使用curl時,該方法返回純文字。這是因為@RestController組合@Controller@ResponseBody兩個註釋會導致Web請求返回資料而不是檢視。

在src/main/java/hello下新建Application.java

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。

  • 通常你會新增@EnableWebMvc一個Spring MVC應用程式,但Spring Boot會在類路徑上看到spring-webmvc時自動新增它。這會將應用程式標記為Web應用程式並激活關鍵行為,例如設定 DispatcherServlet

  • @ComponentScan告訴Spring在包中尋找其他元件,配置和服務hello,允許它找到控制器。

main()方法使用Spring Boot的SpringApplication.run()方法來啟動應用程式。您是否注意到沒有一行XML?也沒有web.xml檔案。此Web應用程式是100%純Java,您無需處理配置任何管道或基礎結構。

還有一個CommandLineRunner標記為@Bean的方法,它在啟動時執行。它檢索由您的應用程式建立或由於Spring Boot自動新增的所有bean。它對它們進行分類並打印出來。


新增單元測試

  1. 在pom.xml中新增
 <!-- 新增單元註釋 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
  1. 在src/test/java/hello下新增HelloControllerTest.java
package hello;

import static org.hamcrest.Matchers.equalTo;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;

@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!我的第一個Spring Boot.")));
    }
}

Run As Junit Test 無報錯即成功。

END