数据源读写分离 -- replication
来源:互联网 发布:java程序设计流程图 编辑:程序博客网 时间:2024/06/05 17:07
MySql给提供了一种简单的读写分离方式–replication,先看下具体的demo.
package test1;import java.sql.Connection;import java.sql.ResultSet;import java.sql.Statement;import java.util.Properties;import com.mysql.jdbc.Driver;import com.mysql.jdbc.ReplicationDriver;;public class ConnectionDemo { public static void main(String[] args) throws Exception { ReplicationDriver driver = new ReplicationDriver(); String url = "jdbc:mysql:replication://address=(protocol=tcp)(type=master)(host=masterhost)(port=3306)(user=masteruser),address=(protocol=tcp)(type=slave)(host=slavehost)(port=3306)(user=slaveuser)/yourdb"; Properties props = new Properties(); props.put("password", "yourpassword"); try (Connection conn = driver.connect(url, props)) { // Perform read/write work on the master conn.setReadOnly(false); conn.setAutoCommit(false); conn.createStatement().executeUpdate("update t1 set id = id+1;"); conn.commit(); // Set up connection to slave; conn.setReadOnly(true); // Now, do a query from a slave try (Statement statement = conn.createStatement()) { ResultSet res = statement.executeQuery("show tables"); System.out.println("There are below tables:"); while (res.next()) { String tblName = res.getString(1); System.out.println(tblName); } } } }}
这里只有一点做特殊说明readonly。只有设置成readonly的sql才会使用slave数据源。
现在一般都是跟spring框架集成的,再来看Spring中的集成方式。
application.yml中的配置:
spring: datasource: #数据库连接池配置 hikari: ## 等待从连接池中获得连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 缺省:30秒 connection-timeout: 30000 ## 一个连接idle状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟 idle-timeout: 600000 ## 一个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),缺省:30分钟,建议设置比数据库超时时长少30秒以上 max-lifetime: 1765000 pool-name: slave maximum-pool-size: 50 driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql:replication://address=(protocol=tcp)(type=master)(host=masterhost)(port=3306)(user=root),address=(protocol=tcp)(type=slave)(host=slavehost)(port=3306)(user=root)/testdb?useUnicode=true&characterEncoding=utf8&useSSL=true&allowMultiQueries=true&verifyServerCertificate=false# username: root password: root
这里配置完之后需要在项目中设置readonly。
@Transactional(readOnly = true) User findById(int id);
这里借助的是@Transactional注解,我这里选择注解的位置是mapper的接口。
今天看了篇很好的文章,大家可以深入了解下http://www.iteye.com/topic/205926/,
官网参考链接。
阅读全文
0 0
- 数据源读写分离 -- replication
- 案例-数据源切换读写分离
- SSM java切换数据源 实现读写分离
- Mysql主从数据库+Replication实现读写分离和查询负载
- spring hibernate配置切换数据源,实现读写分离
- AOP的动态数据源配置,实现读写分离
- Spring 动态数据源和AOP实现数据库读写分离
- SSM框架集成mysql读写分离,动态加载数据源
- 基于springAop动态切换数据源实现读写分离
- springmvc 、mybatis整合多个数据源(读写分离)
- MySql从一窍不通到入门(八)复制(replication)和集群(cluster)/读写分离
- 读写分离
- 读写分离
- 读写分离
- 读写分离
- 读写分离
- 读写分离
- 读写分离
- 自定义EditText_password输入框
- Ubuntu-Java-SerialPort-RXTX
- Eclipse的GUI编程 (WindowBulider)
- mysql用户root多密码成因
- opencl之code builder学习教程1
- 数据源读写分离 -- replication
- 还说关于工业软件的那点事
- 学习秒杀系统时遇到的问题
- angular table的添加搜索
- 第十三周项目2
- Java试水题目—万年历
- CentOS-6 网卡设置为系统自启动
- Android内存泄漏的可能情况
- ubuntu14.04 +xrdp+xfce 远程登录(附screen工具使用)