首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring Boot embedded Tomcat不在ApplicationListener中加载外部属性文件

Spring Boot是一个用于构建独立的、生产级别的Spring应用程序的框架。它提供了许多开箱即用的功能和约定,使得开发者可以更加专注于业务逻辑的实现。

在Spring Boot中,可以使用嵌入式的Tomcat作为应用程序的Web服务器。嵌入式Tomcat是指将Tomcat服务器嵌入到应用程序中,而不是作为独立的服务器运行。这样做的好处是可以简化部署和配置过程,减少对外部Tomcat服务器的依赖。

在Spring Boot中,可以通过在application.properties或application.yml文件中配置属性来自定义应用程序的行为。然而,有时候我们可能希望将属性配置在外部的属性文件中,以便在不同环境中进行配置的切换。为了实现这个目的,可以使用ApplicationListener来加载外部属性文件。

ApplicationListener是Spring框架中的一个接口,用于监听应用程序事件。通过实现ApplicationListener接口,可以在应用程序启动时执行一些自定义的逻辑。在加载外部属性文件的情况下,可以创建一个自定义的ApplicationListener,然后在其onApplicationEvent方法中加载外部属性文件。

以下是一个示例的ApplicationListener实现,用于加载外部属性文件:

代码语言:txt
复制
import org.springframework.boot.context.event.ApplicationStartedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.PropertiesPropertySource;
import org.springframework.core.io.support.PropertiesLoaderUtils;

import java.io.IOException;
import java.util.Properties;

public class ExternalPropertiesListener implements ApplicationListener<ApplicationStartedEvent> {

    @Override
    public void onApplicationEvent(ApplicationStartedEvent event) {
        ConfigurableEnvironment environment = event.getApplicationContext().getEnvironment();
        try {
            Properties externalProperties = PropertiesLoaderUtils.loadProperties("external.properties");
            PropertiesPropertySource propertySource = new PropertiesPropertySource("externalProperties", externalProperties);
            environment.getPropertySources().addLast(propertySource);
        } catch (IOException e) {
            // 处理加载外部属性文件失败的情况
        }
    }
}

在上述示例中,我们通过PropertiesLoaderUtils.loadProperties方法加载了名为"external.properties"的外部属性文件,并将其添加到应用程序的环境中。这样,我们就可以在应用程序中使用这些外部属性了。

要在Spring Boot应用程序中使用这个自定义的ApplicationListener,可以在应用程序的启动类上添加@EnableAutoConfiguration注解,并将自定义的ApplicationListener注册为一个Bean。例如:

代码语言:txt
复制
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;

@EnableAutoConfiguration
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Bean
    public ExternalPropertiesListener externalPropertiesListener() {
        return new ExternalPropertiesListener();
    }
}

这样,当应用程序启动时,自定义的ApplicationListener就会被触发,从而加载外部属性文件。

对于Spring Boot中的嵌入式Tomcat和加载外部属性文件的更详细信息,可以参考腾讯云的Spring Boot相关产品和文档:

  1. Spring Boot:腾讯云提供的Spring Boot云托管服务,可帮助开发者快速构建和部署Spring Boot应用程序。
  2. Spring Boot部署指南:腾讯云的文档,介绍了如何在腾讯云上部署Spring Boot应用程序。
  3. Spring Boot开发指南:腾讯云的文档,提供了Spring Boot开发的基本知识和最佳实践。

请注意,以上提供的是腾讯云相关的产品和文档链接,如果需要了解其他云计算品牌商的相关产品和文档,请自行搜索。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Spring Boot 面试源码知识点

META-INF/spring.factories:这个文件列出了所有自动配置类的完整类名,Spring Boot 在启动时会加载这些类。2....内嵌服务器(Embedded Server)概念Spring Boot 支持内嵌的 Tomcat、Jetty 和 Undertow 等服务器,使得应用��以独立运行,无需依赖外部的应用服务器。...@ConditionalOnProperty:根据配置属性的值来决定配置类或者 Bean 是否被加载。4....ApplicationContextInitializer 和 ApplicationListener:在启动过程,SpringApplication 会调用这些接口来初始化上下文和监听事件。...外部配置(Externalized Configuration)概念Spring Boot 支持多种方式来外部化配置,包括 properties 文件、YAML 文件、环境变量和命令行参数等。

7721

Spring Boot 优雅重启知多少

作者:尹吉欢 转载自公众号:猿天地 项目在重新发布的过程,如果有的请求处理时间比较长,还没执行完成,此时重启的话就会导致请求中断,影响业务功能,优雅重启可以保证在停止的时候,不接收外部的新的请求,等待未完成的请求执行完成...; import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; import org.springframework.boot.context.embedded.tomcat.TomcatConnectorCustomizer...; import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; import...org.apache.catalina.connector.Connector; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer...; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.servlet.server.ServletWebServerFactory

2.1K20

Spring Boot 1.X和2.X优雅重启实战

项目在重新发布的过程,如果有的请求时间比较长,还没执行完成,此时重启的话就会导致请求中断,影响业务功能,优雅重启可以保证在停止的时候,不接收外部的新的请求,等待未完成的请求执行完成,这样可以保证数据的完整性...; import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; import org.springframework.boot.context.embedded.tomcat.TomcatConnectorCustomizer...; import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; import...org.apache.catalina.connector.Connector; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer...; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.servlet.server.ServletWebServerFactory

45310

Spring Boot 1.X和2.X优雅重启实战

,优雅重启可以保证在停止的时候,不接收外部的新的请求,等待未完成的请求执行完成,这样可以保证数据的完整性。...; import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; import org.springframework.boot.context.embedded.tomcat.TomcatConnectorCustomizer...; import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; import...org.apache.catalina.connector.Connector; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer...; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.servlet.server.ServletWebServerFactory

40730

Spring Boot(6) 原理和启动流程四、ApplicationContextInitializer、ApplicationContextAware、ApplicationContext、App

Spring Boot的核心启动器,包含了自动配置、日志和YAML); spring-boot-starter-tomcat: Tomcat容器 spring-web : 全栈式Web开发 spring-webmvc...文件的配置 一个工程项目中可以同时有多个META-INF/spring.factories文件(每个jar中都能有一个)。...例如在spring-boot-autoconfigure和spring-boot两个jar的META-INF/spring.factories文件,均有针对ApplicationContextInitializer...8.onRefresh():初始化其他的子容器类的bean,同时创建spring的内置tomcat,这在后期Springboot内嵌式tomcat详细阐述 8.registerListeners(...换句话说,就是这个类可以直接获取spring配置文件,所有引用到的bean对象。

1K41

SpringBoot源码分析

即会去spring-boot的jar包和spring-boot-autoconfigure的jar包下的spring.factories去查找上面两个标红的class对应的value。...可以看到,ApplicationContextInitializer对应的value有:(下图依次为spring-bootspring-boot-autoconfigure) 可以发现,一共获取到...6个value,并且debug调试也可以得到总数: ApplicationListener对应的value有,注意” \ “表示换行:(下图依次为spring-bootspring-boot-autoconfigure...容器的启动也是在这里操作的,refresh()方法的onfresh()方法被EmbeddedApplicationContext重写了,在此做了tomcat的启动加载,并且SpringMVC也是在这一步加载的...,结合AnnotationConfigApplicationContext可以通过注解方式启动Spring并初始化SpringIOC容器,该注解不在本文重点讨论范围之内。

24440

Spring Boot 1.X和2.X优雅重启实战

; import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; import org.springframework.boot.context.embedded.tomcat.TomcatConnectorCustomizer...; import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; import...org.apache.catalina.connector.Connector; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer...; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.servlet.server.ServletWebServerFactory...推荐相关阅读: 《Spring Boot 使用WebAsyncTask异步返回结果》 《Spring Boot Async异步执行任务》 《面试题-实现多线程的方式》

1.4K20

Spring Boot的资源文件属性配置

引言在Spring Boot应用程序,配置文件是管理应用程序行为的重要组成部分。资源文件属性配置允许开发者在不重新编译代码的情况下,对应用程序进行灵活地配置和调整。...配置文件类型在Spring Boot,常见的配置文件类型包括:application.properties:基于键值对的配置文件,易于阅读和编写。...外部属性(External Properties):可以通过spring.config.location指定外部的配置文件。...修改application.yml的欢迎消息,重启应用程序,验证属性值的动态加载和应用。...结论通过Spring Boot的资源文件属性配置,开发者可以方便地管理应用程序的各种配置,从而实现灵活的应用程序行为。

8910

原 荐 SpringBoot 2.0 系列0

保持与jar文件方式一致即可。 虽然也可以正常访问。但是application.yml的配置不生效。需要通过其他方式进行参数配置。...-2.9.5.jar BOOT-INF/lib/spring-boot-starter-tomcat-2.0.1.RELEASE.jar BOOT-INF/lib/tomcat-embed-core-8.5.29...此类工作内容是讲字节码文件加载到jvm。 2.2 SpringBoot执行 由上述分析可知,com.ricky.SpringBootApplication是我们加载SB的入口。...primarySources, "PrimarySources must not be null"); //赋值primarySources集合对象 说明此处是可以传递多个.class对象 当我们的启动类不在同一级包...实例的监听 实现方式类似上边 通过文件或者add方法都可以 setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class

89120

Spring-boot特性(2) 原

可以在ClassPath添加一个名为"banner.txt"的文件,然后在JVM设定"banner.location"的属性来指向他,还可以通过 banner.charset 来指定文件的编码。...文件创建一个org.springframework.context.ApplicationListener字段指向监听类列表,例如: org.springframework.context.ApplicationListener...加载外部属性值 我们一般将配置的数据记录在properties文件、YAML文件、环境变量,或者通过命令行参数来传入。Spring Boot提供了一套价值将这些外部数据加载到JVM的系统参数。.../config/都存在配置文件,那么加载过程会加载classpath:/config/路径下配置文件的所有属性,然后再加载file:./config/路径下配置文件属性并替换已有的属性。...[Tomcat].

97220

如何优雅地停止 Spring Boot 应用?

Spring Boot 2.3 增加了新特性优雅停止,目前 Spring Boot 内置的四个嵌入式 Web 服务器(Jetty、Reactor Netty、Tomcat 和 Undertow)以及反应式和基于...下面,我们先用新版本尝试下: Spring Boot 2.3 优雅停止 首先创建一个 Spring Boot 的 Web 项目,版本选择 2.3.0.RELEASE,Spring Boot 2.3.0....org.springframework.boot.web.embedded.tomcat 的 GracefulShutdown 里,大概逻辑就是先停止外部的所有新请求,然后再处理关闭前收到的请求,有兴趣的可以自己去看下...Spring Boot 旧版本优雅停止 在这里介绍 GitHub 上 issue 里 Spring Boot 开发者提供的一种方案: 选取的 Spring Boot 版本为 2.2.6.RELEASE,...Tomcat 容器,然后等待监听到关闭指令时执行,addConnectorCustomizers 方法可以把定制的 Connector 行为添加到内嵌的 Tomcat ,具体代码如下: @Bean

1.9K20

如何优雅地停止 Spring Boot 应用?

Spring Boot 2.3 增加了新特性优雅停止,目前 Spring Boot 内置的四个嵌入式 Web 服务器(Jetty、Reactor Netty、Tomcat 和 Undertow)以及反应式和基于...下面,我们先用新版本尝试下: Spring Boot 2.3 优雅停止 首先创建一个 Spring Boot 的 Web 项目,版本选择 2.3.0.RELEASE,Spring Boot 2.3.0....org.springframework.boot.web.embedded.tomcat 的 GracefulShutdown 里,大概逻辑就是先停止外部的所有新请求,然后再处理关闭前收到的请求,有兴趣的可以自己去看下...Spring Boot 旧版本优雅停止 在这里介绍 GitHub 上 issue 里 Spring Boot 开发者提供的一种方案: 选取的 Spring Boot 版本为 2.2.6.RELEASE,...Tomcat 容器,然后等待监听到关闭指令时执行,addConnectorCustomizers 方法可以把定制的 Connector 行为添加到内嵌的 Tomcat ,具体代码如下: @Bean

1.4K20

如何优雅地停止 Spring Boot 应用?

Spring Boot 2.3 增加了新特性优雅停止,目前 Spring Boot 内置的四个嵌入式 Web 服务器(Jetty、Reactor Netty、Tomcat 和 Undertow)以及反应式和基于...下面,我们先用新版本尝试下: Spring Boot 2.3 优雅停止 首先创建一个 Spring Boot 的 Web 项目,版本选择 2.3.0.RELEASE,Spring Boot 2.3.0....org.springframework.boot.web.embedded.tomcat 的 GracefulShutdown 里,大概逻辑就是先停止外部的所有新请求,然后再处理关闭前收到的请求,有兴趣的可以自己去看下...Spring Boot 旧版本优雅停止 在这里介绍 GitHub 上 issue 里 Spring Boot 开发者提供的一种方案: 选取的 Spring Boot 版本为 2.2.6.RELEASE,...Tomcat 容器,然后等待监听到关闭指令时执行,addConnectorCustomizers 方法可以把定制的 Connector 行为添加到内嵌的 Tomcat ,具体代码如下: @Bean

99120
领券