【问题标题】:Annotation to set a specific system property in Spring 3.0?在 Spring 3.0 中设置特定系统属性的注释?
【发布时间】:2014-02-20 17:13:34
【问题描述】:

我有一组单元测试。有些人会使用dataSource,有些人会想使用hsqlbDataSource。这个数据源不是连接到我的单元测试/代码中的 bean,而是通过模板和事务管理器传递使用的。因此我打算像这样使用 bean defs:

<jee:jndi-lookup id="dataSource" jndi-name="jdbc/myDataSource"
    cache="true" resource-ref="true" lookup-on-startup="false"
    proxy-interface="javax.sql.DataSource" />

<jee:jndi-lookup id="hsqlbDataSource" jndi-name="jdbc/myDataSource"
                 cache="true" resource-ref="true" lookup-on-startup="false"
                 proxy-interface="javax.sql.DataSource" />

<bean id="qmat-das-jdbcTemplate"
    class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate"
    c:dataSource-ref="${test.datasource:dataSource}" />

<bean id="transactionManager"
    class="org.springframework.transaction.jta.WebSphereUowTransactionManager">
    <property name="dataSource" ref="${test.datasource:dataSource}"/>
</bean>

我希望我的单元测试(当然有很多)选择要使用的数据源。理想情况下,对我来说有意义的是每个单元测试都有一个注释,该注释将系统属性设置为用自己的覆盖默认数据源。有没有一种优雅的方法可以在没有属性文件的情况下实现这一点,而只需通过注释设置 java 属性?

【问题讨论】:

    标签: java spring unit-testing


    【解决方案1】:

    使用注释无法使用开箱即用的功能,但请查看Spring 3 profiles,因为它允许激活/停用 bean 组。

    可以使用系统属性或通过代码激活 bean。这段代码可以放在一个测试超类中来激活仅测试bean:

    springContext.getEnvironment().setActiveProfiles("test")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-20
      • 2011-12-02
      • 1970-01-01
      • 2016-08-09
      • 1970-01-01
      • 1970-01-01
      • 2016-07-02
      相关资源
      最近更新 更多