Spring boot的項目結構
1 .pom文件
1.1繼承
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
Spring Boot 的父級依賴,只有繼承它項目次才時Spring Boot項目,沒有它是不能做springboot的開發的。
spring-boot-starter-parent是一個特殊的starter,它用來提供相關的Maven依賴。使用它之後,常用的包依賴可以省去version標籤。
1.2依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
啓動器依賴
這個是一個web啓動器包含的一個web全棧的jar包
1.3 插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
spring-boot-maven-plugin插件是將springboot的應用程序打包成jar包。將所有的應用啓動運行所需要的jar包都包含進來,從邏輯上將具備了獨立運行的條件。當運行“mvnpackage”進行打包後,使用“java-jar”命令就可以直接運行。
2.啓動類
- 作用:
- 啓動spring boot 項目 ,是基於Main方法來運行的
- 注意點:
- 啓動類在啓動的時候做註解掃描(@Controller、@Service…),掃描位置爲同包或子包下的註解,所以啓動類的位置應放於包的根下。
2.1啓動類與啓動器的區別
- 啓動類表示項目的入口
- 啓動器表示項目的座標
2.2創建何啓動類
@SpringBootApplication
public class BageApplication {
public static void main(String[] args) {
SpringApplication.run(BageApplication.class, args);
}
}
需要:
- @SpringBootApplication
- SpringApplication.run(BageApplication.class, args);
3.啓動器
Spring Boot 將所有的功能場景都抽取出來,做成一個個的stater(啓動器),只需要在項目裏面引入這些stater相關場景的依賴都會導入進來,使我們開發更加的方便,不在成爲SSM的配置地獄。
spring-boot-starter
核心啓動器,包括自動配置支持,日誌記錄和YAML
spring-boot-starter-activemq
使用Apache ActiveMQ進行JMS消息傳遞的入門者
spring-boot-starter-amqp
使用Spring AMQP和Rabbit MQ的入門者
spring-boot-starter-aop
使用Spring AOP和AspectJ進行面向方面編程的入門者
spring-boot-starter-artemis
使用Apache Artemis進行JMS消息傳遞的入門者
spring-boot-starter-batch
使用Spring批處理的初學者
spring-boot-starter-cache
使用Spring Framework的緩存支持的初學者
spring-boot-starter-cloud-connectors
使用Spring雲連接器的初學者簡化了與Cloud Foundry和Heroku等雲平臺中的服務的連接
spring-boot-starter-data-cassandra
使用Cassandra分佈式數據庫和Spring數據的初學者Cassandra
spring-boot-starter-data-cassandra-reactive
使用Cassandra分佈式數據庫和Spring數據Cassandra Reactive的入門者
spring-boot-starter-data-couchbase
使用Couchbase面向文檔的數據庫和Spring Data Couchbase的入門者
spring-boot-starter-data-couchbase-reactive
使用Couchbase面向文檔的數據庫和Spring Data Couchbase Reactive的入門者
spring-boot-starter-data-elasticsearch
使用Elasticsearch搜索和分析引擎以及Spring Data Elasticsearch的初學者
spring-boot-starter-data-jdbc
使用Spring數據JDBC的入門者
spring-boot-starter-data-jpa
使用Spring Data JPA和Hibernate的初學者
spring-boot-starter-data-ldap
使用Spring數據LDAP的入門者
spring-boot-starter-data-mongodb
使用MongoDB面向文檔的數據庫和Spring Data MongoDB的初學者
spring-boot-starter-data-mongodb-reactive
使用MongoDB面向文檔的數據庫和Spring Data MongoDB Reactive的入門者
spring-boot-starter-data-neo4j
使用Neo4j圖形數據庫和Spring數據Neo4j的入門者
spring-boot-starter-data-redis
使用Spring數據Redis和Lettuce客戶端使用Redis鍵值數據存儲的入門者
spring-boot-starter-data-redis-reactive
使用Redis數據Redis被動和Lettuce客戶端的Redis鍵值數據存儲的入門者
spring-boot-starter-data-rest
使用Spring Data REST通過REST公開Spring數據存儲庫的入門者
spring-boot-starter-data-solr
使用帶有Spring Data Solr的Apache Solr搜索平臺的初學者
spring-boot-starter-freemarker
使用FreeMarker視圖構建MVC Web應用程序的入門者
spring-boot-starter-groovy-templates
使用Groovy模板視圖構建MVC Web應用程序的入門者
spring-boot-starter-hateoas
使用Spring MVC和Spring HATEOAS構建基於超媒體的RESTful Web應用程序的入門者
spring-boot-starter-integration
使用Spring Integration的入門者
spring-boot-starter-jdbc
將JDBC與HikariCP連接池一起使用的入門者
spring-boot-starter-jersey
使用JAX-RS和Jersey構建RESTful Web應用程序的入門者。替代spring-boot-starter-web
spring-boot-starter-jooq
使用jOOQ訪問SQL數據庫的初學者。替代spring-boot-starter-data-jpa
或spring-boot-starter-jdbc
spring-boot-starter-json
閱讀和寫作json的初學者
spring-boot-starter-jta-atomikos
使用Atomikos進行JTA交易的入門者
spring-boot-starter-jta-bitronix
使用Bitronix進行JTA事務的入門者
spring-boot-starter-mail
使用Java Mail和Spring Framework的電子郵件發送支持的入門者
spring-boot-starter-mustache
使用Mustache視圖構建Web應用程序的入門者
spring-boot-starter-oauth2-client
使用Spring安全性OAuth2 / OpenID Connect客戶端功能的入門級產品
spring-boot-starter-oauth2-resource-server
使用Spring安全性OAuth2資源服務器功能的入門者
spring-boot-starter-quartz
使用Quartz調度程序的入門者
spring-boot-starter-security
使用Spring安全性的入門者
spring-boot-starter-test
用於測試包含JUnit,Hamcrest和Mockito等庫的Spring Boot應用程序的入門者
spring-boot-starter-thymeleaf
使用Thymeleaf視圖構建MVC Web應用程序的入門者
spring-boot-starter-validation
使用Java Bean驗證與Hibernate Validator的初學者
spring-boot-starter-web
使用Spring MVC構建Web(包括RESTful)應用程序的入門者。使用Tomcat作爲默認嵌入式容器
spring-boot-starter-web-services
使用Spring Web服務的入門者
spring-boot-starter-webflux
使用Spring Framework的Reactive Web支持構建WebFlux應用程序的初學者
spring-boot-starter-websocket
使用Spring Framework的WebSocket支持構建WebSocket應用程序的入門者
4.配置文件
名稱爲:application
格式有兩種:
- properties
- YAML
注意點:他是由spring-boot-starter(核心啓動器,包括自動配置支持,日誌記錄和YAML)解析的
4.1 properties
格式是“鍵=值”的格式,文本註釋信息可以用"#"來註釋。
#修改toncat的端口號
server.port=8888
4.2YAML
YAML 格式的配置文件的擴展名可以爲yaml或者yml
4.2.1基本語法
- 大小寫敏感
- 使用縮進表示層級關係
- 縮進不允許使用tab,只允許空格
- 縮進的空格數不重要,只要相同層級的元素左對齊即可
- '#'表示註釋
4.2.2 支持的數據類型:
- 對象:鍵值對的集合,又稱爲映射(mapping)/ 哈希(hashes) / 字典(dictionary)
key:
child-key: value
child-key2: value2
- 數組:一組按次序排列的值,又稱爲序列(sequence) / 列表(list)
以 - 開頭的行表示構成一個數組
- A
- 純量(scalars):單個的、不可再分的值
4.3 使用
server:
port: 8888
host:xxxx
4.4配置文件存放位置
- 當前項目的根目錄中
- 當前項目根目錄下的一個/config子目錄中
- 項目的resources即classpath路徑中
- 項目的resources即classpath路徑中下的/config子目錄中
4.5配置文件的優先級
-
在同一個目錄下,有application.properties和application.yml文件,優先讀取application.properties
注意點:默認使用第一個讀取到的
-
在不同目錄下
- 當前項目根目錄下的一個/config子目錄中(最高)
- 當前項目的根目錄中
- 項目的resources即classpath路徑中下的/config子目錄中
- 項目的resources即classpath路徑中
4.6配置文件中的佔位符
語法:
${}
4.6.1作用
- ${}中可以獲取框架提供的方法中的值如:random.int等。
- 佔位符可以獲取配置文件中的一個鍵的值賦給另一個鍵爲值
zoo:
age: 18
dog: ${zoo.age}
4.6.2生成隨機數
# 隨機字符串
${random.value}
# 隨機int
${random.int}
# 隨機long
${random.long}
# 10以內的隨機數
${random.int(10)}
# 10-20的隨機數
${random.int[10,20]}
#生成一個uuid,有短槓連接
${random.uuid}
生成一個隨機的端口:
server:
port: ${random.int(8000,9000)}
4.7 bootstrap配置文件
Spring Boot 中有兩個上下文對象,一種事 bootstrap,另一種是application。它倆是繼承的關係,application繼承與bootstrap。bootstrap是應用程序的父上下文,bootstrap優先於application。bootstrap主要用於從額外的資源來加載配置信息,含可以在本地外部配置文件中的解密屬性。這兩耳光上下文共用一個環境,它是任何Spring應用程序的外部屬性的來源。bootstrap裏面的屬性會優先加載,他們默認頁不能被本地相同配置覆蓋。
4.7.1特徵
- bootstrap由父類applicationContext 加載,比application優先加載。
- bootstrap中的屬性不能被覆蓋
4.7.2應用場景
- 使用 spring cloud config 配置中心時,這時需要在bootstrap 配置文件中添加連接到配置中心的配置屬性來加載外部配置中心的配置信息。
- 一些固定不能被覆蓋的屬性
- 一些加密/解密的常景
5.Spring Boot 核心註解
5.1@SpringBootApplication
- 是Spring Boot 的啓動類
- 相當於聲明
@Configuration
,@EnableAutoConfiguration
and@ComponentScan
.
5.2@SpringBootConfiguration
@SpringBootConfiguration註解是@Configuration註解的一個派生註解,根@Configuration註解的功能一致標註這個類是一個配置類,只不過@SpringBootConfiguration是 Spring Boot的註解 。
5.3@Configuration
通過bean對象代替spring中的 xml文件
5.4@EnableAutoConfiguration
- Spring Boot 自動配置(auto-configuration):嘗試根據你添加的jar依賴自動配置你的Spring的應用
- 相當於聲明
@AutoConfigurationPackage
,@Import({AutoConfigurationImportSelrtor.class})
5.5@AutoConfigurationPackage
@AutoConfigurationPackage註解,自動注入主類下所在包下所有的加了註解的類(@Controller @service等),以及配置類(@Configurtion)
5.6@Import({AutoConfigurationImportSelrtor.class})
- 直接導入普通的類
- 導入實現了ImportSelrctor接口的類
- 導入實現了ImportBeanDefinitionRegistrar接口的類
5.7ComponentScan
組件掃描,可以自動裝配一些Bean。
5.8@ConfigurationPropertiesScan
- @ConfigurationPropertiesScan掃描配置屬性。
- @EnableConfigurationProperties註解的作用使用@ConfigurationPropertiesScan註解的類生效