Я хочу программно читать значения через аннотацию Spring @Value(...). Вызовите код Spring программно за аннотацией @Value(...).
Все примеры, которые я нашел по этой теме, объясняют, как добавить новый файл *.properties в контекст Spring. Но в моем случае я использую внешнее хранилище ключей/значений, Hashicorp consul, и хочу прочитать значения из этого внешнего хранилища KV. Аннотация Spring работает нормально. Он правильно считывает значения из consul.
Мой код должен быть прозрачным с точки зрения приложения. Я не хочу видеть в своем проекте код, связанный с consul, например:
ConsulClient consulClient = null;
consulClient.getKVValue("key").toString();
Если я изменю хранилище KV в приложении, я не захочу изменять код Java.
Если возможно, я хотел бы программно вызвать код Spring, стоящий за аннотацией @Value(...), и получить значение ключа стандартным способом Spring.
@JAsgarov Не могли бы вы опубликовать @Autowire Environment env как решение? Я бы принял это как решение.




Чтобы программно загружать значения из файлов свойств в Spring, вы можете использовать bean-компонент Environment (см. javadoc).
Для этого просто выполните автоподключение компонента и используйте метод getProperty():
@Component
public class Foo {
@Autowired
private Environment environment;
public void yourMethod() {
String value = this.environment.getProperty("key");
// do whatever
}
}
Если вы просто хотите динамически загружать свойства с помощью собственного логина, я ответил на аналогичный вопрос здесь , но я думаю, что уже существует существующее решение для hashicorp