spring-boot-starter-parent 中還有父專案,宣告了開發中常用的依賴的版本號
並且進行自動版本仲裁,即如果程式設計師沒有指定某個依賴jar的版本,則以父版本指定的版本為準
比如我們要將SpringBoot的 mysql 驅動版本改為 5.1.49(預設版本為8.0.26),有兩種方法:
(1)方式一:在pom.xml檔案中顯式的匯入mysql依賴,並指定version
<!--自己指定mysql的驅動版本-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
(2)方式二:在pom.xml檔案的< properties>節點中指定mysql的 key,形如:
<properties>
<mysql.version>5.1.49</mysql.version>
</properties>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
為什麼能夠達到修改版本仲裁的效果?
答:根據依賴就近優先原則。比如pom.xml檔案不斷的應用依賴,形成了一個依賴樹,那麼專案依賴jar的版本以離本專案最近的版本為準。如果本專案沒有指定該jar的版本,就以離本專案最近的父專案的版本為準。
(1)開發中我們引入了相關場景的starter,這個場景中所有的相關依賴都引進來來,比如我們做web開發引入了spring-boot-starter-web,該starter將匯入所有與web開發相關的所有包
(2)依賴樹:可以看到spring-boot-starter-web幫我們引入了spring-webmvc,spring-web開發模組,還引入了spring-boot-starter-tomcat場景,spring-boot-starter-json場景,這些場景下面又引入了一大堆相關的包,這些依賴項可以快速啟動和執行一個專案,提高開發效率。
(3)所有場景啟動器最基本的依賴就是spring-boot-starter,從前面的依賴樹可以看到這個依賴是SpringBoot自動設定的核心依賴
官方檔案:Developing with Spring Boot
介紹:
在SSM框架整合時,需要設定tomcat、設定SpringMVC、設定如何掃描包、設定字元過濾器、設定檢視解析器、檔案上傳等,非常麻煩。而在SpringBoot中,存在自動設定機制,極大提高了開發效率。
自動設定了Tomcat
自動設定了SpringMVC
自動設定了Web的常用功能:比如字元過濾器,檔案上傳,檢視解析器等等
自動設定:預設掃描包結構[官方檔案],它會去掃描主程式所在的包及其子包下的所有檔案,當然如果要掃描其他包也可以進行設定。
直接在主程式的註解中指定要掃描的包及其子包:
@SpringBootApplication(scanBasePackages = {"com.li","xx.yy","aa.bb"})
注意,scanBasePackages屬性可以接收多個值。
SpringBoot專案最重要也是最核心的組態檔就是application.properties,所有的框架設定都可以在這個組態檔中說明。application.properties檔案一般放在resources目錄下。
預設設定最終都是對映到某個類中,這個類最終也會被注入到spring的容器中。
設定properties-->設定屬性Bean-->Spring容器
例子:
#修改server的監聽埠 預設為8080
server.port=10000
#修改單個檔案上傳的預設最大值 預設為1MB
#multipart.max-file-size屬性可以指定SpringBoot上傳檔案的大小限制
#預設設定最終都是對映到某個類中!
#比如multipart.max-file-size會對映到MultipartProperties類上
#將遊標放在該屬性,輸入ctrl+b,就可以定位這個屬性是關聯到哪個屬性類上的
spring.servlet.multipart.max-file-size=10MB
#埠號
server.port=10000
#應用的上下文路徑(專案路徑)
server.servlet.context-path=/allModel
#指定 POJO 掃描包來讓 mybatis 自動掃描到自定義的 POJO
mybatis.type-aliases-package=com.cxs.allmodel.model
#指定 mapper.xml 的路徑:
#application 上設定了@MapperScan(掃描mapper類的路徑)和 pom.xml 中放行了 mapper.xml後,
#設定mapper-locations沒有意義。如果mapper類和 mapper.xml不在同一個路徑下時,mapper-locations就有用了
mybatis.mapper-locations=classpath:com/cxs/allmodel/mapper
#session 失效時間(單位 s)
spring.session.timeout=18000
#資料庫連線設定
#mysql 資料庫 url
mysql.one.jdbc-url=jdbc:mysql://127.0.0.1:3306/test?serverTimezone=Asia/Shanghai&useSSL=false
#mysql 資料庫使用者名稱
mysql.one.username=
#資料庫密碼
mysql.one.password=
#執行緒池允許的最大連線數
mysql.one.maximum-pool-size=15
#紀錄檔列印:
#紀錄檔級別 trace<debug<info<warn<error<fatal 預設級別為 info,即預設列印 info 及其以上級別的紀錄檔
#logging.level 設定紀錄檔級別,後面跟生效的區域,比如 root 表示整個專案,也可以設定為某個包下,也可以具體到某個類名(紀錄檔級別的值不區分大小寫)
logging.level.com.cxs.allmodel.=debug
logging.level.com.cxs.allmodel.mapper=debug
logging.level.org.springframework.web=info
logging.level.org.springframework.transaction=info
logging.level.org.apache.ibatis=info
logging.level.org.mybatis=info
logging.level.com.github.pagehelper = info
logging.level.root=info
#紀錄檔輸出路徑
logging.file=/tmp/api/allmodel.log
#設定 pagehelper 分頁外掛
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql
#jackson 時間格式化
spring.jackson.serialization.fail-on-empty-beans=false
#指定日期格式,比如 yyyy-MM-dd HH:mm:ss,或者具體的格式化類的全限定名
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
#指定日期格式化時區,比如 America/Los_Angeles 或者 GMT+10
spring.jackson.time-zone=GMT+8
#設定統一字元集
spring.http.encoding.charset=utf8
#redis 連線設定
# redis 所在主機 ip 地址
spring.redis.host=
#redis 伺服器密碼
spring.redis.password=
#redis 伺服器埠號
spring.redis.port=
#redis 資料庫的索引編號(0 到 15)
spring.redis.database=14
# 連線池的最大活動連線數量,使用負值無限制
spring.redis.pool.max-active=8
# 連線池的最大空閒連線數量,使用負值表示無限數量的空閒連線
spring.redis.pool.max-idle=8
# 連線池最大阻塞等待時間,使用負值表示沒有限制
spring.redis.pool.max-wait=-1ms
# 最小空閒連線數量,使用正值才有效果
spring.redis.pool.min-idle=0
# 是否啟用 SSL 連線.
spring.redis.ssl=false
# 連線超時,毫秒為單位
spring.redis.timeout= 18000ms
# 叢集模式下,叢集最大轉發的數量
spring.redis.cluster.max-redirects=
# 叢集模式下,逗號分隔的鍵值對(主機:埠)形式的伺服器列表
spring.redis.cluster.nodes=
# 哨兵模式下,Redis 主伺服器地址
spring.redis.sentinel.master=
# 哨兵模式下,逗號分隔的鍵值對(主機:埠)形式的伺服器列表
spring.redis.sentinel.nodes= 127.0.0.1:5050,127.0.0.1:5060
我們還可以在properties檔案中自定義設定,通過@Value("${}")
獲取對應屬性值
例子:
(1)application.properties 檔案
my.website=https://www.baidu.com
(2)某個 Bean
@Value("${my.website}")
private String bdUrl;//從application.properties中獲取value值
(1)開啟ConfigFileApplicationListener.java,看一下原始碼
private static final String DEFAULT_SEARCH_LOCATIONS = "classpath:/,classpath:/config/,file:./,file:./config/*/,file:./config/";
可以看到SpringBoot預設讀取的路徑有:
classpath:/
classpath:/config/
file:./
file:./config/*/
file:./config/
也就是說如果我們把 application.properties 放在上述任意的目錄下, 你會發現依然是管用的。