我希望拥有属性,这些属性可以通过spring中的@Value引用,这些属性只能依赖于其他属性来创建。特别是我有一个属性,该属性描述目录的文件系统位置。
myDir=/path/to/mydir
按照惯例,该目录中有一个文件,它总是被称为myfile.txt。
现在,我希望通过bean中的@Value注释同时访问目录和文件。有时我想以字符串的形式访问它们,有时以java.io.Files的形式访问它们,有时以java.io.Files的形式访问它们(顺便说一句,这是非常有效的!)但由于这种情况,按需串接字符串并不是一种选择。
所以我当然能做的就是声明两者,但我最终会
myDir=/path/to/mydir
myFile/path/to/mydir/myfile.txt
我想避免这种情况。
因此,我提出了一个@Configuration类,它接受该属性并将其添加为新的PropertySource:
@Autowired
private ConfigurableEnvironment environment;
@Value("${myDir}")
private void addCompleteFilenameAsProperty(Path myDir) {
Path absoluteFilePath = myDir.resolve("myfile.txt");
Map<String, Object> props = new HashMap<>();
props.put("myFile, absoluteFilePath.toString());
environment.getPropertySources().addFirst(new MapPropertySource("additional", props));
}
正如您所看到的,在我的上下文中,我甚至创建了一个PropertyEditor,它可以转换为_java.nio.file.Path_s。
现在的问题是,由于某种原因,这个“在我的机器上工作”(在我的IDE中),但是没有在预期的目标环境上运行。在那里我得到
java.lang.IllegalArgumentException: Could not resolve placeholder 'myFile' in string value "${myFile}"
发布于 2016-03-22 00:00:16
弹簧可以结合性能。
myDir=/path/to/mydir
myFile=${myDir}/myfile.txt
您还可以使用默认值,而不必首先在属性中定义myFile
:
属性文件
myDir=/path/to/mydir
在课堂上:
@Value("#{myFile:${myDir}/myfile.txt}")
private String myFileName;
发布于 2021-10-27 02:52:31
Spring表达式可用于引用属性。
在我的例子中
query-parm=QueryParam1=
query-value=MyParamaterValue
现在,在Spring中绑定它们。
@Configuration
public class MyConfig {
@Value("${query-param}${query-value}")
private String queryString;
}
上面的代码将把QueryParam1=MyParamaterValue注入变量queryString。
https://stackoverflow.com/questions/36136874
复制相似问题