我想要通過@Value在Spring bean中引用的屬性,只能創建依賴於其他屬性的屬性。 特別是我有一個屬性,它描述了一個目錄的文件系統位置。取決於其他屬性的彈簧屬性
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));
}
正如你所看到的,在我的方面,我甚至創造了一個屬性編輯器,可以轉換成java.nio.file.Path s。
現在的問題是,由於某種原因,這個「在我的機器上工作」(在我的IDE),但不能在預期的目標環境上運行。在那裏,我得到
java.lang.IllegalArgumentException: Could not resolve placeholder 'myFile' in string value "${myFile}"
你可能會把'$ {myDir}'放在屬性文件中(值得一試IMHO) – 2016-03-21 17:17:00
或者使用'myFile = myfile.txt'並且以後使用'@Value(「$ {myDir}/$ { myFile}「)' – 2016-03-21 17:22:38