前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >spring boot 实现mysql读写分离

spring boot 实现mysql读写分离

作者头像
猿天地
发布2018-04-03 12:43:49
1.7K0
发布2018-04-03 12:43:49
举报
文章被收录于专栏:猿天地猿天地

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

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

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

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

代码语言:javascript
复制
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

创建主数据源

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

创建从数据源

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

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

代码语言:javascript
复制
@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);
}

使用示例:

代码语言:javascript
复制
@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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-11-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 猿天地 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何实现读写分离呢?或者说实现一主多从?
  • 创建主数据源
  • 创建从数据源
  • 使用示例:
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档