2017-02-28 94 views
0

在科特林功能参数与@Qualifier工作总是防止@Qualifier()从参数级被使用的值。在科特林功能

如果有人想在同一个应用程序是什么组织这次推荐的方法中频繁访问不同数据库中配置类来创建多个DataSource S'

做这似乎相当普遍在Java中是不允许在科特林以下。

@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中需要该依赖项的方法中。您可以直接调用该方法。如下所示:函数表达式体(如上所述)使Spring Configuration类看起来更简洁。

PPS:@Qualifier作品完全对我很好。我只是测试它。

PPPS:为了完整解决特定问题,正如我所评论的那样:您必须意外导入了javax.inject.Qualifier注释,这是行不通的。您需要导入哪些工作

+0

感谢org.springframework.beans.factory.annotation.Qualifier!是的,这里的例子就是我可以想出的最简单的非特定人为的例子,以显示我遇到的问题。我试图在参数中使用@Qualifier的错误是“此注释不适用于目标'值参数'”。 – sclarson

+1

您必须小心进口'javax.inject.Qualifier'注释,这是行不通的。您需要导入'org.springframework.beans.factory.annotation.Qualifier'注释。 – Strelok