当前位置: 首页 > 知识库问答 >
问题:

Spring Boot中的多数据源和JdbcTemplate(>1.1.0)

涂泰平
2023-03-14

我想在Spring Boot项目中注入一个特定的jdbctemplate。对于多个数据源配置,我尝试遵循以下示例:http://spring.io/blog/2014/05/27/spring-boot-1-1-0-M2-available-now

我的代码确实会编译和运行,但只会考虑带有@primary注释的数据源,不管我在SQLService类中将什么作为@qualifier。我的相关代码如下:

@Configuration
public class DatabaseConfig {

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

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

    @Bean(name = "jdbcSlave")
    @Autowired
    @Qualifier("dsSlave")
    public JdbcTemplate slaveJdbcTemplate(DataSource dsSlave) {
        return new JdbcTemplate(dsSlave);
    }

    @Bean(name = "jdbcMaster")
    @Autowired
    @Qualifier("dsMaster")
    public JdbcTemplate masterJdbcTemplate(DataSource dsMaster) {
        return new JdbcTemplate(dsMaster);
    }

}

我做了一个快速的服务来尝试它:

sqlservice.java:

@Component
public class SqlService {

    @Autowired
    @Qualifier("jdbcSlave")
    private JdbcTemplate jdbcTemplate;

    public String getHelloMessage() {
        String host = jdbcTemplate.queryForObject("select @@hostname;", String.class);
        System.out.println(host);
        return "Hello";
    }

}

共有1个答案

金慈
2023-03-14

应该如下所示:

@Bean(name = "jdbcSlave")
@Autowired
public JdbcTemplate slaveJdbcTemplate(@Qualifier("dsSlave") DataSource dsSlave) {
    return new JdbcTemplate(dsSlave);
}
 类似资料:
  • 我正在尝试使用两个数据源与我的SpringBoot应用程序,但无法获得第二个数据源自动连接。我尝试过很多事情,但这是我最接近的一次: 我的Yaml文件: 这是我到目前为止最接近的一次。我之所以说它是最接近的,是因为如果我删除@qualifier,那么我的两个dao方法实际上都可以工作,假设SECOND_SELECT语句对于我的DB1是有效的SQL语句。当我为非主datasouce输入@Qualif

  • sampleClass.java 在sampleClass.java am中,将integrationTemplate作为null。为什么会这样?mainJdbcTemplate正在工作。但是integrationTemplate变为null,无法导出查询。

  • 问题内容: 根据Spring 文档,使用Spring JdbcTemplate的步骤如下: 然后, 基本上,JdbcTemplate是使用数据源的setter在Component类内部创建的。 这样做有什么问题,因此应用程序中只有一个jdbcTemplate实例吗? 然后将jdbcTemplate本身直接注入到组件中 有没有理由不能将jdbcTemplate本身直接注入到组件类中? SGB 问题答

  • 问题内容: 我正在尝试在Spring项目中测试一个类。我想在测试类和dao类中进行尽可能多的更改,这样我就不必因为更改而重新测试所有类型的东西。 我正在使用的类具有通过以下实例化的类变量: 我想测试的方法使a 运行定义的SQL查询并将结果返回到列表。 我在测试用例中创建了以下内容,但不确定如何使用它。我可以使用Mockito使以下代码返回特定的字符串列表吗? 我可以以某种方式使用或其他命令来设置要

  • 本文向大家介绍springboot + mybatis配置多数据源示例,包括了springboot + mybatis配置多数据源示例的使用技巧和注意事项,需要的朋友参考一下 在实际开发中,我们一个项目可能会用到多个数据库,通常一个数据库对应一个数据源。 代码结构: 简要原理: 1)DatabaseType列出所有的数据源的key---key 2)DatabaseContextHolder是一个线

  • 我在运行我的spring boot项目时遇到了一个问题: 我使用Vaadin来实现UI,使用Maven来实现Dependecies。该数据库是一个MySQL数据库,我严格按照(https://spring.io/guides/gs/accessing-data-mysql/)的说明进行了操作。 说明: 行动: 考虑重新考虑上面的条件,或者在配置中定义一个类型为'javax.sql.DataSour