【问题标题】:Spring @Value with multimine properties file value [duplicate]具有多属性文件值的 Spring @Value [重复]
【发布时间】:2013-06-03 16:28:00
【问题描述】:

弹簧(3.1): 给定一个具有多行值的属性文件(当然实际值要大得多):

requestStatuses=select sysdate \
from dual

我已经按照描述设置了 Spring:

<util:properties id="sql_lookup_data_repo"
     location="classpath:sql_lookup_data_repo.properties"/>

并按照描述使用:

  @Value("#{sql_lookup_data_repo.requestStatuses}")
  public void setRequestStatuses(String requestStatuses) {
    this.requestStatuses = requestStatuses;
  }

乍一看,它似乎在工作,但只读取了第一行属性值

当 spring 启动时,它正在正确读取文件(已调试)。 在评估 SpEL 表达式时,它似乎丢失了。

是否可以将此 spring 功能与多行属性文件值一起使用以及如何使用?

已检查:

【问题讨论】:

  • 我可以在多个地方使用多行属性值而没有任何问题(当然,这些行是连接的)。请描述确切的失败场景。

标签: java spring spring-el


【解决方案1】:

解决办法:

多行属性需要在每行末尾有一个反斜杠。

但是如果您在反斜杠之后有空格(不可见!)(在换行符之前),则评估将在该点停止。

(很抱歉,我无法在此处显示不可见字符 :),所以我无法提供示例)

警告:更多的是关于 Java 属性文件的不当使用!您可以在不使用 Spring 的 @Value 功能(纯 Properties.load())的情况下遇到此问题。

【讨论】:

  • 这几乎不是 Spring 的问题——它是一个格式错误的属性文件。
  • 续行必须以\结尾
  • 同意。只是很难找到,因为它都是关于隐形字符的。
  • 对,但我的意思是,这个问题和您的自我回答似乎将责任归咎于 Spring,而这正是 java 属性文件的工作方式。 Spring 委托 JVM 加载属性。如果它们没有很好地形成,它们就没有很好地形成。期间。
  • 部分同意:从 Spring @Value 可用的角度(在源代码中使用的方式),表达式可以属于任何 Spring bean(不一定是 Properties)。但在这种情况下,这当然是我对属性文件的不当使用。所以我重新提出答案以更好地反映现实。
【解决方案2】:

这对我来说很好......

lines=foo \
bar \
baz

.

@Value("#{fooprops.lines}")
public void setMultiLine(String lines) {
    System.out.println(lines);
}

.

foo bar baz

【讨论】:

  • 难以置信:今天它工作正常。这可能只是计算机重新启动或干净编译。我不知道。非常感谢。
猜你喜欢
  • 2019-08-08
  • 2018-11-03
  • 2013-04-02
  • 1970-01-01
  • 2013-12-15
  • 2017-02-09
  • 1970-01-01
  • 2020-05-16
  • 1970-01-01
相关资源
最近更新 更多