javascript
creo配置文件config选项详解_5年资深架构师重点聚焦:SpringBoot的配置详解+内嵌Servlet容器
Spring Boot的配置詳解
在本節(jié)中,我們將重點(diǎn)聚焦在Spring Boot的配置方面。
理解Spring Boot的自動(dòng)配置
按照“約定大于配置”的原則,Spring Boot通過掃描依賴關(guān)系來使用類路徑中可用的庫(kù)。對(duì)于每個(gè)pom文件中的“pring-boot-starter-*” 依賴,Spring Boot會(huì)執(zhí)行默認(rèn)的AutoConiguration類。
AutoConfiguration類使用*AutoConfiguration詞法模式,其中*代表類庫(kù)。例如,JPA 存儲(chǔ)庫(kù)的自動(dòng)配置是通過JpaRepositoriesAutoConfiguration來實(shí)現(xiàn)的。
使用-deboug運(yùn)行應(yīng)用程序可以查看自動(dòng)配置的相關(guān)報(bào)告。下面的命令用于顯示在3.1節(jié)中“spring-boot-rest"應(yīng)用的自動(dòng)配置報(bào)告。
$ java -jar build/libs/spring-boot-rest-1.0.0.jar --debug以下是自動(dòng)配置類的一-些示例:
●ServerPropertiesAutoConfiguration;
●RepositoryRestMvcAutoConfiguration;
●JpaRepositoriesAutoConfiguration; .
●JmsAutoConfiguration。
如果應(yīng)用程序有特殊的要求,比如需要排除某些庫(kù)的自動(dòng)配置,也是能夠完全實(shí)現(xiàn)的。以下是排除DataSourceAutoConfiguration的示例。
@EnableAutoConfiguration (exclude= {DataSourceAutoConfiguration.class})重寫默認(rèn)的配置值
也可以使用應(yīng)用程序覆蓋默認(rèn)配置值。重寫的配置值配置在application.properties文件中即可。
比如,如果想更改應(yīng)用啟動(dòng)的端口號(hào),則可以在application.properties文件中添加如下內(nèi)容。
server .port=8081這樣,這個(gè)應(yīng)用程序再次啟動(dòng)時(shí),就會(huì)使用端口8081。
更換配置文件的位置
默認(rèn)情況下,Spring Boot將所有配置外部化到application.properties文件中。但是, 它仍然是應(yīng)用程序構(gòu)建的一部分。
此外,可以通過設(shè)置來實(shí)現(xiàn)從外部讀取屬性。以下是設(shè)置的屬性:
●spring.config.name: 配置文件名;
●spring.config.location: 配置文件的位置。
這里,spring.config.location 可以是本地文件位置。
以下命令從外部啟動(dòng)Spring Boot應(yīng)用程序來提供配置文件。
$ java -jar build/ libs/ spring-boot-rest-1.0.0.jar -- spring . config . name=bootrest. properties自定義配置
開發(fā)者可以將自定義屬性添加到application.properties文件中。
例如,我們自定義了一個(gè)名為“ile.server.url"” 的屬性在application.properties 文件中。在Spring Boot啟動(dòng)后,我們就能將該屬性自動(dòng)注入應(yīng)用中。
下面是完整的例子。
@Controller@RequestMapping("/u")public class UserspaceController {@Value("$ {file.server.url}")private String fileServerUrl;@GetMapping ("/ {username} /blogs/edit")public ModelAndView createBlog (@PathVariable ("username") Stringusername, Model model) {model . addAttribute ("blog", new Blog (null,null, null)) ;model . addAttribute ("fileServerUrl", fileServerUrl) ;//文件服務(wù)器的地址返回給客戶端return new ModelAndView (" /userspace/blogedit", "blogModel", mod-el) ;使用.yaml 作為配置文件
我們使用的是.yaml文件,以此來作為application.properties文件的一種替代方式。YAML與平面屬性文件相比,提供了類似JSON的結(jié)構(gòu)化配置。YAML數(shù)據(jù)結(jié)構(gòu)可以用類似大綱的縮排方式呈現(xiàn),結(jié)構(gòu)通過縮進(jìn)來表示,連續(xù)的項(xiàng)目通過減號(hào)“_”來表示,map結(jié)構(gòu)里面的key/value對(duì)用冒號(hào)“:來分隔。樣例如下。
spring: application:name: waylaudatasource:driverClassName: com. mysql. jdbc.Driverurl: jdbc:mysql: / /localhost/testserver:port: 8081profiles的支持
Spring Boot支持profiles,即不同的環(huán)境使用不同的配置。通常需要設(shè)置-一個(gè)系統(tǒng)屬性( spring.profiles.active )或OS環(huán)境變量( SPRING_ PROFILES_ ACTIVE) 。例如,使用-D參數(shù)啟動(dòng)應(yīng)用程序(記住將其放在主類或jar之前)。$ java -jar -Dspring . profiles.active-production
build/ libs/spring-boot-rest-1.0.0.jar在Spring Boot中,還可以在aplication.properties中設(shè)置激活的配置文件,例如,
spring. profiles .active=productionYAML文件實(shí)際上是由“__” 行分隔的文檔序列,每個(gè)文檔分別解析為平坦化的映射。
如果-一個(gè)YAML文檔包含-一個(gè)spring.profiles鍵,那么配置文件的值(逗號(hào)分隔的配置文件列表)將被反饋到Spring Enironmentaccptsrofiles)中,并且如果這些配置文件中的任何-一個(gè)被激活,那么文檔被包含在最終的合并中。
例如,
server:port: 9000spring:profiles: developmentserver:port: 9001spring:profiles: productionserver :port: 0在此示例中,默認(rèn)端口為9000,但是如果Spring profile的“development" 處于激活狀態(tài),則端口為9001,如果“production” 處于激活狀態(tài),則為0。
要使.properties文件做同樣的事情,可以使用“aplication-S {profile};properties”的方式來指定特定于配置文件的值。
內(nèi)嵌Servlet容器
Spring Boot Web Starter 內(nèi)嵌了Tomcat服務(wù)器。在應(yīng)用中使用嵌人式的Servlet容器,可以方便我們來進(jìn)行項(xiàng)目的啟動(dòng)和調(diào)試。
Spring Boot包括支持嵌入式Tomcat、Jetty 和Undertow服務(wù)器。默認(rèn)情況下,嵌入式服務(wù)器將偵聽端口 8080上的 HTTP 請(qǐng)求。
注冊(cè)Servlet、過濾器和監(jiān)聽器
當(dāng)使用嵌人式Servlet容器時(shí),可以通過使用Spring bean或掃描Servlet組件從Servlet規(guī)范(如HttpSessionListener )中注冊(cè)Servlet、 過濾器和所有監(jiān)聽器。
默認(rèn)情況下,如果上下文只包含-一個(gè)Servlet, 它將映射到“/” 路徑。在多個(gè)Servlet bean的情況下,bean名稱將被用作路徑前綴,過濾器將映射到“/*” 路徑。
如果覺得基于慣例的映射不夠靈活,可以使用ServletRegistrationBean. FilterRegistrationBean和ServletListenerRegistrationBean類進(jìn)行完全控制。
Servlet上下文初始化
嵌人式Servlet 容器不會(huì)直接執(zhí)行Servlet 3.0+的javax.servlet. ServletContainerInitializer接口或Spring的org.springframework. web.WebApplicationitializer接口。這是因?yàn)樵趙ar中運(yùn)行的第三方庫(kù)會(huì)帶來破壞Spring Boot應(yīng)用程序的風(fēng)險(xiǎn)。
如果您需要在Spring Boot應(yīng)用程序中執(zhí)行Servlet上下文初始化,則應(yīng)注冊(cè)一個(gè)實(shí)現(xiàn)org.springframework.boot.web.servlet.ServletContextInitializer接口的bean。onStartup 方法提供對(duì)Servlet-Context的訪問,并且如果需要,可以輕松地用作現(xiàn)有WebApplicationInitializer的適配器。
當(dāng)使用嵌人式容器時(shí),可以使用@ServletComponentScan來自動(dòng)注入啟用了@WebServlet、@WebFilter和@WebListener注解的類。
需要注意的是,@ServletComponentScan 在獨(dú)立部署的容器中不起作用,這是因?yàn)樵讵?dú)立部署的容器中將使用容器內(nèi)置的發(fā)現(xiàn)機(jī)制。
ServletWebServerApplicationContext
Spring Boot使用一種新型的ApplicationContext 來支持嵌人式的Servlet 容器。ServletWeb-
ServerApplicationContext 就是這樣- - 種特殊類型的WebApplicationContext,它通過搜索單個(gè)Serv-
letWebServerFactory bean來引導(dǎo)自身。通常, TomcatServletWebServerFactory 、JettyServletWebServer
Factory或UndertowServletWebServerFactory將被自動(dòng)配置。
通常,開發(fā)者并不需要關(guān)心這些實(shí)現(xiàn)類。在大多數(shù)應(yīng)用程序中將被自動(dòng)配置,并將創(chuàng)建適當(dāng)?shù)腁pplicationContext和ServletWebServerFactory。
更改內(nèi)嵌Servlet容器
Spring Boot Web Starter默認(rèn)使用了Tomcat 來作為內(nèi)嵌的容器。在依賴中加入相應(yīng)Servlet 容器的Starter,就能實(shí)現(xiàn)默認(rèn)容器的替換,如下所示。
spring-boot- starterjetty: 使用Jetty 作為內(nèi)嵌容器,可以替換spring bot-starter-tomcat。
springoboot-starter-undertow:使用Undertow作為內(nèi)嵌容器,可以替換spring-boot-starter-tomcat。
可以使用Spring Environment屬性配置常見的Servlet 容器的相關(guān)設(shè)置。通常將在application.properties文件中來定義屬性。
常見的Servlet容器設(shè)置如下所示。
●網(wǎng)絡(luò)設(shè)置:監(jiān)聽HTTP請(qǐng)求的端口( server.port)、綁定 到server.address 的接口地址等。
會(huì)話設(shè)置:會(huì)話是否持久( server.session.persistence)、會(huì)話超時(shí)( server.session.timeout)、會(huì)話數(shù)據(jù)的位置( server.session.store-dir )和會(huì)話cookie配置( serversession.cookie.* )錯(cuò)誤管理:錯(cuò)誤頁(yè)面的位置( serererror.path)等。
SSL。
●HTTP壓縮。
Spring Boot盡可能地嘗試公開這些常見公用設(shè)置,但也會(huì)有一些特殊的配置。對(duì)于這些例外的情況,SpringBoot提供了專用命名空間來對(duì)應(yīng)特定于服務(wù)器的配置(比如server.tomcat和server.undertow )。
本篇給大家講解的是SpringBoot的配置詳解+內(nèi)嵌Servlet容器這兩塊兒的內(nèi)容,覺得內(nèi)容不錯(cuò)的朋友可以轉(zhuǎn)發(fā)關(guān)注小編一下!
下篇文章將介紹基于Sprin Security 實(shí)現(xiàn)的基本認(rèn)證及 OAuth2,大家得空可以學(xué)習(xí)一下子~~
學(xué)以致用,努力提升自己!
總結(jié)
以上是生活随笔為你收集整理的creo配置文件config选项详解_5年资深架构师重点聚焦:SpringBoot的配置详解+内嵌Servlet容器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wordcloud里面设置mask加载不
- 下一篇: 入职微软三个月了!