2017-08-03 9 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を、このコンポーネントを使用します。

#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ファイル:ここで

は私のsrc /メイン/リソース/ DBCONFIG/base.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をアサートしません。

もう1つのことは、すべての動作がSpringモジュールで正常に機能し、オーバーライドがここにロードされてロードされていることです。私の問題はテストケースの問題です。

私は何が間違っているのでしょうか?

EDIT 1:ここではDataBaseComponentは次のとおりです。

@Configuration 
@EnableAutoConfiguration 
@ComponentScan 
open class DatabaseComponent 

私はまた、GitHubの上で私のコードを置く:あなたの特性がgroups.base.overrideなくgroups.datasourceと呼ばれているのでhttps://github.com/romainbsl/spring-database-sharding

+0

にあなたがDatabaseComponentのソースコードを共有することはできますか? – chomnoue

+0

OK、コードとgithubのリンクで私のポストを編集しました – romainbsl

答えて

2

@Test 楽しいtestOverrideConfiguration(){ アサート(env.getProperty( "groups.datasource.override [1] .nameの")== "preprod") アサート(ENVを。試しgetProperty( "groups.datasource.override [1] .url")== "jdbc:oracle:thin:@url:1542:sid" アサート(env.getProperty( "groups.datasource.override [1] .username ")==" user ") アサート(env.getProperty(" groups.datasource.override [1] ") .driver ")=="クラス名= oracle.jdbc.driver.OracleDriver ") }つまり

を、testOverrideConfiguration(に[0] [1]でを置き換える)、または私たち[0] override.properties

+0

ええ、ありがとう、私はすべての方法で私のconfsを変更し、私はついにテストを台無しにしました。 – romainbsl

1

はそれがありません。あなたがテストに入れたときにオーバーライドしますか?

関連する問題