Spring Boot探路者之helloworld

Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。通過這種方式,Spring Boot致力於在蓬勃發展的快速應用開發領域(rapid application development)成爲領導者。
簡單的說將java的各大流行框架通過頁面配置整合起來,省去了項目初建花費大量時間去組裝調試的過程,從而簡化了項目框架搭建流程。內置了tomcat,jetty等容器,無需再通過tomcat部署war包的方式部署項目。目前在微服務架構中應用很廣泛。
下面就簡單介紹下使用流程:

1.配置下載項目

訪問網站http://start.spring.io/,根據自己的情況選擇maven或gradle和spring boot版本
點擊“Switch to the full version”配置自己項目說明
這裏寫圖片描述
在創建項目的下方可以根據自己的需求選擇合適框架依賴。
選擇好後點擊“Generate Project”下載項目工程。
也可以通過安裝ide插件支持,如eclipse安裝spring tools tips,新建spring starter project項目

2.項目結構

和maven項目一樣這裏就不多少了,有一個*Application類的主程序,運行即可啓動程序。

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

3.編寫demo代碼

1.Controller編寫

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserServie userServie;

    @RequestMapping(value="/sayHello/{id}",method = RequestMethod.GET)
    public String sayHello(@PathVariable Long id){
        return userServie.sayHello(id);
    }
    @RequestMapping(value="",method = RequestMethod.POST)
    public Long save(@RequestBody User user){
        return userServie.addUser(user);
    }

    @RequestMapping(value="/list",method = RequestMethod.GET)
    public List<User> list(){
        return userServie.findList();
    }
}

spring boot默認的包掃描是從Application同級包路徑自上而下掃描注入。
2.單元測試
使用RestTemplate進行Controller接口測試,
添加測試包依賴

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class HelloworldApplicationTests {
    @Autowired
    private TestRestTemplate restTemplate;
    @Test
    public void testSayHello() throws Exception {
        HttpHeaders requestHeaders = new HttpHeaders();
        requestHeaders.setContentType(MediaType.APPLICATION_JSON);
        requestHeaders.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
        User user = new User();
        user.setAge(30);
        user.setBirthday(new Date());
        user.setName("tom");
        HttpEntity<User> request = new HttpEntity<User>(user, requestHeaders);
        Long id = restTemplate.postForObject("/user", request, Long.class);
        Assert.assertEquals(restTemplate.getForEntity("/user/sayHello/{id}", String.class,  id).getBody(), "hello tom");;
    }

    @Test
    public void testSayHelloNoFound() throws Exception {
        Assert.assertEquals(restTemplate.getForEntity("/user/sayHello/{id}", String.class,  -1).getBody(), "not found");;
    }

    @Test
    public void testsave() throws Exception {
        HttpHeaders requestHeaders = new HttpHeaders();
        requestHeaders.setContentType(MediaType.APPLICATION_JSON);
        requestHeaders.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
        User user = new User();
        user.setAge(30);
        user.setBirthday(new Date());
        user.setName("jetty");
        HttpEntity<User> request = new HttpEntity<User>(user, requestHeaders);
        Assert.assertNotNull(restTemplate.postForEntity("/user", request, Long.class).getBody());
    }

    @Test
    public void testList() throws Exception {
        Assert.assertTrue(restTemplate.getForEntity("/user/list", List.class).getBody().size() > 0);
    }
}

TestRestTemplate是對RestTemplate進行了包裝.
3.server啓動配置
1)配置文件配置,如:application.properties

server.port=8000
server.context-path=/helloworld

可以安裝spring tools tips插件,配置參數可以提示
這裏寫圖片描述
2)實現接口EmbeddedServletContainerCustomizer

@Override
    public void customize(ConfigurableEmbeddedServletContainer container) {
        container.setPort(8000);
        container.setContextPath("/helloworld");
    }

3)命令行啓動參數配置
java -jar -Dserver.port=8000 helloworld.jar

4.部署方式

1.集成tomcat或jetty通過命令啓動
spring boot默認集成了tomcat,如果使用jetty修改pom,排除tomcat依賴,增加jetty依賴

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>

在使用maven打成jar使用java命令啓動
2.部署到JavaEE容器
1)改啓動類,繼承 SpringBootServletInitializer 並重寫 configure 方法

public class HelloworldApplication extends SpringBootServletInitializer{

    private static final Logger logger = LoggerFactory.getLogger(SpringBootSampleApplication.class);

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(this.getClass());
    }

}

修改pom文件中jar 爲 war

<packaging>war</packaging>

修改pom,排除tomcat插件,同上。打包部署到容器啓動即可。

5.開發調試

springBoot對調試支持很好,使用熱啓動,修改之後可以實時生效,需要修改以下的配置:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
...
<plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                </configuration>
            </plugin>
        </plugins>

該模塊在完整的打包環境下運行的時候會被禁用。

6.使用Linux服務的方式啓動、停止、重啓

1.首先在 pom.xml 中配置插件

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

2.上傳jar包到服務器,假設部署路徑爲 /var/apps/myapp.jar ,使用命令做一個軟連接到 /etc/init.d 目錄,命令:
ln -s /var/apps/myapp.jar /etc/init.d/myapp
3.給jar文件授予可執行權限,命令:
chmod +x myapp.jar
4.我們可以使用service myapp start|stop|restart 來對應用進行啓停了
執行命令後將得到形如 Started|Stopped [PID] 的結果反饋。
默認PID文件路徑:/var/run/appname/appname.pid
默認日誌文件路徑:/var/log/appname.log

5.使用自定義的.conf文件來變更默認配置,方法如下:
在jar包相同路徑下創建一個.conf文件,名稱應該與.jar的名稱相同,如myapp.conf,其內容配置可以如下:

JAVA_HOME=/usr/local/jdk
JAVA_OPTS=-Xmx1024M
LOG_FOLDER=/data/logs/myapp

實例源碼:https://github.com/slimina/springboot-study

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章