SpringBoot的簡單使用

1、創建一個maven工程;(jar
2、導入spring boot相關的依賴
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐web</artifactId>
</dependency>
</dependencies>
3、編寫一個主程序;啓動Spring Boot應用
/*** @SpringBootApplication 來標註一個主程序類,說明這是一個Spring Boot應用 */ @SpringBootApplication public class HelloWorldMainApplication { 
public static void main(String[] args) { 
// Spring應用啓動起來 
SpringApplication.run(HelloWorldMainApplication.class,args); 
    } 
}
4、編寫相關的ControllerService
@Controller public class HelloController { 
@ResponseBody 
@RequestMapping("/hello") 
public String hello(){ return "Hello World!"; } }
5、運行主程序測試
6、簡化部署
<!‐‐ 這個插件,可以將應用打包成一個可執行的jar包;‐‐> 
<build> 
<plugins> 
<plugin> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring‐boot‐maven‐plugin</artifactId> 
</plugin> 
</plugins> 
</build>
6、使用Spring Initializer快速創建Spring Boot項目
1IDEA:使用 Spring Initializer快速創建項目
IDE都支持使用Spring的項目創建嚮導快速創建一個Spring Boot項目;
選擇我們需要的模塊;嚮導會聯網創建Spring Boot項目;
默認生成的Spring Boot項目;
  1. 主程序已經生成好了,我們只需要我們自己的邏輯
  2. resources文件夾中目錄結構
  • static:保存所有的靜態資源; js css images
  • templates:保存所有的模板頁面;(Spring Boot默認jar包使用嵌入式的Tomcat,默認不支持JSP
  • 面);可以使用模板引擎(freemarkerthymeleaf);
  • application.propertiesSpring Boot應用的配置文件;可以修改一些默認設置;

 

SpringBoot使用一個全局的配置文件,配置文件名是固定的;二選一 
  • application.properties
  • application.yml

 

 

2YAML語法:

1、基本語法
k:(空格)v:表示一對鍵值對(空格必須有);
空格的縮進來控制層級關係;只要是左對齊的一列數據,都是同一個層級的
屬性和值也是大小寫敏感;
 
2、值的寫法
字面量:普通的值(數字,字符串,布爾)
k: v:字面直接來寫;
字符串默認不用加上單引號或者雙引號;
"":雙引號;不會轉義字符串裏面的特殊字符;特殊字符會作爲本身想表示的意思
name: "zhangsan \n lisi":輸出;zhangsan 換行 lisi
'':單引號;會轉義特殊字符,特殊字符最終只是一個普通的字符串數據
name: ‘zhangsan \n lisi’:輸出;zhangsan \n lisi
對象、Map(屬性和值)(鍵值對):
k: v:在下一行來寫對象的屬性和值的關係;注意縮進
對象還是k: v的方式
 
 
springboot 啓動會掃描以下位置的application.properties或者application.yml文件作爲Spring boot的默認配置文
–fifile:./confifig/
–fifile:./
–classpath:/confifig/
–classpath:/
優先級由高到底,高優先級的配置會覆蓋低優先級的配置;
SpringBoot會從這四個位置全部加載主配置文件;互補配置
 
我們還可以通過spring.confifig.location來改變默認的配置文件位置
項目打包好以後,我們可以使用命令行參數的形式,啓動項目的時候來指定配置文件的新位置;指定配置文件和默
認加載的這些配置文件共同起作用形成互補配置;
java -jar spring-boot-02-confifig-02-0.0.1-SNAPSHOT.jar --spring.confifig.location=G:/application.properties
 
 
7、外部配置加載順序
SpringBoot也可以從以下位置加載配置; 優先級從高到低;高優先級的配置覆蓋低優先級的配置,所有的配置會
形成互補配置
1.命令行參數
所有的配置都可以在命令行上進行指定
java -jar spring-boot-02-confifig-02-0.0.1-SNAPSHOT.jar --server.port=8087 --server.context-path=/abc
多個配置用空格分開; --配置項=
2.來自java:comp/envJNDI屬性
3.Java系統屬性(System.getProperties()
4.操作系統環境變量
5.RandomValuePropertySource配置的random.*屬性值
jar包外向jar包內進行尋找;
優先加載帶profifile
6.jar包外部的application-{profifile}.propertiesapplication.yml(spring.profifile)配置文件
7.jar包內部的application-{profifile}.propertiesapplication.yml(spring.profifile)配置文件
再來加載不帶profifile
8.jar包外部的application.propertiesapplication.yml(不帶spring.profifile)配置文件
9.jar包內部的application.propertiesapplication.yml(不帶spring.profifile)配置文件
10.@Confifiguration註解類上的@PropertySource
11.通過SpringApplication.setDefaultProperties指定的默認屬性
所有支持的配置加載來源;
 
 
 
 
8、自動配置原理
1、自動配置原理:
1)、SpringBoot啓動的時候加載主配置類,開啓了自動配置功能 @EnableAutoConfifiguration
2)、@EnableAutoConfifiguration 作用:
利用EnableAutoConfifigurationImportSelector給容器中導入一些組件?
可以查看selectImports()方法的內容;
List confifigurations = getCandidateConfifigurations(annotationMetadata, attributes);獲取候選的配置
SpringFactoriesLoader.loadFactoryNames()
掃描所有jar包類路徑下 METAINF/spring.factories
把掃描到的這些文件的內容包裝成properties對象
properties中獲取到EnableAutoConfiguration.class類(類名)對應的值,然後把他們添加在容器
 
3)、每一個自動配置類進行自動配置功能;
4)、以HttpEncodingAutoConfifigurationHttp編碼自動配置)爲例解釋自動配置原理;
@Configuration //表示這是一個配置類,以前編寫的配置文件一樣,也可以給容器中添加組件 @EnableConfigurationProperties(HttpEncodingProperties.class) //啓動指定類的 ConfigurationProperties功能;將配置文件中對應的值和HttpEncodingProperties綁定起來;並把 HttpEncodingProperties加入到ioc容器中 
@ConditionalOnWebApplication //Spring底層@Conditional註解(Spring註解版),根據不同的條件,如果 滿足指定的條件,整個配置類裏面的配置就會生效; 判斷當前應用是否是web應用,如果是,當前配置類生效 @ConditionalOnClass(CharacterEncodingFilter.class) //判斷當前項目有沒有這個類 CharacterEncodingFilter;SpringMVC中進行亂碼解決的過濾器;
 @ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing = true) //判斷配置文件中是否存在某個配置 spring.http.encoding.enabled;如果不存在,判斷也是成立的 
//即使我們配置文件中不配置pring.http.encoding.enabled=true,也是默認生效的; 
public class HttpEncodingAutoConfiguration { 
//他已經和SpringBoot的配置文件映射了 
private final HttpEncodingProperties properties;

//只有一個有參構造器的情況下,參數的值就會從容器中拿 public HttpEncodingAutoConfiguration(HttpEncodingProperties properties) { 
this.properties = properties; }

@Bean //給容器中添加一個組件,這個組件的某些值需要從properties中獲取 @ConditionalOnMissingBean(CharacterEncodingFilter.class) //判斷容器沒有這個組件? 
public CharacterEncodingFilter characterEncodingFilter() { 
CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter(); filter.setEncoding(this.properties.getCharset().name()); filter.setForceRequestEncoding(this.properties.shouldForce(Type.REQUEST)); filter.setForceResponseEncoding(this.properties.shouldForce(Type.RESPONSE)); 
return filter; }
根據當前不同的條件判斷,決定這個配置類是否生效?
一但這個配置類生效;這個配置類就會給容器中添加各種組件;這些組件的屬性是從對應的properties類中獲取
的,這些類裏面的每一個屬性又是和配置文件綁定的;
 
5)、所有在配置文件中能配置的屬性都是在xxxxProperties類中封裝者;配置文件能配置什麼就可以參照某個功
能對應的這個屬性類
@ConfigurationProperties(prefix = "spring.http.encoding") //從配置文件中獲取指定的值和bean的屬 性進行綁定 
public class HttpEncodingProperties { 
public static final Charset DEFAULT_CHARSET = Charset.forName("UTF‐8");
精髓:
1)、SpringBoot啓動會加載大量的自動配置類
2)、我們看我們需要的功能有沒有SpringBoot默認寫好的自動配置類;
3)、我們再來看這個自動配置類中到底配置了哪些組件;(只要我們要用的組件有,我們就不需要再來配置了)
4)、給容器中自動配置類添加組件的時候,會從properties類中獲取某些屬性。我們就可以在配置文件中指定這
些屬性的值;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章