最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot?server.port配置原理詳解

 更新時間:2021年12月30日 09:01:48   作者:fenglllle  
這篇文章主要介紹了Spring?Boot?server.port配置原理詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

SpringBoot server.port配置原理

我們經(jīng)常配置server.port=xxx,但其實這是一個比較復雜的過程才生效的,這次講講生效的過程。

1. autoConfigure

本質來源于自動配置

org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryConfiguration

  • TomcatServletWebServerFactory

為什么是這個類,核心是beanPostProcess原理

@ConfigurationProperties(prefix = "server", ignoreUnknownFields = true)
public class ServerProperties { 
	/**
	 * Server HTTP port.
	 */
	private Integer port;
  • beanPostProcess
public class WebServerFactoryCustomizerBeanPostProcessor implements BeanPostProcessor, BeanFactoryAware { 
 private ListableBeanFactory beanFactory; 
 private List<WebServerFactoryCustomizer<?>> customizers; 
 
 @Override
 public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
  if (bean instanceof WebServerFactory) {
   postProcessBeforeInitialization((WebServerFactory) bean);
  }
  return bean;
 } 
 
 @SuppressWarnings("unchecked")
 private void postProcessBeforeInitialization(WebServerFactory webServerFactory) {
  LambdaSafe.callbacks(WebServerFactoryCustomizer.class, getCustomizers(), webServerFactory)
    .withLogger(WebServerFactoryCustomizerBeanPostProcessor.class)
    .invoke((customizer) -> customizer.customize(webServerFactory));
 }
 
    private Collection<WebServerFactoryCustomizer<?>> getCustomizers() {
  if (this.customizers == null) {
   // Look up does not include the parent context
   this.customizers = new ArrayList<>(getWebServerFactoryCustomizerBeans());
   this.customizers.sort(AnnotationAwareOrderComparator.INSTANCE);
   this.customizers = Collections.unmodifiableList(this.customizers);
  }
  return this.customizers;
 }
 
 @SuppressWarnings({ "unchecked", "rawtypes" })
 private Collection<WebServerFactoryCustomizer<?>> getWebServerFactoryCustomizerBeans() {
  return (Collection) this.beanFactory.getBeansOfType(WebServerFactoryCustomizer.class, false, false).values();
 }

最終

beanFactory.getBeansOfType(WebServerFactoryCustomizer.class, false, false).values()

WebServerFactoryCustomizer對象.customize(webServerFactory)

@Configuration
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE)
@ConditionalOnClass(ServletRequest.class)
@ConditionalOnWebApplication(type = Type.SERVLET)
@EnableConfigurationProperties(ServerProperties.class)
@Import({ ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar.class,
  ServletWebServerFactoryConfiguration.EmbeddedTomcat.class,
  ServletWebServerFactoryConfiguration.EmbeddedJetty.class,
  ServletWebServerFactoryConfiguration.EmbeddedUndertow.class })
public class ServletWebServerFactoryAutoConfiguration {
 
 @Bean
 public ServletWebServerFactoryCustomizer servletWebServerFactoryCustomizer(ServerProperties serverProperties) {
  return new ServletWebServerFactoryCustomizer(serverProperties);
 }

這里就將port設置好了。

這里使用函數(shù)式編程,lambda表達式,將port的值設置進了

ConfigurableServletWebServerFactory ,即TomcatServletWebServerFactory對象

2. embed tomcat如何使用

tomcat創(chuàng)建時,會通過getBean方式獲取工廠

就是 TomcatServletWebServerFactory

然后設置connector,從TomcatServletWebServerFactory讀取port,設置connector,設置結束

小結一下

Spring Boot在解耦的時候繞了很多彎,先@Bean factory對象,然后BeanPostProcess,然后啟動embed tomcat 在factory 中new Tomcat 然后設置Connector,設置port。

server.port不起作用

啟動項目報錯:

org.apache.catalina.LifecycleException: Protocol handler start failed

懷疑可能端口號沖突,在 application.properties 添加 server.port=8080 未生效

立刻百度一圈沒找到答案(感覺可能自己犯的錯誤太低級),突然想起可能是環(huán)境配置里面的配置給覆蓋了

#讀取環(huán)境配置dev(開發(fā))/pro(生產(chǎn))/test(測試)
spring.profiles.active=dev

找到 application-dev.properties、application-prod.properties 發(fā)現(xiàn)果然存在

按照配置的 dev 找到 application-dev.properties 修改 server.port=8080啟動生效

在這里插入圖片描述

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 詳解如何在Spring Boot中實現(xiàn)容錯機制

    詳解如何在Spring Boot中實現(xiàn)容錯機制

    容錯機制是構建健壯和可靠的應用程序的重要組成部分,它可以幫助應用程序在面對異?;蚬收蠒r保持穩(wěn)定運行,Spring Boot提供了多種機制來實現(xiàn)容錯,包括異常處理、斷路器、重試和降級等,本文將介紹如何在Spring Boot中實現(xiàn)這些容錯機制,需要的朋友可以參考下
    2023-10-10
  • SpringBoot配置Access-Control-Allow-Origin教程

    SpringBoot配置Access-Control-Allow-Origin教程

    文章介紹了三種配置Spring Boot跨域訪問的方法:1. 使用過濾器;2. 在WebConfig配置文件中設置;3. 通過注解配置,作者分享了個人經(jīng)驗,并鼓勵讀者支持腳本之家
    2025-03-03
  • Java 利用dom方式讀取、創(chuàng)建xml詳解及實例代碼

    Java 利用dom方式讀取、創(chuàng)建xml詳解及實例代碼

    這篇文章主要介紹了Java 利用dom方式讀取、創(chuàng)建xml的相關資料,需要的朋友可以參考下
    2017-03-03
  • java 單例的五種實現(xiàn)方式及其性能分析

    java 單例的五種實現(xiàn)方式及其性能分析

    這篇文章主要介紹了java 單例的五種實現(xiàn)方式及其性能分析。的相關資料,需要的朋友可以參考下
    2017-07-07
  • JavaWeb response完成重定向實現(xiàn)過程詳解

    JavaWeb response完成重定向實現(xiàn)過程詳解

    這篇文章主要介紹了JavaWeb response完成重定向實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Idea+maven搭建SSH(struts2+hibernate5+spring5)環(huán)境的方法步驟

    Idea+maven搭建SSH(struts2+hibernate5+spring5)環(huán)境的方法步驟

    這篇文章主要介紹了Idea+maven搭建SSH(struts2+hibernate5+spring5)環(huán)境的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • springboot掃描自定義的servlet和filter代碼詳解

    springboot掃描自定義的servlet和filter代碼詳解

    本文是一篇根據(jù)作者工作經(jīng)歷總結出來的關于springboot掃描自定義的servlet和filter代碼詳解的文章,小編覺得非常不錯,這里給大家分享下,和朋友們一起學習,進步。
    2017-10-10
  • springBoot中的CORS跨域注解@CrossOrigin詳解

    springBoot中的CORS跨域注解@CrossOrigin詳解

    這篇文章主要介紹了springBoot中的CORS跨域注解@CrossOrigin詳解,通常,服務于?JS?的主機(例如?example.com)與服務于數(shù)據(jù)的主機(例如?api.example.com)是不同的,在這種情況下,CORS?可以實現(xiàn)跨域通信,需要的朋友可以參考下
    2023-12-12
  • java枚舉類的屬性、方法和構造方法應用實戰(zhàn)

    java枚舉類的屬性、方法和構造方法應用實戰(zhàn)

    這篇文章主要介紹了java枚舉類的屬性、方法和構造方法應用,結合實例形式分析了java枚舉類的定義、構造及相關應用操作技巧,需要的朋友可以參考下
    2019-08-08
  • 詳解java構建者模式Builder

    詳解java構建者模式Builder

    這篇文章主要介紹了java構建者模式Builder,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04

最新評論

灌云县| 萨嘎县| 丹寨县| 石泉县| 延庆县| 横峰县| 垫江县| 广灵县| 阜新市| 沧州市| 同心县| 凭祥市| 兴城市| 四平市| 岑巩县| 湖口县| 凤山市| 夏津县| 通城县| 潮州市| 融水| 南漳县| 石台县| 澄江县| 靖宇县| 南康市| 浙江省| 敖汉旗| 安阳市| 枣阳市| 巴楚县| 馆陶县| 酉阳| 马鞍山市| 宝兴县| 宁南县| 来凤县| 沂水县| 宝山区| 阿鲁科尔沁旗| 通河县|