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}"
Author: realsim, 2016-03-21

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;
 13
Author: Sylvain Deschenes, 2018-04-26 04:30:07