1、SpringBoot官網:springboot.io
2、準備:
JDK:
JAVA_HOME:jdk根目錄
path:jdk根目錄\bin
classpath:.;jdk根目錄\lib
maven:
首先需要下載maven,然後解壓縮
MAVEN_HOME:maven根目錄
path:maven根目錄\bin
配置maven本地倉庫:maven根目錄\conf\setting.xml: <localRepository>D:/mvnrep</localRepository>,首先創建一個mvnrep文件夾。
3、創建一個SpringBoot項目 (在spring.io在官網裏)
生成一個項目,然後解壓,然後只需要在開發工具中引入maven項目。
運行HelloWorldApplication,出現Spring標識和springboot版本號說明spring配好了。
4、目錄結構介紹
寫java代碼的:
resource文件夾下:
static:靜態資源(js css 圖片 音頻)
templates:模板文件(模板引擎freemarker,thymeleaf;默認不支持jsp)
application.properties:配置文件
(1)簡單創建一個接口
運行HelloWorldApplication,運行完後直接在頁面訪問helloWorld
以上項目發現和以前的區別:不用部署tomcat。
(2)配置文件application.properties裏面配置內容:
上面運行的時候項目用的默認端口8080,可以通過該配置文件修改端口號
修改完成後再執行HelloWorldApplication。
特點:(1)springboot內置了tomcat,並且不用打成war再執行
(2)可以在application.properties對端口號等服務端信息進行配置
(3)pom.xml文件
按住Ctrl查看父類
再點入父類,依賴的版本控制
各種各樣的版本號,springboot提供版本號,避免引入jar包時候出現版本衝突。
(4)在HelloWorldApplication類中,@SpringBootApplication註解:
springboot的主配置類。
按住Ctrl進去,該註解包含:
@SpingBootConfiguration,包含@Configuration,表示”配置類“(表示該類是一個配置類,在springboot中加上該註解會自動納入spring容器(一般是加了@Component))
@EnableAutoConfiguration
之前我們在寫程序時候會寫很多的配置文件,比如:spring.xml;mybatisConfig.xml;springmvc.xml,現在發現程序中沒有任何配置文件,就是因爲有@EnableAutoConfiguration這個註解,該註解可以使springboot自動配置。
@EnableAutoConfiguration下面的@AutoConfigurationPackage
包含引入的三方jar包
5、自動裝配原理
(1)在META-INF/spring.factories中幫我們自動裝配,每一個配置是否全部開啓,在什麼時候開啓
我們以一個HttpEncodingAutoConfiguration爲例
緊接着我們找到該包所在的位置:
(2)我們研究一下該類是社麼時候開啓?
打開此類,觀察該源碼發現,@Configuration:標識此類是一個配置類,將此類納入springioc容器
@EnableConfigurationProperties(HttpEncodingProperties.class),通過HttpEncodingProperties將編碼設置爲了UTF_8(即自動裝配爲UTF_8,在HttpEncodingProperties有一個prefix,如果我們要修改默認的編碼,我們就再配置文件application.properties中編寫spring.http.encoding.charset=ISO-8859-1)。
因此,配置文件中的東西都是某一個文件裏的prefix+屬性名。
@ConditionOnProperty當屬性滿足要求時,此條件成立:要求 如果沒有配置spring.http.encoding.enabled=xxx,則成立。
總結:a.即每一個XXAutoConfiguration都有很多條件@ConditionOnXX,當這些條件都滿足時,此配置自動裝配生效(比如以上的設置utf-8)。但是我們可以手工修改自動裝配:用XXXProperties文件中的prefix.屬性名=value。
b.全局配置文件(即application。properties)中的key,來源於某個配置文件中的prefix+屬性名
(3)如何知道spring boot開啓了哪些自動裝配,禁止了哪些自動裝配?
只需要在appliction.properties中加一句 debug=true,然後啓動項目,在console中,有一個positive matches 列表表示spring boot自動開啓裝配,然後把控制檯的運行結果複製到一個記事本中,搜索negative matches列表表示spring boot在此時並沒有啓用的自動裝配。
6、配置文件
(1)作用:spring boot自動配置(約定,比如端口號默認8080,編碼約定utf-8),可以使用配置文件對默認的配置進行修改。
(2)默認的全局配置文件:
application.properties:寫法是 k=v
application.yml:不是一個標記文檔 寫法是:(冒號後面的值前面必須有一個空格,在編寫時要注意縮進,通過垂直對齊指定層次關係)
k:空格v
server:
port: 8888
path: /a/b/c
xml:是一個標記文檔
<server>
<port>8888</port>
<path>/a/b/c</path>
</server> 表示根元素是server端口號是8888,這種寫法是標記文檔
(3)新建一個application.yml文件 直接new--->file-->application.yml
yml除了可以編寫配置文件,還可以給屬性綁定值:
如何將yml文件中的值綁定到實體類中:
測試(需要打印學生信息,需要再學生類中編寫toString方法):
注意:yml中默認可以不寫引號,雙引號會將其中的轉義符進行轉義
另一種寫法:
yml文件的值綁定到實體類另一個註解@Value,@Value註解與yml、properties配置文件沒關係了,它是再屬性上面一個一個註解。
鬆散寫法:比如nickName 它的鬆散寫法是nick-name
7、@PropertySource:默認會加載application.properties和application.yml文件中的數據,如果數據不在那兩個文件中,就要用@PropertySource引入非默認配置文件。
加載conf.properties文件中的數據,但是@PropertySource只能加載properties,不能加載yml
8、@ImportResource
spring boot自動裝配/自動配置
spring等配置文件 默認會被spring boot自動給配置好。
如果自己編寫spring等配置文件,spring boot能否識別? 默認 不能識別,如果需要識別,則需要通過@ImportResource來指定配置文件的路徑。
例子:
執行結果:
若想要spring boot識別spring.xml,在spring boot主配置類中添加@ImportResource註解
執行結果不報錯:
但是不推薦手寫spring等配置文件
配置:xml配置文件,用過註解配置。(編寫一個配置類)
spring boot推薦使用註解方式進行配置:寫類,@Configuration @Bean
例子:
在配置文件中bean中還有個屬性property,以前的編寫xml文件的形式如下,編寫一個Dao類
用配置文件的形式:
利用註解方式:
9、spring boot全局配置文件(AppCondig)中的佔位符表達式
常見的佔位符如下:
(1)隨機數:以上那幾種
(2)引用變量值:在yml中實際引用的是properties中的值
yml中如果name: ${student.user.name2:無名},如果${}中的值不存在,則用後面的無名這個值。
10、多環境的切換(profile)
比如開發一個環境,測試一個環境,實施一個環境,我們可以在這三個環境自由切換。
提供了很多種方式:
(1)通過properties
默認spring boot會讀取application.properties(端口號是8888)
如果有多個我們一般是application-環境名.properties
比如現在我們寫兩個,開發環境:application-dev.properties(8883);測試環境:application-test.properties(8884)。
運行我們可以看到application.properties是主配置文件
如果要選擇一個具體的環境,spring.profiles.active=環境名,比如切換到開發環境:
運行如下:
(2)通過yml
(3)動態切換環境
<1> a.在程序運行時候動態切換環境(通過編譯器)
--spring.profiles.active=環境名
b.將項目打包成jar包,然後再項目的target中找到該jar包,然後打開jar包的文件夾所在位置,然後在文件夾上輸入cmd
<2>通過jvm參數指定
-Dspring.profiles.active=環境名
11、spring boot能夠識別的配置文件的位置
a.內部配置文件
spring boot默認能夠讀取的application.properties和application.yml這兩個文件可以存在於以下四個地方:
在properties中配置項目名稱:
server.servlet.context-path=/boot 瀏覽器訪問的時候要加上這個項目名字然後再加上路徑
b.外部配置文件(用於補救,不用修改原項目,追加一個外部配置文件)
在program arguments中寫:--spring.config.location=外部文件的位置
如果項目我們已經打包成jar包,然後現在需要將裏面的端口號修改一下,不用解壓、重新打包,我們可以在外部寫一個配置文件,jar調用即可,使用命令行的方式。
c.項目運行參數(補救,如果大量配置文件需要改,用第二種方法,如果個別的,用這個)
比如修改端口號:
program arguments,直接寫--server.port=XXX 如果還有第二個參數需要改,就空格然後第二個參數。
總結:多個地方配置時,如果衝突,優先級:命令行參數(調用外部配置文件>項目運行參數)>內部文件(application.properties和application.yml,如果兩個也同時存在,則application.properties優先)
12、spring boot對日誌的支持
日誌框架:jboss-logging、logback、log4j、log4j2、slf4j、JUL.....
spring boot默認選用slf4j和logback,spring boot默認幫我們配置好了日誌,直接使用。
用slf4:
(1) 控制檯中只能輸出info、warn、error的信息,因爲spring boot的默認日誌級別是INFO ,我們也可以給它自定義日誌級別。
日誌級別:TRACE<DEBUG<INFO<WARN<ERROR<FATAL<OFF
自定義日誌級別:(通過配置文件)
以下配置後,控制檯只能打印出warn以及warn以後的信息。
主配置文件:
日誌信息我們想要保存在一個文件裏面,我們可以通過配置文件進行設置:
springboot相對於項目的根目錄
我們也可以把日誌文件當到別的路徑下面:
絕對路徑
將日誌文件放到一個文件夾裏面:
默認的日誌名稱爲spring.log
(2)我們也可以修改日誌文件裏面的顯示格式
指定日誌顯示格式:
a.日誌顯示在console
後面部分是固定的:%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
%d:日期時間
%thread:線程名
%-5level:顯示日誌級別,-5表示從左顯示5個字符寬度
%logger{36}:設置日誌的長度
%msg:日誌消息
%n:回車
b.日誌顯示在文件中
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
默認的日誌格式是在jar包中,相應包的xml文件中進行配置。‘
日誌的具體使用貴方:看官方文檔說明:首先進入spring.io官網--->spring boot--->learn-->logging
13、spring boot開發web項目(靜態資源 html css js)
---新建項目
WebMvcAutoConfiguration類源碼解讀。
14、引入模板引擎thymeleaf
就是將一個頁面分爲兩部分網頁+數據,如下圖,然後用model.調用方法進行頁面和數據的組合
引入thymeleaf:spring.io官網查詢thymeleaf依賴
15、使用thymeleaf
找到自動裝配的包,在它下面找到thymeleaf
查看它的默認配置