当前位置: 首页 > 知识库问答 >
问题:

Spring PropertyPlaceholderConfigurer默认值覆盖实际属性值

黎曾笑
2023-03-14

我有一个bean,它使用@value注释填充属性,如下所示

@Value("${propbean.value : 'None'}")
private String value;

在我的应用程序上下文中,我有以下配置

<bean id="propbean"
      class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
      p:location="file:${path}/values.properties"
      p:ignoreResourceNotFound="true"
      p:ignoreUnresolveablePlaceholders="true" />

当values.properties文件不存在时,默认值“none”会按预期设置,但是当属性文件存在时,默认值仍会使用,即使我收到一条日志消息,说明属性文件是从PropertyPlaceholderConfigurer加载的

190315 14.23.44,517 {} {} {} INFO  (PropertiesLoaderSupport.java:172) Loading properties file from URL [file:/path/to/file/values.properties]

只有当属性文件丢失和/或占位符不可解析时,我才需要默认值生效;不是一直都是。我也尝试过使用SPEL,但由于这是一个PropertyPlaceholderConfigurer对象,而不是使用指令,SPEL解决方案对我不起作用。根据我的理解,当对占位符使用${value:default}格式时,只有当值为null时才替换默认值,但是如果我从值占位符中删除“:'none'”,属性就会正确解析!

共有1个答案

姜良哲
2023-03-14

希望这对将来的人有所帮助-问题是bean定义中的p:IgnoreUnresolveablePlaceHolders=“true”属性。显然,如果设置了默认值,这会指示Spring完全忽略正在读取到bean中的属性。

将属性/设置移除为false可以完全解决问题。

 类似资料:
  • 我有几个POJO,这将有一个货币数额。我的想法是创建一个通用对象(由货币和值组成),然后每当我想在我的POJOs中表示一个货币金额时,就会使用它: 由于将在多个POJO中使用,我无法用注释和属性,因为在所有情况下,列名并不总是相同的。有没有办法注释属性(如上例中的)以提供和属性的列名,以便jOOQ在映射/取消映射POJO时理解它们,类似于Hibernate解释请问?

  • 20.1 属性默认值 Spring Boot支持的一些库使用缓存来提高性能。例如,模板引擎会缓存已编译的模板,以避免重复解析模板文件。此外,Spring MVC可以在服务静态资源时将HTTP缓存的头部添加到响应中。 虽然缓存功能对生产环境非常有益,但在开发过程中可能会产生反作用,使您无法看到程序中刚刚做出的更改。由于这个原因,spring-boot-devtools默认会禁用那些缓存选项。 缓存选

  • 本文向大家介绍如何覆盖Spring Boot项目的默认属性?相关面试题,主要包含被问及如何覆盖Spring Boot项目的默认属性?时的应答技巧和注意事项,需要的朋友参考一下 这可以通过在application.properties文件中指定属性来完成。 例如,在Spring MVC应用程序中,您必须指定后缀和前缀。这可以通过在application.properties文件中输入下面提到的属性来

  • 本文向大家介绍C#属性的默认值,包括了C#属性的默认值的使用技巧和注意事项,需要的朋友参考一下 示例 可以使用初始化程序(C#6)设置默认值 如果它是只读的,则可以返回如下值:            

  • 问题内容: 我已经在现有的mysql数据库中反映了表的负载。我想表示的是,任何表中具有特定名称的任何列默认为datetime.now()。但是,天真地遍历表和列,仅对那些我发现具有特定名称的表和列设置默认设置是行不通的。session.flush()我收到以下错误: 这似乎与对_set_parent的调用(以及在sqlalchemy.schema的第721行中的调用)有关。 有谁知道是否有办法做到

  • 我只是想知道有没有什么方法可以为log4j中的属性替换提供默认值呢? 我想在Java系统属性中传递文件路径,然后与“${env:MySystemProperty}”一起使用。但如果开发人员忘记设置此属性怎么办?那么我希望在log4j2.xml中定义一些有意义的默认值。 你知道如何实现这个功能吗? 编辑: 环境替换对我不起作用: standalone.conf log4j2.xml 我可以在wild