来自Tomcat的Spring Boot配置文件位置

时间:2019-03-18 21:45:56

标签: spring-boot tomcat

我正在尝试设置后端应用程序,因此它会根据环境获取不同的配置文件。

在开发环境中,我想从类路径中加载默认的application.yml。当我通过mvn spring-boot:runjava -jar ./target/myapp.war

运行应用程序时,应该是这种情况

但是,当此应用在Tomcat上运行时,应从服务器特定的文件(例如, /etc/apps/myapp/application.yml(不是来自classpath的默认值),因为服务器具有不同的mongodb凭据等...

我不想使用profiles,因为这意味着我需要将服务器凭据放入application.yml中github上的项目中。我只希望服务器管理员知道这一点,而开发人员对此一无所知。

有什么办法可以告诉tomcat中的该应用程序加载不同的配置文件。

在此Tomcat中,我还有其他使用Spring Boot的应用程序,因此我需要一些独立的解决方案。并非全局设置spring.config.location,因为所有应用程序都会加载该文件。

2 个答案:

答案 0 :(得分:0)

如果您想从外部位置读取属性,请在应用程序中写入bootstrap.yml,然后删除application.yml

bootstrap.yml:

spring:
  config:
    location: file:/home/external/properties/location/
    name: application
  profiles:
    active: dev

文件位置:/home/external/properties/location/

假设您需要开发和生产环境,然后将此3个属性文件保存在此位置。

application.yml

application-dev.yml

application-prod.yml

Spring Boot首先读取application.yml属性。如果在dev中设置了活动配置文件bootstrap.yml,则application.yml的值将被application-dev.yml 覆盖

或者您可以使用配置服务器

this

答案 1 :(得分:0)

您可以将@PropertyResource注释与上下文xml一起使用。
注意:ignoreResourceNotFound不会在找不到文件时抛出异常,例如对于Dev env。

@Configuration
  @PropertySources({
    @PropertySource("classpath:application.properties"),
    @PropertySource(value = "file:${config.file}", ignoreResourceNotFound=true)
    })
public class AppConfig {
    //...
}

/META-INF/context.xml

<Context>
    <Parameter name="config.file" value="/yourpath/application.properties"/>
</Context>

如果您不想在项目内部的context.xml中保存路径,则可以使用其他方法来定义应用程序级上下文,具体取决于您的tomcat版本。请refer在此处以获取有关Tomcat 9的详细信息。