提问者:小点点

如何在Spring启动中从不同位置读取活动配置文件?


我有我的application.properties文件在src/main/资源,我有我不同的活动配置文件(application-dev.properties和application-prod.properties)在不同的目录作为src/main/资源/属性。

我使用的是springboot 2.7.5版本

我试图配置它在application.properties文件,这是在目录src/main/资源的Spring. profile.active=dev

但它不是从目录src/main/Resources/properties读取application-dev.properties

为了解决这个问题,我创建了两个类

@Configuration
public class ActiveProfileConfiguration extends AbstractSecurityWebApplicationInitializer{

    private static final Logger log = LoggerFactory.getLogger(ApplicationJPAConfiguration.class);
    private static final String SPRING_PROFILES_ACTIVE = "SPRING_PROFILES_ACTIVE";
    String profile;
        protected void setSpringProfile(ServletContext servletContext) {
    if(null!= System.getenv(SPRING_PROFILES_ACTIVE)){
        profile=System.getenv(SPRING_PROFILES_ACTIVE);
    }else if(null!= System.getProperty(SPRING_PROFILES_ACTIVE)){
        profile=System.getProperty(SPRING_PROFILES_ACTIVE);
    }else{
        profile="local";
    }
    log.info("***** Profile configured  is  ****** "+ profile);

    servletContext.setInitParameter("spring.profiles.active", profile);
    }
    
}

@Configuration
@Profile("local")
public class DevPropertyReader {

    @Bean
    public static PropertySourcesPlaceholderConfigurer properties() {
        PropertySourcesPlaceholderConfigurer ppc = new PropertySourcesPlaceholderConfigurer();
    Resource[] resources = new ClassPathResource[] { new ClassPathResource("application.properties"), new ClassPathResource("EnvironmentProfiles/application-local.properties") };
    ppc.setLocations(resources);
    ppc.setIgnoreUnresolvablePlaceholders(true);
    System.out.println("env active profile");
    return ppc;
    }
    
}

但仍然无法解决这个问题。


共2个答案

匿名用户

Spring不会在您的自定义/properties文件夹中查找属性文件文件:

21.2应用程序属性文件SpringApplication将从以下位置的application.properties文件加载属性并将它们添加到Spring环境中:

  • 当前目录的 /config子目录。
  • 当前目录
  • 一个配置包
  • 类路径根

https://docs.spring.io/spring-boot/docs/1.0.1.RELEASE/reference/html/boot-features-external-config.html#boot-features-external-config-application-property-files

最简单的解决方案是将其移动到src/main/Resources文件夹的根目录。

匿名用户

将. properties放在如下结构中:

src/
├─ main/
│  ├─ resources/
│  │  ├─ application.properties
│  │  ├─ application-dev.properties
│  │  ├─ application-prod.properties

下面的Dockerfile示例在运行应用程序时设置正确的Spring Profile:

ENTRYPOINT java -Dspring.profiles.active=prod -jar /app.jar

但是还有许多其他选项通过WebApplicationStaralizer,BeansXML,Maven配置文件等…