Dynami c PropertyInjection в Apache Camel Bean - PullRequest
1 голос
/ 09 марта 2020

Я использую аннотацию @ PropertyInject , чтобы получить свойства из файла application.properties для использования в моих bean-компонентах.
Обычно это работает нормально, но теперь мне нужно иметь возможность изменить введенное свойство на основе значения заголовка. В моей голове это выглядит примерно так:

@PropertyInject(PROPERTY_NAME)  
private String property;

public void pickProperty(String msgVersion) {
        if (msgVersion.equals("A")) {
            PROPERTY_NAME = "property.firstType.name";  
        } else {
            PROPERTY_NAME = "property.secondType.name";
        }
    }

Я подумал только о том, чтобы ввести оба свойства и решить в основном методе, какой из них использовать, но это похоже на обходной путь и получит немного раздут, если будет добавлено больше версий.
Есть ли простой способ сделать это?

1 Ответ

0 голосов
/ 12 марта 2020

теперь мне нужно иметь возможность изменять введенное свойство на основе значения заголовка

Свойства и компоненты создаются при запуске приложения и обычно не изменяются пока приложение работает. Они оба имеют область приложения.

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

Как вы сами себе предложили: вы можете внедрить оба свойства в Бин и предоставить метод, который вызывается один раз для каждого сообщения, чтобы получить правильное значение

@PropertyInject(PROPERTY_A)  
private String propertyA;
@PropertyInject(PROPERTY_B)  
private String propertyB;

// called for every message processing
public String pickProperty(@Header("msgVersion") String msgVersion) {
    if (msgVersion.equals("A")) {
        return propertyA;
    } else {
        return propertyB;
    }
}

Это не обходной путь , но просто метод, который возвращает другой результат, основанный на вводе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...