Propriedades da mola que dependem de outras propriedades
Eu gostaria de ter propriedades, que eu posso referenciar via @Value em grãos de primavera, que só pode ser criado depende de outras propriedades. Em particular, estou tendo uma propriedade, que descreve a localização do sistema de arquivos de um diretório.
myDir=/path/to/mydir
e por convenção, há um ficheiro nesse directório, que é sempre chamado myfile.txt .
Agora eu quero ter acesso a ambos, o diretório e o arquivo, através de anotações @valor dentro de meus grãos. E às vezes eu quero para aceder a eles como Strings, às vezes como ficheiros java.io.e às vezes como org.springframework.core.io.FileSystemResource (que, a propósito, funciona muito bem fora da caixa!). Mas por causa dessa combinação de cordas a pedido não é uma opção.
Por isso, o que eu podia fazer era declarar as duas coisas, mas acabaria por ficar com as duas coisas.myDir=/path/to/mydir
myFile/path/to/mydir/myfile.txt
E eu gostaria de evitar isso.
Então eu criei uma classe de configuração@, que pega a propriedade e a adiciona como nova 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));
}
Como podem ver, no meu contexto, até criei um autor adequado, que pode converter-se a java.nio.arquivo.Path s.
Agora o problema é que, por alguma razão, este "funciona na minha Máquina" (Na minha IDE), mas não funciona no ambiente alvo pretendido. Lá vou eu.
java.lang.IllegalArgumentException: Could not resolve placeholder 'myFile' in string value "${myFile}"
1 answers
A mola pode combinar propriedades
myDir=/path/to/mydir
myFile=${myDir}/myfile.txt
Você também pode usar um valor padrão sem definir o seu myFile
nas Propriedades no início:
Ficheiro de propriedades
myDir=/path/to/mydir
Na classe:
@Value("#{myFile:${myDir}/myfile.txt}")
private String myFileName;