網(wǎng)站域名變更后怎樣操作廣州網(wǎng)站設(shè)計實力樂云seo
一、啟動類(引導(dǎo)類)
在通常情況下,你創(chuàng)建的Spring應(yīng)用項目都會為你自動生成一個啟動類,它是這個應(yīng)用的起點。
在Spring Boot中,引導(dǎo)類(也稱為啟動類,通常是main
方法所在的類)是整個應(yīng)用程序的入口點,用于引導(dǎo)和啟動Spring Boot應(yīng)用。它主要用來加載Spring的上下文
、自動配置
并啟動內(nèi)嵌的服務(wù)器
。
1.1 啟動類重要注解
一個經(jīng)典的SpringBoot啟動類如下代碼所示:
@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
@SpringBootApplication
注解是Spring Boot啟動類的核心,它包含了三個重要注解:
- @SpringBootConfiguration:這個注解實際上是
@Configuration
的派生注解,表示該類是一個Spring配置類,可以定義@Bean方法。Spring會將這些方法返回的對象作為Bean,添加到應(yīng)用上下文中。 - @EnableAutoConfiguration:這是Spring Boot的自動配置核心,通過這個注解,Spring Boot會根據(jù)項目中引入的依賴,自動配置各種組件。例如,如果項目中有
spring-boot-starter-web
依賴,那么Spring Boot會自動配置一個Web環(huán)境,包含內(nèi)嵌的Tomcat
服務(wù)器、DispatcherServlet等。 - @ComponentScan:這個注解會掃描指定包及其子包下的所有@Component、@Service、@Repository、@Controller等注解,將它們作為Bean加載到Spring的上下文中。默認(rèn)情況下,它會掃描引導(dǎo)類所在包及其子包,所以通常建議將引導(dǎo)類放在項目根包下。
1.2 SpringApplication.run的功能
在引導(dǎo)類中,SpringApplication.run(Application.class, args)用于啟動Spring Boot應(yīng)用,它執(zhí)行了多項初始化工作,具體包括以下幾個步驟:
-
初始化SpringApplication對象:SpringApplication類會根據(jù)應(yīng)用的類型(通常是SpringBootServletInitializer或SpringApplication)決定啟動方式。這個類會加載各類初始化器ApplicationContextInitializer和監(jiān)聽器ApplicationListener,同時準(zhǔn)備一些默認(rèn)設(shè)置。
-
啟動引導(dǎo)和環(huán)境配置:Spring Boot會初始化Environment對象,加載系統(tǒng)屬性、環(huán)境變量以及應(yīng)用配置文件(如application.properties或application.yml),將這些內(nèi)容加載到Spring上下文環(huán)境中。
-
創(chuàng)建并配置ApplicationContext:根據(jù)應(yīng)用的類型選擇具體的ApplicationContext類型,一般是AnnotationConfigApplicationContext或WebApplicationContext,用來管理應(yīng)用中的所有Bean。
-
自動加載Spring Boot特性:通過@EnableAutoConfiguration,Spring Boot會掃描所有自動配置類,通常是位于META-INF/spring.factories文件中的@Configuration類,自動配置相應(yīng)的組件(如數(shù)據(jù)庫連接池、數(shù)據(jù)源、JPA配置等)。
-
啟動內(nèi)嵌Web服務(wù)器(如有):如果是Web應(yīng)用,Spring Boot會啟動一個內(nèi)嵌的
Web服務(wù)器(例如Tomcat或Jetty)
,并將DispatcherServlet等必要的組件注入到應(yīng)用上下文中,使應(yīng)用可以接收和處理HTTP請求。 -
啟動ApplicationRunner和CommandLineRunner:如果應(yīng)用中有實現(xiàn)了ApplicationRunner或CommandLineRunner接口的類,Spring Boot會在啟動完成后運(yùn)行這些類中的run方法。它們常用于在應(yīng)用啟動后執(zhí)行一些初始化任務(wù)。
1.3 引導(dǎo)類的實際運(yùn)行機(jī)制
整個引導(dǎo)類運(yùn)行的關(guān)鍵在于SpringApplication.run()方法,它的運(yùn)行機(jī)制大致如下:
-
加載監(jiān)聽器:Spring Boot使用各種事件來驅(qū)動應(yīng)用啟動流程,例如,加載ApplicationStartingEvent、ApplicationPreparedEvent等一系列事件,在應(yīng)用生命周期的不同階段進(jìn)行通知。你可以創(chuàng)建自定義的監(jiān)聽器來監(jiān)聽這些事件。
-
設(shè)置默認(rèn)屬性:Spring Boot會根據(jù)項目結(jié)構(gòu)和配置文件設(shè)置默認(rèn)屬性,例如端口號、環(huán)境配置、日志配置等。你可以在application.properties或application.yml中進(jìn)行自定義。
-
創(chuàng)建上下文和刷新上下文:Spring Boot會創(chuàng)建應(yīng)用的ApplicationContext,并刷新它。ApplicationContext會自動管理所有Spring組件和Bean的生命周期,注入相應(yīng)依賴,并準(zhǔn)備服務(wù)。
-
調(diào)用生命周期鉤子和運(yùn)行應(yīng)用:在上下文加載完成后,Spring Boot會調(diào)用所有實現(xiàn)SmartLifecycle接口的組件,執(zhí)行它們的啟動邏輯。之后,啟動內(nèi)嵌的服務(wù)器,監(jiān)聽請求端口,應(yīng)用正式啟動并進(jìn)入運(yùn)行狀態(tài)。
1.4 使用引導(dǎo)類的配置和擴(kuò)展
你可以通過自定義SpringApplication來更細(xì)粒度地控制Spring Boot的啟動行為:
- 設(shè)置Banner:可以通過SpringApplication.setBanner()或在application.properties中配置自定義啟動Banner。
- 配置監(jiān)聽器:可以通過SpringApplication.addListeners()方法,添加自定義監(jiān)聽器來捕獲啟動過程中不同階段的事件。
- 配置初始化器:通過SpringApplication.addInitializers()方法,自定義上下文的初始化行為。
可能看到這里的同學(xué)有點蒙,關(guān)于基礎(chǔ)篇里面,我們只需要知道啟動類大致干了點啥就行,究竟是怎么干的,為什么這么干的,這屬于核心原理了,到時候放在原理那里講解,上面每一個小點單獨(dú)拉出來講都要參考無數(shù)篇文獻(xiàn),都能寫一個萬字以上的論文,對于基礎(chǔ)來講無須理解那么多,知道有這么個東西為主。
那么現(xiàn)在啟動main方法,同時啟動了內(nèi)置的服務(wù)器(核心注解中的@EnableAutoConfiguration有相關(guān)依賴的話),這樣我們整個程序就運(yùn)行起來了。
二、配置
2.1 application.properties
這是Spring Boot最常用的配置文件,位于src/main/resources
目錄下。文件名一般為
Spring Boot會根據(jù)這些配置文件自動加載相關(guān)屬性。如果上述三個文件中關(guān)于某一項的配置全部存在(例如port),則其優(yōu)先級順序為:
常見配置項
服務(wù)器端口:server.port=8080(修改服務(wù)器端口)
數(shù)據(jù)源配置:
spring.datasource.url=jdbc:mysql://localhost:3306/dbname
spring.datasource.username=root
spring.datasource.password=root
日志配置:logging.level.com.example=DEBUG(設(shè)置日志級別)
郵件配置:spring.mail.host=smtp.example.com
2.2 多環(huán)境配置
Spring Boot支持根據(jù)環(huán)境自動加載不同的配置文件,例如application-dev.properties、application-prod.properties等。通過spring.profiles.active來指定當(dāng)前環(huán)境:
spring.profiles.active=dev
例子如下:
他在目錄中就會有兩個配置文件,其中的yml可以如上圖所示,在需要參數(shù)的地方以變量名稱占位,在dev文件中填寫具體的參數(shù),區(qū)分開開發(fā)環(huán)境參數(shù)與運(yùn)行環(huán)境參數(shù)。
yml中:
dev中:
作為配置來講,重中之重就是:后面有一個空格,如果沒有空格則配置均會失效!
2.3 讀取配置文件中的參數(shù)
使用@Value(“${}”)注解即可從配置中讀取參數(shù)賦值給變量,用例如下:
用例代碼,這里注意括號中的變量名稱需要與配置相同,但是具體的變量名不需要與配置中的變量名相同
輸出:
2.4 配置文件中引用屬性
2.5 使用類封裝屬性
使用:@ConfigurationProperties
這個注解完成對類的封裝,用例如下所示:
配置文件:
類文件:
輸出: