junit测试的setProperty和ActiveProfiles注释的区别

时间:2017-07-04 08:59:39

标签: spring profiles

我有不同环境的配置文件:prod.properties,dev.propertites和test.properties。

使用

通过application-context.xml文件加载属性文件
  

$ {spring.profiles.active}的.properties

并传入-Dspring.profiles.active标志。这适用于我的3个环境。

对于Junit测试,我正在尝试使用

  

@ActiveProfiles( “测试”)

在我的测试类中,但是$(spring.profiles.active)没有解析。但是当我使用

  

System.getProperties()。的setProperty( “spring.profiles.active”,   “测试”);

它解决得很好。

我知道@ActiveProfiles仅适用于测试类,但为什么不设置spring.profiles.active属性?它只影响使用哪些bean吗?

这也没有说明谁最适合处理配置文件和属性文件。 Spring profiles and Testing

更新 到目前为止,我已经在我的应用程序上下文文件中使用了以下内容:

<beans profile="dev,prod">
<context:property-placeholder
      location="classpath:META-INF/properties/generic.properties,
        classpath:META-INF/properties/${spring.profiles.active}/${spring.profiles.active}.properties"/>
        <context:component-scan base-package="com.my.package.to.scan"/>
 </beans>       

<beans profile="test">
    <context:property-placeholder
      location="classpath:META-INF/properties/generic.properties,
        classpath:META-INF/properties/test/test.properties"/>
<context:component-scan base-package="com.my.package.to.scan"/>
</beans>

1 个答案:

答案 0 :(得分:0)

顾名思义@ActiveProfile s ,这是个人资料数组。

/**
 * The bean definition profiles to activate.
 * <p>This attribute may <strong>not</strong> be used in conjunction with
 * {@link #value}, but it may be used <em>instead</em> of {@link #value}.
 */
@AliasFor("value")
String[] profiles() default {};

尝试使用@ActiveProfiles({"test"})