Spring Boot中的多个DataSource和JdbcTemplate(> 1.1.0) [英] Multiple DataSource and JdbcTemplate in Spring Boot (> 1.1.0)

查看:404
本文介绍了Spring Boot中的多个DataSource和JdbcTemplate(> 1.1.0)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在Spring Boot项目中注入一个特定的 JdbcTemplate 。我尝试按照此示例进行多个 DataSource 配置: http://spring.io/blog/2014/05/27/spring-boot-1-1-0-m2-available-now

I would like to inject a specific JdbcTemplatein a Spring Boot project. I tried to follow this example for multiple DataSourceconfiguration : http://spring.io/blog/2014/05/27/spring-boot-1-1-0-m2-available-now

我的代码编译并运行,但只考虑带有 @Primary 注释的DataSource ,无论我在 SqlService 类中放置什么 @Qualifier 。我的相关代码如下:

My code does compile and run, but only the DataSource with the @Primaryannotation is taken into account, no matter what I put as @Qualifier in the SqlServiceclass. My relevant code is the following :

DatabaseConfig.java

@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);
    }

}

我做了快速服务尝试一下:

And I did a quick service to try it out :

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";
    }

}


推荐答案

尝试将 @Qualifier 注释移动到 @Bean上的参数 JdbcTemplate 的方法。

Try to move @Qualifier annotation to the parameter on your @Bean methods for JdbcTemplate.

我想,当你删除 @时主最终会出现错误,其中会出现多个适当的bean

I guess, when you remove @Primary you end up with error, where more than one appropriate beans are presented

这篇关于Spring Boot中的多个DataSource和JdbcTemplate(> 1.1.0)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆