1. 程式人生 > >Spring boot核心技術

Spring boot核心技術

Spring 核心功能
1. 獨立執行的spring 專案

Spring Boot可以以jar的形式獨立執行,執行一個Spring Boot專案只需要通過 java -jar xxx.jar命令來執行。

2. 內嵌servlet容器

Spring Boot可以選擇內嵌Tomcat,Jetty或者Udertow,這樣我們不需要以war的形式部署專案。

3. 提供starter簡化maven配置 
Spring 提供一系列starter pom來簡化maven的依賴載入。比如加入spring-boot-starter-web。

 
  1. <dependency>

  2. <groupId>org.springframework.boot</groupId>

  3. <artifactId>spring-boot-starter-web</artifactId>

  4. </dependency>

Spring Boot會自動加入Tomcat和Spring MVC的依賴。

4.自動配置Spring

Spring boot會根據在類路徑中的jar,類。為jar包裡的類自動配置bean,這樣極大減少我們要是用的配置。當然並不是所有的場景都是這樣,有時候還是需要去自定義配置的。

5.準生產的應用監控

Spring Boot提供了基於http,ssh,telnet對執行時的專案進行監控。

6,無程式碼生成和xml配置

Spring4.x提倡java配置和註解配置組合,二Spring Boot不需要任何xml即可實現spring配置。

7,Spring boot的優點 

è¿éåå¾çæè¿°

Spring 配置
1.基本配置

(1),入口類和@SpringBootApplication

SpringBoot通常有一個名為*Application.java的入口類,入口類裡面有一個main方法,這個main方法其實就是一個標準的Java應用的main方法,也是啟動SpringBoot的方法。

@SpringBootApplication是SpringBoot的核心註解,它是一個核心註解,原始碼如下: 
è¿éåå¾çæè¿°

其中@EnableAutoconfiguration讓Spring Boot根據類路徑中的jar包依賴為當前專案進行自動配置。

例如添加了spring-boot-starter-web依賴,會自動新增Tomcat和Spring MVC的依賴,那麼Spring Boot會對Tomcat和SpringMVC進行自動配置。

例如添加了spring-boot-starter-data-jpa依賴,SpringBoot會自動進行JPA相關的配置。 
SpringBoot會自動掃描@SpringBootApplication所在類的同級包以及下級包裡的bean.

(2)關閉特定的自動配置

關閉特定的自動配置使用@SpringBootApplication註解的exclude引數,例如
 

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
  

3)定製Banner

1.1 修改banner 
(1)當我們啟動SpringBoot時有一個預設圖案。

è¿éåå¾çæè¿°

(2)我們在src/main/resources下新建一個banner.txt檔案. 
(3)通過http://patorjk.com/software/taag/網站生成字元,如輸入shabi,將生成的字元圖案複製到banner.txt中. 
(4)重新執行SpringBoot專案,啟動時圖案就改變了。 
è¿éåå¾çæè¿°

1.2關閉Banner

main方法修改為:

 
  1. public static void main(String[] args) {

  2. //SpringApplication.run(DemoApplication.class, args);

  3. SpringApplication app = new SpringApplication(DemoApplication.class);

  4. app.setShowbanner(false);

  5. app.run(args);

  6. }

或者fluent API修改為

 
  1. new SpringApplicationBuilder(DemoApplication.class)

  2. .showBanner(false)

  3. .run(args);

高版本的Spring Boot沒有app.setShowbanner(false);方法,我目使用1.5.9版本。可以在application.properties中配置:

spring.main.banner-mode=off
  

2,Spring Boot的配置檔案

Spring Boot使用一個全域性的配置檔案application.properties或者application.yml放置在src/main/resources檔案下或類路徑的/config下。

Spring 不僅支援常規的.properties配置檔案,還支援yaml的配置檔案,yaml是以資料為中心的語言,在配置資料的時候具有面向物件特徵。

Spring Boot的全域性配置檔案的作用是對一些預設配置的配置值進行修改。

(1)簡單示例

將tamcat預設的8080埠改為9090,並將預設的訪問路徑”/”修改為”/helloboot”; 
在application.properties加入:
 

 
  1. #不配置預設為8080埠

  2. server.port=9090

  3. #將預設的訪問路徑"/"修改為"/helloboot"

  4. server.contextPath=/helloboot

 

說明:contextPath,context-path通用,這裡不介紹application.yml配置。

3.starter pom

SpringBoot為我們提供了簡化企業級開發絕大多數場景的starter pom,只要使用了場景需要的starter pom,SpringBoot會自動配置bean。

比如之前說的添加了spring-boot-starter-web依賴,會自動新增Tomcat和Spring MVC的依賴,那麼Spring Boot會對Tomcat和SpringMVC進行自動配置。

pom.xml:

 
  1. <dependency>

  2. <groupId>org.springframework.boot</groupId>

  3. <artifactId>spring-boot-starter-web</artifactId>

  4. </dependency>

(3.1) 官方提供的starter pom 

è¿éåå¾çæè¿°

 

è¿éåå¾çæè¿°

 

è¿éåå¾çæè¿°

 

(3.2)第三方starter pom

è¿éåå¾çæè¿°

配置方式 
在pom.xml的project標籤中加入:

<repositories>  

<repository>  
<id>唯一id</id>  
<name>名稱</name>  
<url>url遠端連結</url>  
</repository> 
<repository>

<id>lilyproject</id>  
<name>Lily Maven repository</name>  
<url>http://lilyproject.org/maven/maven2/deploy/</url>  
</repository> 

</repositories> 

(3.3)使用xml配置

SpringBoot提倡零配置,即無XML配置,但是在實際開發過程中,可能一些特殊的要求你必須使用xml配置,這時我們可以使用SpringBoot提供的@ImportResource來載入xml配置。 
例如:

@ImportResource({"classpath:some-content.xml","classpath:another-content.xml"})
1
4,外部配置檔案

SpringBoot允許使用properties檔案,yaml檔案,和命令引數作為外部配置。

(4.1)命令列引數配置

SpringBoot是基於jar執行的,打成jar的程式可以通過 下面命令直接執行的。

java -jar XXX.jar
1
可以通過以下命令修改tomcat埠:

java -jar XXX.jar --server.port=9090
1
(4.2)常規屬性配置

在常規的Spring環境下,注入properties檔案裡面的值的方式,通過@propertySource指明檔案位置,然後通過@Value注入值。 
在SpringBoot專案中,我們只需要在application.properties定義屬性,直接使用@Value注入。

例項

在以前的基礎上在application.properties檔案增加:

user.myname=bobo
user.age=18

@Value注入

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloComtroller {
       @Value("${user.myname}")
       private String name;
       @Value("${user.age}")
       private Integer age;

      @RequestMapping("/")
      public String helloword(){

       return "我叫"+name+",今年"+age+"歲!";

      }
}

執行結果:
è¿éåå¾çæè¿°


說明:這裡如果定義user.name是獲取系統的名稱,後來改為myname。

(4.3)類安全的配置

以上使用@Value注入每個配置顯得格外的麻煩,因為我們的配置通常有很多個,像那樣每個配置就要注入多次。 
SpringBoot提供了基於型別安全的配置方式,通過@ConfiggurationProperties將properties屬性和一個bean及其屬性關聯,從而實現型別安全的配置。 
基於以前的application.properties檔案:

user.myname=bobo
user.age=18

當然我們也可以新建properties檔案,通過@ConfiggurationProperties的屬性locations指定properties的位置,且需要在入口類上配置。

型別安全的bean如下:

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

@Component
@ConfigurationProperties(prefix="user")
public class UserSetting {
       private String myname;
       private Integer age;
    public String getMyname() {
        return myname;
    }
    public void setMyname(String myname) {
        this.myname = myname;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }

}

程式碼解釋: 
通過@ConfigurationProperties載入檔案的配置,prefix屬性指定配置時的字首,locations指定配置檔案路徑,本例將配置放在application.properties檔案中,不需要指定位置。

若新建了properties檔案,則需要在指定位置。 
SpringBoot1.5之前可以通過@ConfigurationProperties的locations屬性指定。

@ConfigurationProperties(prefix="user",locations="classpath:config/xxxxx.properties")

SpringBoot1.5之後使用:

@PropertySource("classpath:config/xxxxx.properties")
/*@PropertySource(value={""})*/

檢查程式碼:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.example.demo.entity.UserSetting;

@RestController
public class HelloComtroller {

    @Autowired
      private UserSetting userSetting;

      @RequestMapping("/")
      public String helloword(){

       return "我叫"+userSetting.getMyname()+",今年"+userSetting.getAge()+"歲!";

      }
}

程式碼解釋: 
使用@Autowired可以直接注入該配置。

(4.4)日誌配置

SpringBoot支援java Util Logging,Log4j,Log4j2和Logback作為日誌框架。 
SpringBoot預設使用Logback作為日誌框架。

配置日誌級別:

#預設的Logback日誌框架
logging.file=E:\\springBootWork\\mylog

配置日誌檔案,格式為logging.level.包名=級別

logging.level.org.springframework.web=DEBUG

(4.5)Profile配置

profile是Spring用來針對不同的環境對不同的配置提供支援,全域性profile使用application-{profile}.properties,如application-prod.properties. 
通過在application.properties檔案中設定spring.profils.active=prod來指定活動的profile。

例項:

下面做一個簡單的演示,如我們分為生產環境和開發環境,生產環境下埠為8088,開發環境埠為8888. 
新建 
application-dev.properties檔案中加入

server.port=8888

application-prod.properties檔案中加入

server.port=8088

application.properties配置:

spring.profiles.active=prod

執行專案

Spring 核心功能
1. 獨立執行的spring 專案