在Kotlin中,函数参数始终是阻止@Qualifier()
在参数级别使用的值。
如果有人想在同一个应用程序中经常访问的不同数据库的配置类中创建多个DataSource
,那么推荐的组织方式是什么?
在Kotlin中不允许执行以下在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)
}
}
答案 0 :(得分: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:函数表达式主体(如上所示)使Spring Configuration类看起来更简洁。
PPS:@Qualifier
对我来说完全没问题。我刚试过它。
PPPS:为了完整性解决具体问题,正如我评论的那样:您必须意外导入javax.inject.Qualifier
注释,这将无效。您需要导入有效的org.springframework.beans.factory.annotation.Qualifier