设为首页 收藏本站
查看: 891|回复: 0

[经验分享] mysql 集群 jdbc配置

[复制链接]

尚未签到

发表于 2016-9-19 08:42:35 | 显示全部楼层 |阅读模式
  项目中使用mysql 主从复制,但是用程序实现的读写分离,代码片段如下:
1 DSC0000.gif DSC0001.gif public DataSource getDataSource(MethodType methodType) DSC0002.gif {
2 DSC0003.gif DSC0004.gif if (methodType == MethodType.WRITE) {
3 DSC0005.gif return getDataSource(MasterDataSources);
4} else {
5return getDataSource(SlaveDataSources);
6 DSC0006.gif }
7 DSC0007.gif }
  
获取数据源,首先你要确定MethodType 类型,一个是读,一个是写
1public enum MethodType {
2READ, WRITE
3}
  读是获取从库数据源,写是获取主库数据源。

这样,就需要在jdbc配置配置两个数据源(一主一从)

还有另一种实现方式,不用程序来控制。mysql 驱动包提供相应的实现 com.mysql.jdbc.ReplicationDriver.
我写了一个简单的例子:
  1 DSC0008.gif package com.howard.loadbalance;
2
3import java.sql.Connection;
4import java.sql.ResultSet;
5import java.sql.SQLException;
6import java.sql.Statement;
7import java.util.Properties;
8import java.util.concurrent.ExecutorService;
9import java.util.concurrent.Executors;
10
11import org.slf4j.Logger;
12import org.slf4j.LoggerFactory;
13
14import com.mysql.jdbc.ReplicationDriver;
15
16public class MysqlTest {
17
18public static class QueryRunnable implements Runnable {
19
20protected final static Logger logger = LoggerFactory
21.getLogger(QueryRunnable.class);
22
23@Override
24public void run() {
25logger.info("user size: " + this.query());
26}
27
28public int query() {
29int count = 0;
30try {
31ReplicationDriver driver = new ReplicationDriver();
32Properties props = new Properties();
33props.put("roundRobinLoadBalance", "true");
34props.put("autoReconnect", "true");
35props.put("user", "core");
36props.put("password", "core");
37Connection conn = null;
38Statement stat = null;
39ResultSet res = null;
40try {
41conn = driver
42.connect(
43//注意url串中间不要有空格,因为mysql源码对多个地址split时没有trim.
44 "jdbc:mysql:replication://127.0.0.1:3309,127.0.0.1:3306/core",
45props);
46//读写分离标记
47//当设置true时,只会在从库查询数据
48//当设置false时,会在主库做更新删除操作
49// conn.setReadOnly(true);
50 stat = conn.createStatement();
51res = stat.executeQuery("select count(1) from c_user");
52while (res.next())
53count = res.getInt(1);
54} finally {
55if (res != null)
56res.close();
57if (stat != null)
58stat.close();
59if (conn != null)
60conn.close();
61}
62} catch (SQLException e) {
63e.printStackTrace();
64}
65return count;
66}
67}
68
69public static void main(String[] args) {
70// 创建线程池测试负载军衡
71 ExecutorService service = Executors.newCachedThreadPool();
72for (int i = 0; i < 10; i++) {
73service.execute(new QueryRunnable());
74}
75service.shutdown();
76}
77
78}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-274182-1-1.html 上篇帖子: mysql压力测试工具mysqlslap 下篇帖子: mysql手册总结2
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表