Как вызвать @Value(..) программно

Я хочу программно читать значения через аннотацию Spring @Value(...). Вызовите код Spring программно за аннотацией @Value(...).

Все примеры, которые я нашел по этой теме, объясняют, как добавить новый файл *.properties в контекст Spring. Но в моем случае я использую внешнее хранилище ключей/значений, Hashicorp consul, и хочу прочитать значения из этого внешнего хранилища KV. Аннотация Spring работает нормально. Он правильно считывает значения из consul.

Мой код должен быть прозрачным с точки зрения приложения. Я не хочу видеть в своем проекте код, связанный с consul, например:

ConsulClient consulClient = null;
consulClient.getKVValue("key").toString();

Если я изменю хранилище KV в приложении, я не захочу изменять код Java.

Если возможно, я хотел бы программно вызвать код Spring, стоящий за аннотацией @Value(...), и получить значение ключа стандартным способом Spring.

Если вы просто хотите динамически загружать свойства с помощью собственного логина, я ответил на аналогичный вопрос здесь , но я думаю, что уже существует существующее решение для hashicorp

J Asgarov 14.07.2024 17:27

@JAsgarov Не могли бы вы опубликовать @Autowire Environment env как решение? Я бы принял это как решение.

zappee 14.07.2024 18:54
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы программно загружать значения из файлов свойств в Spring, вы можете использовать bean-компонент Environment (см. javadoc).

Для этого просто выполните автоподключение компонента и используйте метод getProperty():

@Component
public class Foo {
    @Autowired
    private Environment environment;

    public void yourMethod() {
        String value = this.environment.getProperty("key");
        // do whatever
    }
}

Другие вопросы по теме