2017-08-03 32 views
4

我遇到了一個有線問題,並且沒有找到任何提示。Spring PropertySources已加載但未在測試中應用

我正在處理與屬性文件的數據庫分片配置。 我得到了它有責任加載這些屬性的類:

@Component 
@PropertySources(value = *arrayOf(
    PropertySource("classpath:/dbconfig/base.properties"), 
    PropertySource("classpath:/dbconfig/override.properties", ignoreResourceNotFound = true) 
)) 
@ConfigurationProperties("groups.datasource") 
class DbConfig { 
    val base: List<DataSourceProperties> = ArrayList() 
    val override: List<DataSourceProperties> = ArrayList() 
} 

然後,我使用這個組件的配置類設置我datasrouces。

這裏是我的src/main /資源/ DBCONFIG/base.properties文件:

#Spring Boot Config for Oracle 
# CENTRAL 
groups.datasource.base[0].name=central 
groups.datasource.base[0].url=jdbc:oracle:thin:@url:1530:sid 
groups.datasource.base[0].username=user 
groups.datasource.base[0].password=passwd 
groups.datasource.base[0].driver=class name=oracle.jdbc.driver.OracleDriver 

而且我的src /測試/資源/ DBCONFIG/override.properties文件:

#Spring Boot Config for Oracle 
# PREPROD 
groups.base.override[1].name=preprod 
groups.base.override[1].url=jdbc:oracle:thin:@user:1542:sid 
groups.base.override[1].username=user 
groups.base.override[1].password=passwd 
groups.base.override[1].driver=class name=oracle.jdbc.driver.OracleDriver 

而且這裏是我的測試類:

@RunWith(SpringJUnit4ClassRunner::class) 
@SpringBootTest(classes = arrayOf(DatabaseComponent::class)) 
open class DatabaseComponentTest { 

    @Autowired 
    lateinit var env: Environment 

    @Test 
    fun testBaseConfiguration() { 
    assert(env.getProperty("groups.datasource.base[0].name") == "central") 
    assert(env.getProperty("groups.datasource.base[0].url") == "jdbc:oracle:thin:@url:1530:sid") 
    assert(env.getProperty("groups.datasource.base[0].username") == "user") 
    assert(env.getProperty("groups.datasource.base[0].password") == "passwd") 
    assert(env.getProperty("groups.datasource.base[0].driver") == "class name=oracle.jdbc.driver.OracleDriver") 
    } 

    @Test 
    fun testOverrideConfiguration() { 
    assert(env.getProperty("groups.datasource.override[0].name") == "preprod") 
    assert(env.getProperty("groups.datasource.override[0].url") == "jdbc:oracle:thin:@url:1542:sid") 
    assert(env.getProperty("groups.datasource.override[0].username") == "user") 
    assert(env.getProperty("groups.datasource.override[0].password") == "passwd") 
    assert(env.getProperty("groups.datasource.override[0].driver") == "class name=oracle.jdbc.driver.OracleDriver") 
    } 

} 

在調試模式下,當我查看classLoader時,文件override.properties似乎充滿了他所有的價值。

另外,testBaseConfiguration確實有效,並聲明爲true。 雖然,testOverrideConfiguration不,並且聲明爲false。另一件事,所有這些行爲在Spring模塊中運行良好,覆蓋在這裏並加載。我的問題只是針對我的測試案例。

任何想法我做錯了什麼?

編輯1:這裏是DataBaseComponent:

@Configuration 
@EnableAutoConfiguration 
@ComponentScan 
open class DatabaseComponent 

我也把我的代碼在GitHub上:https://github.com/romainbsl/spring-database-sharding

+0

你能共享DatabaseComponent源代碼替換[0]? – chomnoue

+0

好吧,我用代碼和github鏈接編輯我的帖子 – romainbsl

回答

2

嘗試

@Test 樂趣testOverrideConfiguration(){ 斷言(env.getProperty( 「groups.datasource.override [1]。名稱」)== 「preprod」) 斷言(ENV。 getProperty(「groups.datasource.override [1] .url」)==「jdbc:oracle:thin:@url:1542:sid」) assert(env.getProperty(「groups.datasource.override [1] .username 「)==」user「) assert(env.getProperty(」groups.datasource.override [1] .password「)==」passwd「) assert(env.getProperty(」groups.datasource.override [1] .driver「)==」class name = oracle.jdbc.driver.OracleDriver「) }

換句話說,由[1]中testOverrideConfiguration()或我們[0]在override.properties

+0

是的,謝謝,我改變了我的各種方式,我終於搞砸了我的測試。 – romainbsl

1

這難道不是因爲你的屬性稱爲groups.base.override而不是groups.datasource。你放在你的測試中覆蓋嗎?