一:SpringBoot的啟動
1. 繼承spring-boot-starter-parent項目
2. 導入spring-boot-dependencies項目依賴
二:Spring Boot 主類及目錄結構介紹
Spring Boot 與傳統項目最大的區別是,傳統項目都是打成 WAR 包部署到服務器上面,需要額外的 Servlet 容器, 而 Spring Boot 則可以直接打成 jar 包,並內置集成了 Servlet 容器,通過命令 java -jar xx.jar
則可以直接運行,不需要獨立的 Servlet 容器。
主入口類:
在主入口類上加上 @SpringBootApplication
注解來開啟 Spring Boot 的各項能力,如自動配置、組件掃描等。
這里要說明一下的就是,@SpringBootApplication是Spring Boot的核心注解,主要組合包含了以下3個注解:
@SpringBootConfiguration:組合了@Configuration注解,實現配置文件的功能。用來代替 applicationContext.xml 配置文件,所有這個配置文件里面能做到的事情都可以通過這個注解所在類來進行注冊。
@EnableAutoConfiguration:打開自動配置的功能。
@ComponentScan:Spring組件掃描。用來代替配置文件中的 component-scan
配置,開啟組件掃描,即自動掃描包路徑下的 @Component
注解進行注冊 bean 實例到 context 中。
如果你不想這么做,你也可以充分利用 @EnableAutoConfiguration
和@ComponentScan
注解自定義你的行為,不過這不是推薦的做法。
Starter啟動器
Starters包含了一系列可以集成到應用里面的依賴包,你可以一站式集成Spring及其他技術,而不需要到處找示例代碼和依賴包。
Spring Boot官方的啟動器都是以 spring-boot-starter-
命名的,代表了一個特定的應用類型。
第三方的啟動器不能以spring-boot開頭命名,它們都被Spring Boot官方保留。一般一個第三方的應該這樣命名,像mybatis的 mybatis-spring-boot-starter
。
介紹幾種常見的啟動器
啟動器名稱 | 功能描述 |
spring-boot-starter | 包含自動配置、日志、YAML的支持。 |
spring-boot-starter-web | 使用Spring MVC構建web 工程,包含restful,默認使用Tomcat容器。 |
spring-boot-starter-test |
|
spring-boot-starter-actuator | 提供生產環境特性,能監控管理應用。 |
spring-boot-starter-json | 提供對JSON的讀寫支持。 |
spring-boot-starter-logging | 默認的日志啟動器,默認使用Logback。 |
三:配置文件
Spring Boot有兩種類型的配置文件,application和bootstrap文件。Spring Boot會自動加載classpath目前下的這兩個文件,文件格式為properties或者yml格式。
application配置文件是應用級別的,是當前應用的配置文件。
bootstrap配置文件是系統級別的,用來加載外部配置,如配置中心的配置信息,也可以用來定義系統不會變化的屬性。bootstatp文件的加載先於application文件。
開發環境配置(Profile):
Spring Boot可以對不同環境來讀取不同的配置文件。
假如有開發、測試、生產三個不同的環境,需要定義三個不同環境下的配置。
建立三個環境下的配置文件(以properties文件為例):
applcation.properties
applcation-dev.properties :開發環境
applcation-test.properties:測試環境
applcation-prod.properties:生產環境
然后在applcation.properties文件中指定當前的環境spring.profiles.active=test,這時候讀取的就是application-test.properties文件。
代碼中讀取配置文件內容:
讀取application文件
在application.yml或者properties文件中添加:
info.address=USA info.company=Spring info.degree=high
1:使用@Value注解讀取方式
2:使用@ConfigurationProperties注解讀取方式
3:讀取指定文件
如果使用的不是application.yml或者application.properties文件,則可以用 @PropertySource 注解標注,其他還是使用上面兩個注解配置
如:資源目錄下建立config/db-config.properties:
則:
@PropertySource(value ={"config/db-config.properties"})
注意的是 @PropertySource 不支持 yml 文件讀取
4:加載順序
三:Spring Boot Server容器
參數配置:
server.xx開頭的是所有servlet容器通用的配置,server.tomcat.xx開頭的是tomcat特有的參數
spring-boot-starter-web自動攜帶了tomcat依賴,但也可以替換成jetty和undertow,下面是一個替換jetty的示例。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <!-- Exclude the Tomcat dependency --> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <!-- Use Jetty instead --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency>
啟動圖案
banner
圖案定制網站http://patorjk.com
四:Spring Boot 整合Thymeleaf 模板引擎
引入依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
查看參數源碼:
private static final Charset DEFAULT_ENCODING = Charset.forName("UTF-8"); private static final MimeType DEFAULT_CONTENT_TYPE = MimeType.valueOf("text/html"); public static final String DEFAULT_PREFIX = "classpath:/templates/"; public static final String DEFAULT_SUFFIX = ".html";
默認的編碼是:UTF-8
默認的類型是:text/html
默認的模板文件目錄是:classpath:/templates/
默認的模板文件后綴是:.html
這些參數都可以通過在application配置文件中指定 spring.thymeleaf.xx
進行更改,更多可參考該參數類。
使用
知道了自動配置的原理,所以我們可以知道怎么做了。
一、在resources目錄下創建templates目錄。
二、在templates目錄下創建.html模板文件。
三、使用模板:
1、模板文件頭部使用 <html xmlns:th="http://www.thymeleaf.org">
定義。
2、html標簽上使用 th:
開頭標識作為前綴。
3、通過 @{}
引入web靜態文件。
<link rel="stylesheet" th:href="@{/css/jquery.min.css}"/>
4、訪問數據
訪問springmvc中的model數據: ${user.name}
,訪問更多不同對象的數據請點擊參考官方定義。
六:單元測試
添加 Maven 依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <version>1.5.10.RELEASE</version> <scope>test</scope> </dependency>
開發只要使用 spring-boot-starter-test
啟動器就能引入以下Spring Boot 測試模塊
spring-boot-test:支持測試的核心內容。
spring-boot-test-autoconfigure:支持測試的自動化配置。
還能引入一些其他一些有用的類庫,具體如下所示:
JUnit:Java 應用程序單元測試標准類庫。
Spring Test & Spring Boot Test:Spring Boot 應用程序功能集成化測試支持。
AssertJ:一個輕量級的斷言類庫。
Hamcrest:一個對象匹配器類庫。
Mockito:一個Java Mock測試框架,默認支付 1.x,可以修改為 2.x。
JSONassert:一個用於JSON的斷言庫。
JsonPath:一個JSON操作類庫。
使用
要讓一個普通類變成一個單元測試類只需要在類名上加入 @SpringBootTest 和@RunWith(SpringRunner.class) 兩個注釋即可。
在測試方法上加上 @Test 注釋。如果測試需要做 REST 調用,可以 @Autowire 一個 TestRestTemplate。
七:日志集成
使用starters啟動器時,Spring Boot將使用Logback作為默認日志框架。spring-boot-starter啟動器包含spring-boot-starter-logging啟動器並集成了slf4j日志抽象及Logback日志框架。
既然默認自帶了Logback框架,Logback也是最優秀的日志框架,往資源目錄下創建一個logback-spring.xml即可,下面是一個參考配置文件。

1 <?xml version="1.0" encoding="UTF-8"?> 2 3 4 <configuration debug="false"> 5 6 7 <springProperty scope="context" name="APP_NAME" source="spring.application.name"/> 8 9 10 <springProperty scope="context" name="APP_PORT" source="server.port"/> 11 12 13 <springProperty scope="context" name="DEFAULT_APP_PORT" source="spring.application.port"/> 14 15 16 <property name="OS_NAME" value="${os.name}"/> 17 18 19 <if condition='property("OS_NAME").contains("Windows")'> 20 21 22 <then> 23 24 25 <property name="LOG_PATH" value="${LOG_PATH:-E:/logs}" /> 26 27 28 </then> 29 30 31 <else> 32 33 34 <property name="LOG_PATH" value="${LOG_PATH:-/log}" /> 35 36 37 </else> 38 39 40 </if> 41 42 43 <property name="LOG_DIR" value="${APP_NAME:-system}" /> 44 45 46 <property name="APP_PORT" value="${APP_PORT:-${DEFAULT_APP_PORT:-0}}" /> 47 48 49 <if condition='!property("APP_PORT").equals("0")'> 50 51 52 <then> 53 54 55 <property name="LOG_DIR" value="${LOG_DIR}-${APP_PORT}" /> 56 57 58 </then> 59 60 61 </if> 62 63 64 <!-- 控制台輸出 --> 65 66 67 <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 68 69 70 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 71 72 73 <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度,%msg:日志消息,%n是換行符 --> 74 75 76 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> 77 78 79 </encoder> 80 81 82 </appender> 83 84 85 <!-- 按照每天生成日志文件 --> 86 87 88 <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 89 90 91 <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 92 93 94 <level>INFO</level> 95 96 97 </filter> 98 99 100 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 101 102 103 <!--日志文件輸出的文件名 --> 104 105 106 <FileNamePattern>${LOG_PATH}/${LOG_DIR}/info.log.%d{yyyy-MM-dd}.log</FileNamePattern> 107 108 109 <!--日志文件保留天數 --> 110 111 112 <MaxHistory>30</MaxHistory> 113 114 115 </rollingPolicy> 116 117 118 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 119 120 121 <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符 --> 122 123 124 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> 125 126 127 </encoder> 128 129 130 <!--日志文件最大的大小 --> 131 132 133 <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 134 135 136 <MaxFileSize>10MB</MaxFileSize> 137 138 139 </triggeringPolicy> 140 141 142 </appender> 143 144 145 <!-- 按照每天生成日志文件 error級別 --> 146 147 148 <appender name="FILE-ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> 149 150 151 <filter class="ch.qos.logback.classic.filter.LevelFilter"> 152 153 154 <level>ERROR</level> 155 156 157 <onMatch>ACCEPT</onMatch> 158 159 160 <onMismatch>DENY</onMismatch> 161 162 163 </filter> 164 165 166 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 167 168 169 <!--日志文件輸出的文件名 --> 170 171 172 <FileNamePattern>${LOG_PATH}/${LOG_DIR}/error.log.%d{yyyy-MM-dd}.log</FileNamePattern> 173 174 175 <!--日志文件保留天數 --> 176 177 178 <MaxHistory>30</MaxHistory> 179 180 181 </rollingPolicy> 182 183 184 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 185 186 187 <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符 --> 188 189 190 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> 191 192 193 </encoder> 194 195 196 <!--日志文件最大的大小 --> 197 198 199 <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 200 201 202 <MaxFileSize>10MB</MaxFileSize> 203 204 205 </triggeringPolicy> 206 207 208 </appender> 209 210 211 <!--myibatis log configure --> 212 213 214 <logger name="com.apache.ibatis" level="TRACE" /> 215 216 217 <logger name="java.sql.Connection" level="DEBUG" /> 218 219 220 <logger name="java.sql.Statement" level="DEBUG" /> 221 222 223 <logger name="java.sql.PreparedStatement" level="DEBUG" /> 224 225 226 <!-- 日志輸出級別 --> 227 228 229 <root level="INFO"> 230 231 232 <appender-ref ref="STDOUT" /> 233 234 235 <appender-ref ref="FILE" /> 236 237 238 <appender-ref ref="FILE-ERROR" /> 239 240 241 </root> 242 243 244 </configuration>
八:啟動全過程解析
圖片來自(https://blog.csdn.net/Growing_stu/article/details/82585817)