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。
-
<dependency>
-
<groupId>org.springframework.boot</groupId>
-
<artifactId>spring-boot-starter-web</artifactId>
-
</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方法修改為:
-
public static void main(String[] args) {
-
//SpringApplication.run(DemoApplication.class, args);
-
SpringApplication app = new SpringApplication(DemoApplication.class);
-
app.setShowbanner(false);
-
app.run(args);
-
}
或者fluent API修改為
-
new SpringApplicationBuilder(DemoApplication.class)
-
.showBanner(false)
-
.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加入:
-
#不配置預設為8080埠
-
server.port=9090
-
#將預設的訪問路徑"/"修改為"/helloboot"
-
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:
-
<dependency>
-
<groupId>org.springframework.boot</groupId>
-
<artifactId>spring-boot-starter-web</artifactId>
-
</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 專案