Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 依赖于其他属性的弹簧属性_Java_Spring - Fatal编程技术网

Java 依赖于其他属性的弹簧属性

Java 依赖于其他属性的弹簧属性,java,spring,Java,Spring,我希望有一些属性,我可以通过Springbeans中的@Value引用,这些属性只能依赖于其他属性来创建。 特别是我有一个属性,它描述目录的文件系统位置 myDir=/path/to/mydir 按照惯例,这个目录中有一个文件,它总是被称为myfile.txt 现在我想通过bean中的@Value注释访问目录和文件。有时我想以字符串的形式访问它们,有时以java.io.Files的形式访问,有时以org.springframework.core.io.FileSystemResource的形式

我希望有一些属性,我可以通过Springbeans中的@Value引用,这些属性只能依赖于其他属性来创建。 特别是我有一个属性,它描述目录的文件系统位置

myDir=/path/to/mydir
按照惯例,这个目录中有一个文件,它总是被称为myfile.txt

现在我想通过bean中的@Value注释访问目录和文件。有时我想以字符串的形式访问它们,有时以java.io.Files的形式访问,有时以org.springframework.core.io.FileSystemResource的形式访问(顺便说一句,它在开箱即用的情况下非常好!)。但正因为如此,按需连接字符串不是一种选择

所以我当然可以做的就是声明两者,但最终我会

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));
}

Spring可以组合属性

myDir=/path/to/mydir 
myFile=${myDir}/myfile.txt
您也可以使用默认值,而无需首先在属性中定义
myFile

属性文件

myDir=/path/to/mydir
课堂上:

@Value("#{myFile:${myDir}/myfile.txt}")
private String myFileName;

您可能可以将
${myDir}
放在属性文件中(值得一试),或者使用
myFile=myFile.txt
然后使用
@Value(“${myDir}/${myFile}”)
谢谢!我已经有了这个解决方案,但是我没有在文件中定义组合的想法。您知道如果
myDir
myFile
application.properties
中定义了
myDir
,并且您在
application-dev.properties
中为特定的Spring概要文件重写
myDir
会发生什么吗?
myFile
会被重新计算吗?如果
myFile
是在
application.properties
中定义的,没有
${myDir}
,则不会。如果您包括它,例如:
myFile=${myDir}/mySubfolder/myFile.txt
,那么在这种情况下,当您使用de
dev
profile时,它会重新计算它
@Value("#{myFile:${myDir}/myfile.txt}")
private String myFileName;