1. 程式人生 > >Spring Boot學習筆記(一)——專案構建-使用-部署

Spring Boot學習筆記(一)——專案構建-使用-部署

Spring Boot簡介

很榮幸剛開始學習java框架就接觸到了spring boot,並得到大神的指點,通過查閱資料以及教程學會在實際專案中去使用它,相對於其他框架只有一個字來形容 - “爽”。最近也看了一些資料及招聘資訊,用發現彈簧啟動的企業越來越多,毋庸置疑,這將會成為下一代的主流框架。春天啟動可以說是用用SpringMVC的升級版,去掉了繁瑣的配置,可以很容易上手,其最爽的就是他的自動化配置,用了之後再也不想回到以前了,誰用誰知道。網上有很多版本用法但好多都不是我想要的,因此博主再次將其總結記錄下來,希望日後可以複習以及給需要的朋友一些幫助,再次宣告博主也是學習者所以只能按自己的理解來寫

,若有不對之處請指教,日後有更深的理解會繼續糾正,本篇先專案的構建-使用-部署從頭到尾進行簡單的講解。

Spring  Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。通過這種方式,Boot致力於在蓬勃發展的快速應用開發領域(rapid application development)成為領導者。

Spring boot的特點

1.建立獨立的Spring應用程式
2.嵌入的Tomcat的,無需部署WAR檔案
3.簡化的Maven配置
4.自動配置Spring
5.提供生產就緒型功能,如指標,健康檢查和外部配置


6.絕對沒有程式碼生成和對XML沒有要求配置

Spring boot的優點

spring boot可以支援你快速的開發出restful風格的微服務架構

自動化確實方便,做微服務再合適不過了,單一罐包部署和管理都非常方便。只要系統架構設計合理,大型專案也能用,加上nginx的的負載均衡,輕鬆實現橫向擴充套件

spring boot要解決的問題,精簡配置是一方面,另外一方面是如何方便的讓春生態圈和其他工具鏈整合(比如Redis,電子郵件,elasticsearch)

專案構建
spring boot的構造方式有很多種,具體方法大家可以自行了解,這裡以idea為例構建maven專案(eclipse的話推薦使用STS構造),構建過程這裡省略直接下一步即可
很簡單,構建完成後的目錄結構如圖所示:


這裡專案結構是我個人部落格專案,對此我做簡單介紹:
  • src / main / java:主程式入口BolgApplication,Spring引導內嵌Tomcat伺服器,可以直接通過執行該類來啟動應用。
  • 的src / main /資源:配置資原始檔目錄,由於我們是網路專案,因此這裡存放一些靜態資原始檔,靜態下存放圖片,JS,CSS等,模板下存放JSP,HTML等模板檢視檔案等.application.yml是配置檔案,為原本application.properties中,這裡推薦使用YML格式,具體使用可以查閱瞭解,這裡可以配置,訪問埠,資料庫連線資訊等。
  • 的src /測試/:單元測試目錄,通過Junit4實現專案的單元測試
POM依賴
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-test</artifactId>
	<scope>test</scope>
</dependency>

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
  • spring-boot-starter-web:全棧web開發模組,包含嵌入式Tomcat,Spring MVC。
  • spring-boot-starter-thymeleaf:thymeleaf檢視模板模組,相當於JSP,很好的支援了前後端分離開發。
  • 彈簧引導啟動測試:通用測試模組,包含了JUnit,Hamcrest,的Mockito。
實現RESTful API
在Spring Boot中建立一個restful API的實現程式碼同SpringMVC應用一樣,只是不需要像Spring MVC那樣做很多配置,這就是自動配置的爽快之處,下面我們在controller下新建一個HelloController類內容如下所示:
包com.xiaoma.controller;

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

/**
 * Created by mj on 2018/1/21.
 */
@RestController
public class HelloController {

    @RequestMapping("hello")
    public String sayHello(){
        return "Hello World";
    }
}
@RestController 可以使所有的方法返回都為資料,加這個註解可以不用在每個方法前加@ResponseBody註解啟動BolgApplication類,該類的內容結構為
package com.xiaoma;

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

@SpringBootApplication
public class BlogApplication {

	public static void main(String[] args) {
		SpringApplication.run(BlogApplication.class, args);
	}
}
@SpringBootApplication 註解等於@Configuration,@EnableAutoConfiguration,@ComponentScan三個註解的合併,同時提供了Spring配置,自動化配置,自動掃描的功能,由此可看到Spring Boot的好處了吧,一切Spring配置一個註解就可搞定,內建Tomcat伺服器直接啟動main方法即可執行Spring Boot程式。注意:該啟動類必須放在所有包的最外層,不然無法掃描到專案的其他類。

Spring Boot使用thymeleaf模板
thymeleaf檢視模板類似於jsp、velocity、freemarker等可以作為web頁面的檢視解析,Spring Boot對其有很好的支援,可以完全徹底的進行前後端分離開發,由於以.html字尾命名,同時也可以像開啟html檔案一樣開啟,這也是現在以及將來的主流開發模式。
  • 開啟src/main/resources下的application.yml裡面新增如下內容
#設定訪問埠
server:
  port: 8080   
  context-path: /
spring:
  #設定執行環境
  profiles:
    active: dev
  #環境域名
#  domain: xiaomablog.com

  #檢視模型
  thymeleaf:
    cache: false
    mode: LEGACYHTML5
    prefix: classpath:/templates/
    suffix: .html
    encoding: UTF-8
    content-type: text/html
    check-template-location: true
其中port 可以修改Tomcat訪問埠號,active可以設定開發環境,實際專案中有開發、線上、測試三個環境,只需要新增application-prod.yml、application-dev.yml、application-test.yml 配置檔案即可,裡面配置各環境的配置,然後在application.yml裡修改active為prod、dev、test即可切換環境
  • src/main/resources下的templates下新建index.html檔案,內容為:
<!DOCTYPE html>
<html lang="zh-CN">

<body>
<div>
	welcome to Spring Boot
</div>
</body>

</html>
  • 修改HelloController為:
package com.xiaoma.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * Created by mj on 2018/1/21.
 */
@Controller
public class HelloController {

    @RequestMapping("hello")
    public String sayHello(){
        return "index";
    }
}
即可看到如圖所示:
Spring Boot自定義引數
除了在Spring Boot的配置檔案中設定各模組的預定義配置引數外,也可以定義一些我們需要的自定義引數,比如我們在application.yml裡新增如下配置:
book:
  name: Spring
  author: Boot
然後修改HelloController為:

@RestController
public class HelloController {

    @Value("${book.name}")
    private String name;
    @Value("${book.author}")
    private String author;


    @RequestMapping("hello")
    public String sayHello(){

        return name+author;
    }
}
@Value即可獲取我們在配置檔案中自定義的屬性值賦予兩個變數當我們有很多配置屬性時,我們會建立一個類,並將屬性值賦給類的屬性,比如建立一個Book類:
package com.xiaoma.entity.po;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * Created by mj on 2018/1/21.
 */
@Component
@ConfigurationProperties(prefix = "book")
public class Book {

    private String name;
    private String author;

省略了getter setter....

}
@ConfigurationProperties註解可以獲取application.yml配置檔案中以book為字首的屬性值然後修改HelloController為:
package com.xiaoma.controller;

import com.xiaoma.entity.po.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Created by mj on 2018/1/21.
 */
@RestController
public class HelloController {

    @Autowired
    Book book;

    @RequestMapping("hello")
    public Book sayHello(){

        return book;
    }
}
即可看到{"author":"Boot","name":"Spring"}資料如果想引入自定義配置檔案的內容可以在實體類上再加@Configuration 和@PropertySource(value = "classpath:test.properties)來指定那個配置檔案
Spring Boot部署
當完成一個專案後我們需要將其釋出到伺服器上,由於Spring Boot內建Tomcat容器因此釋出有兩個方式,一種是使用內建Tomcat容器以jar包形式執行,另一種是和我們平常普通專案一樣以war包形式執行,下面就其兩種方式進行講解
  • 以jar包方式部署Spring Boot專案
由於內建Tomcat容器所以此方法很簡單,進入專案目錄,使用 mvn clean package打包,完成後會在target目錄下生成一個jar檔案,然後執行 java -jar 加上jar包檔名即可完成部署,是不是很簡單啊。
  • 以war包方式部署Spring Boot專案
修改啟動類,繼承 SpringBootServletInitializer 並重寫 configure 方法
package com.xiaoma;

import com.xiaoma.configuration.log.GwsLogger;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;

@SpringBootApplication
public class BlogApplication extends SpringBootServletInitializer {

	public static void main(String[] args) {
		SpringApplication.run(BlogApplication.class, args);
		System.out.println("========================================xiaomage blog server is started!");
		GwsLogger.info("xiaomage blog server is started!");
	}
	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
		return builder.sources(this.getClass());
	}
}
修改pom檔案中jar為war
<!--<packaging>jar</packaging>-->
<packaging>war</packaging>
修改pom檔案中排除Tomcat外掛
<dependency>  
	<groupId>org.springframework.boot</groupId>  
	<artifactId>spring-boot-starter-web</artifactId>  
	<!-- 如果在使用自帶tomcat請註釋下面,如果使用第三方tomcat不要註釋下面 -->  
	<exclusions>    
		<exclusion>    
			<groupId>org.springframework.boot</groupId>    
			<artifactId>spring-boot-starter-tomcat</artifactId>    
		</exclusion>    
	 </exclusions>   
</dependency>
進入專案目錄,使用mvn clean package打包,完成後會在目標下生成一個war檔案,然後像普通專案一樣扔到自己Tomcat的WebApp目錄下即可。至此有關Spring Boot的構建使用到部署已經完成了,怎麼樣是不是很簡單,當然這只是簡單的操作,不過很變不離其中,小小的應用已經包含了很多我們普通專案需要做的東西,希望志同道合的朋友一起學習一起研究,有不對的地方也希望多多指正,謝謝!