当前位置: 首页 > 面试题库 >

Spring配置文件可以选择@PropertySources吗?

周和歌
2023-03-14
问题内容

我有一个Spring 3.1 @Configuration,它需要一个属性foo来构建bean。该属性在中定义,defaults.properties但是overrides.properties如果应用程序具有活动的override Spring概要文件,则该属性可以覆盖该属性。

没有覆盖,代码将看起来像这样,并且可以工作…

@Configuration
@PropertySource("classpath:defaults.properties")
public class MyConfiguration {

    @Autowired
    private Environment environment;

    @Bean
    public Bean bean() {
        ...
        // this.environment.getRequiredProperty("foo");
        ...
    }
}

我想一个@PropertySource用于classpath:overrides.properties对队伍@Profile("overrides")。是否有人对如何实现这一目标有任何想法?我考虑过的某些选项是重复的@Configuration,但会违反DRY或对的编程操作ConfigurableEnvironment,但我不确定environment.getPropertySources.addFirst()调用将转到何处。

如果我直接使用注入属性@Value,则将以下内容放置在XML配置中有效,但使用EnvironmentgetRequiredProperty()方法时则无效。

<context:property-placeholder ignore-unresolvable="true" location="classpath:defaults.properties"/>

<beans profile="overrides">
    <context:property-placeholder ignore-unresolvable="true" order="0"
                                  location="classpath:overrides.properties"/>
</beans>

如果你现在尝试这样做,请查看Spring Boot的YAML支持,特别是“使用YAML代替属性”部分。那里的个人资料支持将使这个问题无济于事,但是还没有@PropertySource支持。


问题答案:

将覆盖添加到@PropertySource静态内部类中。不幸的是,你必须一起指定所有属性源,这意味着创建一个“默认”配置文件来替代“替代”。

@Configuration
public class MyConfiguration
{
    @Configuration
    @Profile("default")
    @PropertySource("classpath:defaults.properties")
    static class Defaults
    { }

    @Configuration
    @Profile("override")
    @PropertySource({"classpath:defaults.properties", "classpath:overrides.properties"})
    static class Overrides
    {
        // nothing needed here if you are only overriding property values
    }

    @Autowired
    private Environment environment;

    @Bean
    public Bean bean() {
        ...
        // this.environment.getRequiredProperty("foo");
        ...
    }
}


 类似资料:
  • 我们正在开发Spring Boot2.1.6,我们需要在应用程序中实现Spring Boot profile 我们的项目中目前有两个属性文件application.properties和bucket.properties(s3配置)文件。 上面的配置工作正常,spring boot能够正确地拾取文件。 但是我想在资源文件夹中创建以下类型的文件夹结构来正确地隔离文件。 一旦这样做,我就在上面的Pro

  • 我试图为我的生产环境创建一个构建版本。在我的SpringWeb应用程序中,我有4个.yml文件 应用程序.yml application-development.yml application-staging.yml application-production.yml 在应用中。yml文件,我指定 我使用maven创建一个构建的命令是 在我的目标文件夹中,我可以看到所有属性和我的生产设置没有出现

  • 问题内容: 我正在尝试创建一个AJAX多重上传,它将在表单/文件输入中获取所有选定的文件,并通过我的AJAX PHP控制器上传该文件。在此过程中,我使用jQuery(1.11.3)和jQuery-Form插件。 除了一个非常烦人的问题,其他所有东西都可以正常工作。当用户使用文件输入选择了几个文件,然后继续选择另外两个文件时,先前选择的文件将从“ files []”数组中删除。以下是我的HTML5文

  • 我想在application.properties中定义高级文件日志记录,以方便利用我的log4j2.xml文件配置。我的log4j2配置本身运行良好,但是我希望控制日志级别以及application.properties文件中的日志文件和路径信息。我在应用程序的pom文件中有spring-boot-starter-log4j2依赖项。 在log4j2.xml中,我有一个属性 ,其中LOG-DIR

  • 给定一个测试类,如: 我得到了错误: java.lang.IllegalStateException:配置错误:发现测试类[com.example.myControllerTest]的多个@BootStrapWith声明:[@org.springframework.test.context.bootStrapWith(value=class org.springframework.boot.tes

  • 本文向大家介绍input上传文件可以同时选择多张吗?怎么设置?相关面试题,主要包含被问及input上传文件可以同时选择多张吗?怎么设置?时的应答技巧和注意事项,需要的朋友参考一下