01.Spring Boot 實戰~認識Spring Boot
SpringBoot
Spring Boot 是一個框架,一種全新的編程規範,他的產生簡化了框架的使用,所謂簡化是指簡化了 Spring 衆多框架中所需的大量且繁瑣的配置文件,所以 SpringBoot 是一個服務於框架的框架,服務範圍是簡化配置文件。所以從本質上來說,SpringBoot 其實就是 Spring 框架的另一種表現形式。
使用 SpringBoot 可以創建獨立的 Spring 應用程序
在Spring Boot中直接嵌入了Tomcat、 Jetty、 Undertow等Web容器, 所以在使用SpringBoot 做 Web 開發時不需要部署 WAR 文件。通過提供自己的啓動器(Starter)依賴,簡化項目構建配置 ,儘量的自動配置 Spring 和第三方庫,提供了生產就緒特徵,如:度量指標,運行狀況檢查和外部化配置,絕對沒有代碼生成,也不需要 XML 配置文件
SpringBoot本質是Spring Framework,Spring Framework主要作用就是整合其他技術。所以學習Spring Boot就是在學習如何整合其他技術。
Spring Boot 版本
SNAPSHOT : 開發版。
CURRENT:最新版,不一定穩定。
GA:GeneralAvailability,正式發佈的版本。
通過IDEA Maven創建SpringBoot項目
關於Maven的使用可以點擊這裏導入依賴
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.alvin</groupId>
<artifactId>Spring Boot Study</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>Spring Boot Study Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<!-- SpringBoot 的父級依賴,只有繼承它項目纔是 Spring Boot 項目
spring-boot-starter-parent 是一個特殊的 starter,
它用來提供相關的 Maven 默認依賴。
使用它之後,常用的包依賴可以省去 version 標籤。
-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
</parent>
<!--
啓動器依賴
-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!--
spring-boot-maven-plugin 插件是將 springboot 的應用程序打包成 jar 包的插件。
將所有 應用啓動運行所需要的 jar 包都包含進來,從邏輯上將具備了獨立運行的條件。
當運行"mvn package"進行打包後,使用"java-jar"命令就可以直接運行。
-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
啓動類
啓動類在啓動時會做註解掃描(@Controller、@Service、@Repository......),掃描 位置爲同包或者子包下的註解,所以啓動類的位置應放於包的根下。
啓動類與啓動器的區別:
啓動類表示項目的啓動入口
啓動器表示 jar 包的座標
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//啓動類必須要有這個註解!
@SpringBootApplication
public class SpringBootDemoApplication {
public static void main(String[] args) {
//必須要通過SpringApplication下的靜態方法run
//第一個參數是啓動類的class,第二個參數是main方法裏的args
SpringApplication.run(SpringBootDemoApplication.class,args);
}
}
SpringBoot 將所有的功能場景都抽取出來,做成一個個的 starter(啓動器),只需要在項 目裏面引入這些 starter 相關場景的所有依賴都會導入進來,要用什麼功能就導入什麼場景, 在 jar 包管理上非常方便,最終實現一站式開發。
SpringBoot 提供了多達 44 個啓動器
spring-boot-starter | SpringBoot 的核心啓動器,包含了自動配置、日誌和 YAML |
spring-boot-starter-actuator | 幫助監控和管理應用 |
spring-boot-starter-web | 支持全棧式 Web 開發,包括 Tomcat 和 spring-webmvc |
spring-boot-starter-amqp | 通過 spring-rabbit 來支持 AMQP 協議(AdvancedMessage QueuingProtocol) |
spring-boot-starter-aop | 支持面向方面的編程即 AOP,包括 spring-aop 和 AspectJ |
spring-boot-starter-artemis | 通過 ApacheArtemis 支持 JMS 的 API(JavaMessage ServiceAPI) |
spring-boot-starter-batch | 支持 SpringBatch,包括 HSQLDB 數據庫 |
spring-boot-starter-cache | 支持 Spring 的 Cache 抽象 |
spring-boot-starter-cloud-connectors | 支持 Spring Cloud Connectors,簡化了在像 CloudFoundry 或 Heroku 這樣的雲平臺上連 接服務。 |
spring-boot-starter-data-gemfire | 支持 GemFire 分佈式數據存儲,包括 spring-data-gemfire |
spring-boot-starter-data-jpa | 支持 JPA(Java PersistenceAPI),包括 spring-data-jpa、spring-orm、Hibernate |
spring-boot-starter-data-rest | 通過 spring-data-rest-webmvc,支持通過 REST 暴露 Spring Data 數據倉庫 |
spring-boot-starter-data-solr | 支持 ApacheSolr 搜索平臺,包括 spring-data-solr |
spring-boot-starter-freemarker | 支持 FreeMarker 模板引擎 |
spring-boot-starter-groovy-templates | 支持 Groovy 模板引擎 |
spring-boot-starter-hateoas | 通過 spring-hateoas 支持基於 HATEOAS 的 RESTfulWeb 服務 |
spring-boot-starter-hornetq | 通過 HornetQ 支持 JMS |
spring-boot-starter-integration | 支持通用的 spring-integration 模塊 |
spring-boot-starter-jdbc | 支持JDBC數據庫 |
spring-boot-starter-jersey | 支持 JerseyRESTfulWeb 服務框架 |
spring-boot-starter-jta-atomikos | 通過 Atomikos 支持 JTA 分佈式事務處理 |
spring-boot-starter-jta-bitronix | 通過 Bitronix 支持 JTA分佈式事務處理 |
spring-boot-starter-mail | 支持 javax.mail 模塊 |
spring-boot-starter-mobile | 支持 spring-mobile |
spring-boot-starter-mustache | 支持 Mustache 模板引擎 |
spring-boot-starter-redis | 支持 Redis 鍵值存儲數據庫,包括 spring-redis |
spring-boot-starter-security | 支持 spring-security |
spring-boot-starter-social-facebook | 支持 spring-social-facebook |
spring-boot-starter-social-linkedin | 支持 pring-social-linkedin |
spring-boot-starter-social-twitter | 支持 pring-social-twitter |
spring-boot-starter-test | 支持常規的測試依賴,包括 JUnit、Hamcrest、Mockito 以及 spring-test 模塊 |
spring-boot-starter-thymeleaf | 支持 Thymeleaf 模板引擎,包括與 Spring 的集成 |
spring-boot-starter-velocity | 支持 Velocity 模板引擎 |
spring-boot-starter-websocket | 支持 WebSocket 開發 |
spring-boot-starter-ws | 支持 SpringWebServices |
spring-boot-starter-actuator | 增加了面向產品上線相關的功能,比如測量和監控 |
spring-boot-starter-remote-shell | 增加了遠程 sshshell 的支持 |
spring-boot-starter-jetty | 引入了 JettyHTTP 引擎(用於替換 Tomcat) |
spring-boot-starter-log4j | 支持 Log4J 日誌框架 |
spring-boot-starter-logging | 引入了 Spring Boot 默認的日誌框架 Logback |
spring-boot-starter-tomcat | 引入了 Spring Boot 默認的 HTTP 引擎 Tomcat |
spring-boot-starter-undertow | 引入了 UndertowHTTP 引擎(用於替換 Tomcat) |
文件的配置
SpringBoot 提供一個名稱爲 application 的全局配置文件,支持兩種格式 properteis 格式 與 YAML 格式。
配置 Tomcat 監聽端口
基本格式要求,大小寫敏感,使用縮進代表層級關係,並且相同的部分只出現一次。
server:
port: 7777
不同格式的加載順序
如 果 同 一 個 目 錄 下 , 有 application.yml 也 有 application.properties, 默 認 先 讀 取 application.properties。
如果同一個配置屬性,在多個配置文件都配置了,默認使用第 1 個讀取到的,後面讀取 的不覆蓋前面讀取到的。
不同位置的加載順序
當前項目根目錄下的一個/config 子目錄中(最高)
config/application.properties
config/application.yml
當前項目根目錄中(第二)
application.properties
application.yml
項目的 resources 即 classpath 根路徑下的/config 目錄中(第三)
resources/config/application.properties
resources/config/application.yml
項目的 resources 即 classpath 根路徑中(最後)
resources/application.properties
resources/application.yml
第一個基於Spring Boot的Spring MVC項目
關於SpringMVC可以點擊這裏導入依賴
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.alvin</groupId>
<artifactId>Spring Boot Study</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>Spring Boot Study Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
編寫啓動類(SpringBootDemoApplication)
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//啓動類必須要有這個註解!
@SpringBootApplication
public class SpringBootDemoApplication {
public static void main(String[] args) {
//必須要通過SpringApplication下的靜態方法run
//第一個參數是啓動類的class,第二個參數是main方法裏的args
SpringApplication.run(SpringBootDemoApplication.class,args);
}
}
配置端口(application.properties)
server.port=7777
Spring MVC
@Controller
public class MyController {
@RequestMapping("/helloworld")
@ResponseBody
public String show(){
return "hello";
}
}
這個時候我們運行啓動器就可以了,不需要運行tomcat,也不需要配置SpringMVC等文件,直接在瀏覽器輸入地址就可以了!
SpringBoot 的核心註解
註解 | 說明 |
@SpringBootApplication | 是 SpringBoot 的啓動類。 此註解等同於@Configuration+@EnableAutoConfiguration+@ComponentScan 的組合。 |
@SpringBootConfiguration | @SpringBootConfiguration 註解是@Configuration 註解的派生註解,跟@Configuration 註解的功能一致,標註這個類是一個配置類,只不過@SpringBootConfiguration 是 springboot 的註解,而@Configuration 是 spring 的註解 |
@Configuration | 通過對 bean 對象的操作替代 spring 中 xml 文件 |
@EnableAutoConfiguration | Spring Boot 自動配置(auto-configuration):嘗試根據你添加的 jar 依賴自動配置你的 Spring 應用。是@AutoConfigurationPackage 和@Import(AutoConfigurationImportSelector.class) 註解的組合 |
@AutoConfigurationPackage | @AutoConfigurationPackage 註解,自動注入主類下所在包下所有的加了註解的類 (@Controller,@Service 等),以及配置類(@Configuration) |
@Import({AutoConfigurationImportSelector.class}) | 直接導入普通的類 導入實現了 ImportSelector 接口的類 導入實現了 ImportBeanDefinitionRegistrar 接口的類 |
@ComponentScan | 組件掃描,可自動發現和裝配一些 Bean |
@ConfigurationPropertiesScan | @ConfigurationPropertiesScan 掃描配置屬性。@EnableConfigurationProperties 註解的作 用是使用 @ConfigurationProperties 註解的類生效 |