spring boot 实现mysql读写分离

如何实现读写分离呢?或者说实现一主多从?

一般我们在项目中配置数据源的时候基本上都是配一个数据库的链接地址,如果要读写分离,意味着要配N个链接地址。

思路其实很简单,就是创建多个数据源,增删改用主库的数据源,查询用从库的即可。

在spring boot中我们需要配置这些数据源,如下:

spring.datasource.primary.url=jdbc:mysql://192.168.0.132:4306/test
spring.datasource.primary.username=root
spring.datasource.primary.password=root
spring.datasource.primary.driverClassName=com.mysql.jdbc.Driver

spring.datasource.secondary.url=jdbc:mysql://192.168.0.132:4306/test1
spring.datasource.secondary.username=root
spring.datasource.secondary.password=root
spring.datasource.secondary.driverClassName=com.mysql.jdbc.Driver

创建主数据源

@Bean(name = "primaryDataSource")
@Qualifier("primaryDataSource")
//指定数据源配置前缀
@ConfigurationProperties(prefix = "spring.datasource.primary")
public DataSource primaryDataSource() {
    return DataSourceBuilder.create().build();
}

创建从数据源

@Bean(name = "secondaryDataSource")
@Qualifier("secondaryDataSource")
@Primary //在同样的DataSource中,首先使用被标注的DataSource  
@ConfigurationProperties(prefix = "spring.datasource.secondary")
public DataSource secondaryDataSource() {
    return DataSourceBuilder.create().build();
}

我这边用JdbcTemplate来操作,所以配置2个JdbcTemplate类。要操作哪个数据库就用哪个JdbcTemplate。

@Bean(name = "primaryJdbcTemplate")
public JdbcTemplate primaryJdbcTemplate(@Qualifier("primaryDataSource") DataSource dataSource) {
    return new JdbcTemplate(dataSource);
}

@Bean(name = "secondaryJdbcTemplate")
public JdbcTemplate secondaryJdbcTemplate(@Qualifier("secondaryDataSource") DataSource dataSource) {
    return new JdbcTemplate(dataSource);
}

使用示例:

@Repository
public class UserRepository {

    @Autowired
    @Qualifier("primaryJdbcTemplate")
    protected JdbcTemplate primaryJdbcTemplate;

    @Autowired
    @Qualifier("secondaryJdbcTemplate")
    protected JdbcTemplate secondaryJdbcTemplate;

    public void save() {
        primaryJdbcTemplate.execute("insert into users(mobile) values('182182121')");
    }

    public Long queryCount() {
        return secondaryJdbcTemplate.queryForObject("select count(*) from users", Long.class);
    }

}

完整源码下载:http://cxytiandi.com/code/detail/23

原文发布于微信公众号 - 猿天地(cxytiandi)

原文发表时间:2016-11-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏散尽浮华

Centos下DNS+NamedManager高可用部署方案完整记录

之前说到了NamedManager单机版的配置,下面说下DNS+NamedManager双机高可用的配置方案:

8347
来自专栏张戈的专栏

修改Apache的超时设置,解决长连接请求超时问题

某日,组内后台开发找到我,问我们的 WEB 服务器超时设置是多少。他反馈的问题是,有一个 VLAN 切换任务 cgi 接口经常返回 504 网关超时错误,要我分...

1K8
来自专栏bboysoul

开源堡垒机jumpserver搭建

之前说了国产良心kodexplorer,今天再说一个国内比较好的开源项目jumpserver,除此之外还可以的国内开源项目我觉得就是宝塔面板了。废话不多说上教程...

6703
来自专栏Java帮帮-微信公众号-技术文章全总结

spring框架复习大纲【面试+提高】

spring框架复习大纲【面试+提高】 简介 创立于 2003年 , 是为了解决企业级开发的复杂性的! 是一个分层的se/ee(javase和java ee...

4566
来自专栏技术专栏

慕课网Spark SQL日志分析 - 2.Spark 实战环境搭建

下载地址: http://spark.apache.org/downloads.html

2631
来自专栏Java面试通关手册

结合Spring发送邮件的四种正确姿势,你知道几种?

测试使用的环境是企业主流的SSM 框架即 SpringMVC+Spring+Mybatis。为了节省时间,我直接使用的是我上次的“SSM项目中整合Echarts...

1443
来自专栏JarvanMo的IT专栏

将旧项目迁移到AndroidStudio3.0

原来的项目用到了kotlin以及kapt,升级到了androidstudio 3.0报了上面的错误,需要在项目的gradle.properties中添加:

2201
来自专栏菩提树下的杨过

spring-boot 速成(10) -【个人邮箱/企业邮箱】发送邮件

发邮件是一个很常见的功能,代码本身并不复杂,有坑的地方主要在于各家邮件厂家的设置,下面以qq个人邮箱以及腾讯企业邮箱为例,讲解如何用spring-boot发送邮...

3585
来自专栏LanceToBigData

SpringBoot整合Mail

SpringBoot实现邮件功能是非常的方便快捷的,因为SpringBoot默认有starter实现了Mail。 发送邮件应该是网站的必备功能之一,什么注册验...

1981
来自专栏程序猿DD

Spring Boot中使用JavaMailSender发送邮件

相信使用过Spring的众多开发者都知道Spring提供了非常好用的 JavaMailSender接口实现邮件发送。在Spring Boot的Starter模块...

4166

扫码关注云+社区

领取腾讯云代金券