如何基于弹簧轮廓加载属性文件

时间:2016-12-21 12:42:58

标签: java spring hibernate

如何创建项目架构以支持多个环境。在Spring的帮助下,每个环境都有不同属性文件的不同数据源,如(dev-propertiesfile,test-propertyFil,Production-propertyfile)

org.springframework.core.env.Environment;

4 个答案:

答案 0 :(得分:9)

将属性文件放在与application.property相同的位置,然后按 命名约定application-{profile}.properties之类的 application-dev.propertiesapplication-test.propertiesapplication-prod.properties

并在application.properties设置spring.profiles.active=dev,test

答案 1 :(得分:3)

我将逐步介绍Spring引导应用程序。

  1. /src/main/resources/application.properties 内提及 spring.profiles.active = dev (或产品)
  2. 创建 /src/main/resources/application-dev.properties 并在此处提供您的自定义开发配置。
  3. 创建 /src/main/resources/application-prod.properties ,并在此处提供自定义的产品配置。

运行。

答案 2 :(得分:2)

看看Spring Profile。您将定义一组配置文件配置,例如Test,Dev,Production。然后,当您启动应用程序时,您可以定义它应该使用的配置文件。

以下是一些tutorials如何使用。

这些人和你的问题一样:How to config @ComponentScan dynamic?

答案 3 :(得分:2)

对于Spring Boot应用程序,即使使用YAML文件

也可以轻松工作
spring: 
  profiles: dev
  property: this is a dev env
---
spring: 
  profiles: prod
  property: this is a production env 
---

但是,对于Spring MVC应用程序,它需要更多的工作。看看this link

基本上,它涉及两个步骤

  1. 在servlet上下文中获取Spring配置文件
  2. 如果您已在服务器上设置配置文件并希望它在您的应用程序中检索它,则可以使用System.getProperty或System.getenv方法。 如果没有找到配置文件,下面是获取配置文件并将其默认为本地配置文件的代码。

    private static final String SPRING_PROFILES_ACTIVE = "SPRING_PROFILES_ACTIVE";
    String profile;
    
    /**
     * In local system getProperty() returns the profile correctly, however in docker getenv() return profile correctly
     * */
    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);
    }
    
    1. 要访问application-dev.properties,请说现在需要使用 @Profile(" dev")在班级
    2. 以下代码将获取application-dev.properties和common.properties

      @Configuration
      @Profile("dev")
      public class DevPropertyReader {
      
      
          @Bean
          public static PropertyPlaceholderConfigurer properties() {
          PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
          Resource[] resources = new ClassPathResource[] { new ClassPathResource("properties/common.properties"), new ClassPathResource("properties/application-dev.properties") };
          ppc.setLocations(resources);
          ppc.setIgnoreUnresolvablePlaceholders(true);
          return ppc;
          }
      }
      

      要访问say application-prod.properties,您必须在类级别使用@Profile("prod")。更多细节可以是found here