gpt4 book ai didi

java - 使用spring配置多个数据源,包括namedparameterjdbctemplate

转载 作者:行者123 更新时间:2023-12-02 02:00:50 28 4
gpt4 key购买 nike

我的项目中有以下数据库配置类,我尝试为两个数据源之一配置多个 jdbctemplate 和一个命名 jdbc 模板:

@Configuration
public class DatabaseConfiguration {

@Bean(name = "abcDataSource")
@Primary
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource abcDataSource() {
return DataSourceBuilder.create().build();
}

@Bean(name = "jdbcABC")
@Autowired
public JdbcTemplate abcJdbcTemplate(@Qualifier("abcDataSource") DataSource datasource) {
return new JdbcTemplate(datasource);
}

@Bean(name = "namedJdbcABC")
public NamedParameterJdbcTemplate namedParameterJdbcTemplate(@Qualifier("abcDataSource") DataSource datasource) {
return new NamedParameterJdbcTemplate(datasource);
}


@Bean(name = "shDataSource")
@ConfigurationProperties(prefix = "spring.shdatasource")
public DataSource shDataSource() {
return DataSourceBuilder.create().build();
}

@Bean(name = "jdbcSh")
@Autowired
public JdbcTemplate shJdbcTemplate(@Qualifier("shDataSource") DataSource datasource) {
return new JdbcTemplate(datasource);
}

我似乎已经在 yaml 文件中正确配置了所有内容:

spring:
profiles:
active: dev
output.ansi.enabled: always

shdatasource:
driverClassName: oracle.jdbc.OracleDriver
url: jdbc:oracle:thin:@sh.database.url:1521:sid
username: test
password: test
datasource:
driverClassName: oracle.jdbc.OracleDriver
url: jdbc:oracle:thin:@abc.db.url:1521:oll
username: test
password: test

但我收到错误:

org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为“somedao”的bean时出错:通过字段“namedParameterJdbcTemplate”表达的依赖关系不满足;

由以下原因引起:org.springframework.beans.BeanInstantiationException:无法实例化[javax.sql.DataSource]:工厂方法“abcDataSource”抛出异常;嵌套异常是java.lang.IllegalStateException:找不到支持的数据源类型

如果我配置错误,有人可以告诉我吗?

最佳答案

这样做对我有用:

@Configuration
public class DatabaseConfiguration {

@Bean
@Primary
@ConfigurationProperties("spring.datasource")
public DataSourceProperties abcDataSourceProperties() {
return new DataSourceProperties();
}

@Bean(name = "abcDataSource")
@Primary
@ConfigurationProperties("spring.datasource")
public DataSource abcDataSource() {
return abcDataSourceProperties().initializeDataSourceBuilder().build();
}


@Bean
@ConfigurationProperties("spring.shDataSource")
public DataSourceProperties shDataSourceProperties() {
return new DataSourceProperties();
}

@Bean(name = "shDataSource")
@ConfigurationProperties("spring.shDataSource")
public DataSource shDataSource() {
return shDataSourceProperties().initializeDataSourceBuilder().build();
}

@Bean(name = "jdbcABC")
@DependsOn("abcDataSource")
public JdbcTemplate abcJdbcTemplate(@Qualifier("abcDataSource") DataSource abcDataSource) {
return new JdbcTemplate(abcDataSource);
}


@Bean(name = "namedJdbcABC")
@DependsOn("abcDataSource")
public NamedParameterJdbcTemplate namedParameterJdbcTemplate(@Qualifier("abcDataSource") DataSource abcDataSource) {
return new NamedParameterJdbcTemplate(abcDataSource);
}

@Bean(name = "jdbcSh")
@DependsOn("shDataSource")
public JdbcTemplate shJdbcTemplate(@Qualifier("shDataSource") DataSource shDataSource) {
return new JdbcTemplate(shDataSource);
}

}

然后,在我的主类中我注入(inject)了我的bean:

@SpringBootApplication
public class Application implements CommandLineRunner {


@Autowired
@Qualifier("abcDataSource")
DataSource abcDataSource;

@Autowired
@Qualifier("shDataSource")
DataSource shDataSource;

@Autowired
@Qualifier("jdbcABC")
JdbcTemplate abcJdbcTemplate;

@Autowired
@Qualifier("namedJdbcABC")
NamedParameterJdbcTemplate namedParameterJdbcTemplate;

@Autowired
@Qualifier("jdbcSh")
JdbcTemplate shJdbcTemplate;


@Override
public void run(String... strings) throws Exception {
System.out.println(abcDataSource.toString());
System.out.println(shDataSource.toString());
System.out.println(abcJdbcTemplate.toString());
System.out.println(namedParameterJdbcTemplate.toString());
System.out.println(shJdbcTemplate.toString());
}


public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}

}

它按预期工作。

关于java - 使用spring配置多个数据源,包括namedparameterjdbctemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51613381/

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