gpt4 book ai didi

java - SpringBoot 不从 yml 配置创建数据源

转载 作者:行者123 更新时间:2023-12-01 20:16:20 25 4
gpt4 key购买 nike

application.yml中我定义了数据源:

spring:
datasource:
driver-class-name: ru.yandex.clickhouse.ClickHouseDriver
username: default
url: jdbc:clickhouse://localhost:8123/default

我也创建了一些配置:

@Configuration
@AutoConfigureAfter(DataSourceAutoConfiguration.class)
public class MyConfig {

@Getter
private ReportRoutingDataSource dataSourceStorage = new ReportRoutingDataSource();

@Bean("dataSourceStorage")
public DataSource dataSource(@Qualifier("dataSource") DataSource dataSource) {
dataSourceStorage.setDefaultTargetDataSource(dataSource);
dataSourceStorage.setTargetDataSources(resolvedDataSources());
dataSourceStorage.afterPropertiesSet();
return dataSourceStorage;
}

@Bean
public Map<Object, Object> resolvedDataSources() {
//some another logic;
}
}

报告路由数据源:

public class ReportRoutingDataSource extends AbstractRoutingDataSource {

@Override
protected Object determineCurrentLookupKey() {
return RequestContext.getKeyToChoseDataSource();
}

}

我想使用自动配置从 yml 文件创建默认数据源,并将其添加到 dataSourceStorage.setDefaultTargetDataSource(dataSource) 作为默认数据源。

我设置了注释@AutoConfigureAfter(DataSourceAutoConfiguration.class),我的配置是在标准数据源自动配置之后创建的。

但是,当我启动我的应用程序时,出现错误:

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dataSourceStorage' defined in class path resource [com/example/spring/MyConfig.class]: Unsatisfied dependency expressed through method 'dataSource' parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.sql.DataSource' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Qualifier(value=dataSource)}

但是,为什么呢?我该如何修复它?

最佳答案

将“dataSource”方法替换为

@Bean("dataSourceStorage")
public ReportRoutingDataSource reportRoutingDataSource (@Autowired("dataSource") DataSource dataSource) {
ReportRoutingDataSource dataSourceStorage = new ReportRoutingDataSource();
dataSourceStorage.setDefaultTargetDataSource(dataSource);
dataSourceStorage.setTargetDataSources(resolvedDataSources());
dataSourceStorage.afterPropertiesSet();
return dataSourceStorage;
}

并删除 ReportRoutingDataSource 的 @Getter。

关于java - SpringBoot 不从 yml 配置创建数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58953292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com