2017-02-28 7 views
0

Kotlin関数のパラメータでは、常にパラメータのレベルで@Qualifier()が使用されないようにする値があります。Kotlin関数で@Qualifierを操作する

同じアプリケーション内で頻繁にアクセスされるさまざまなデータベースの設定クラスに複数のDataSourceを作成したい場合は、これを構成するための推奨方法は何ですか?

Javaでかなり一般的だった以下のことは、Kotlinでは許可されていません。

@Configuration 
class DatabaseAdminConfig { 

    @Bean 
    @ConfigurationProperties(prefix = "spring.ds_admin") 
    fun adminDataSource(): DataSource { 
     return DataSourceBuilder.create().build() 
    } 

    @Bean 
    fun adminJdbcTemplate(@Qualifier("adminDataSource") dsAdminDb: DataSource): JdbcTemplate { 
     return JdbcTemplate(dsAdminDb) 
    } 

    @ConfigurationProperties(prefix = "spring.ds_widget") 
    fun widgetDataSource(): DataSource { 
     return DataSourceBuilder.create().build() 
    } 

    @Bean 
    fun widgetJdbcTemplate(@Qualifier("widgetDataSource") widgetDataSource: DataSource): JdbcTemplate { 
     return JdbcTemplate(widgetDataSource) 
    } 
} 

答えて

2

同じクラスの依存関係をSpringの依存関係を必要とするメソッドに挿入する必要はありません。メソッドを直接呼び出すことができます。

@Configuration 
class DatabaseAdminConfig { 

    @Bean 
    @ConfigurationProperties(prefix = "spring.ds_admin") 
    fun adminDataSource() = DataSourceBuilder.create().build() 

    @Bean 
    fun adminJdbcTemplate() = JdbcTemplate(adminDataSource()) 

    @Bean 
    @ConfigurationProperties(prefix = "spring.ds_widget") 
    fun widgetDataSource() = DataSourceBuilder.create().build() 

    @Bean 
    fun widgetJdbcTemplate() = JdbcTemplate(widgetDataSource()) 
} 

PS:function expression bodies(上記のように)Spring Configurationクラスをさらに簡潔にします。

PPS:@Qualifierは私にとってまったく問題ありません。私はちょうどそれをテストした。

PPPS:具体的な問題を解決するために、私がコメントしたように:javax.inject.Qualifier注釈を誤ってインポートしているに違いありません。これはうまくいかないでしょう。インポートする必要がありますorg.springframework.beans.factory.annotation.Qualifier

+0

ありがとうございます!うん、ここの例は、私が走っていた問題を示すために思いつく、もっとも簡単な非特定の人為的な例です。パラメータで@Qualifierを使用しようとするエラーは、「この注釈はターゲット 'valueパラメータ'には適用されません」です。 – sclarson

+1

誤って 'javax.inject.Qualifier'アノテーションをインポートする必要があります。これは動作しません。 'org.springframework.beans.factory.annotation.Qualifier'アノテーションをインポートする必要があります。 – Strelok

関連する問題