【问题标题】:Spring Qualifier name based on the spring profile in Spring MVCSpring Qualifier 名称基于 Spring MVC 中的 spring 配置文件
【发布时间】:2018-11-12 16:14:01
【问题描述】:

在我的 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。 我正在尝试按照下面的方法根据活动的弹簧配置文件定义限定符名称,但它给出了一个错误,找不到带有限定符的 bean。 在这种情况下,我如何在 Spring MVC 中处理限定符名称。请指教。

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

【问题讨论】:

    标签: java spring spring-mvc spring-data spring-config


    【解决方案1】:

    您没有正确使用配置文件。您应该实例化一个 bean,而不是每个配置文件的每个 bean,并根据哪个配置文件处于活动状态来执行此操作。

    例如:

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

    然后以这种方式自动接线:

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

    【讨论】:

      【解决方案2】:

      在您的情况下,可能更简单的解决方案是将此标志添加为属性。

      只需为每个配置文件创建属性文件。
      例如为开发配置文件创建 application-dev.properties 并设置属性 validation.flag=false

      要检索此标志,请使用

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-09
        • 2017-07-13
        • 2021-02-15
        • 2011-01-08
        • 2015-07-11
        • 1970-01-01
        相关资源
        最近更新 更多