Имя Spring Qualifier на основе весеннего профиля в Spring MVC

В моем Spring Config я определил три bean-компонента следующим образом.

   <bean id="validationFlag-dev" class="java.lang.Boolean">
        <constructor-arg value="false"/>
    </bean>
    <bean id="validationFlag-test" class="java.lang.Boolean">
        <constructor-arg value="true"/>
    </bean>
    <bean id="validationFlag-prod" class="java.lang.Boolean">
        <constructor-arg value="true"/>
    </bean>

В моем сервисе я бы хотел @Autowired bean на основе профиля пружины. Я пытаюсь, как указано ниже, чтобы определить имя квалификатора на основе активного профиля пружины, но он дает ошибку, не может найти компонент с квалификатором. Как я могу обработать имя квалификатора в этой ситуации весной MVC. Пожалуйста, порекомендуйте.

@Autowired
@Qualifier("validationFlag-${spring.profiles.active}")
Boolean validationFlag;

2 ответа

Вы не используете профили правильно. Вы должны создать экземпляр одного компонента, а не каждого компонента для каждого профиля, и делать это в зависимости от того, какой профиль активен.

Например:

<beans profile="dev">
  <bean id="validationFlag" class="java.lang.Boolean">
    <constructor-arg value="false"/>
  </bean>
</beans>

Тогда просто выполните автоматическое подключение следующим образом:

@Autowired
@Qualifier("validationFlag")
Boolean validationFlag;

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

Просто создайте файл свойств для каждого профиля.
например, для профиля dev создайте application-dev.properties и установите свойствоvalidation.flag=false

Чтобы получить этот флаг, используйте

@Value("{validation.flag}") Boolean validFlag;

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