mysql读写分离sharejdbc_sharding-jdbc +jfinal 读写分离

读写分离只要 略微修改下,超简单 config 配置:/**

* 配置插件

*/

public void configPlugin(Plugins me) {

DruidPlugin druidDb1Plugin = createDb1DruidPlugin();

DruidPlugin druidDb2PluginTest = createDb1DruidPluginTest();

Map drudMap=new HashMap<>();

drudMap.put("ds_master",druidDb1Plugin);

drudMap.put("ds_slave0",druidDb2PluginTest);

//获得自定义的扩展

MasterSlaveRuleConfiguration masterSlaveRuleConfig = new MasterSlaveRuleConfiguration();

masterSlaveRuleConfig.setName("ds_master_slave");

masterSlaveRuleConfig.setMasterDataSourceName("ds_master");

masterSlaveRuleConfig.setSlaveDataSourceNames(Arrays.asList("ds_slave0"));

masterSlaveRuleConfig.setLoadBalanceAlgorithmType(MasterSlaveLoadBalanceAlgorithmType.getDefaultAlgorithmType());

//masterSlaveRuleConfig.setLoadBalanceAlgorithmClassName("com.cp.conf.test");

SlaveDrudPlugin drudPlugin=new SlaveDrudPlugin(masterSlaveRuleConfig,drudMap);

me.add(drudPlugin);

ActiveRecordPlugin targetARP = new ActiveRecordPlugin("aGroup",drudPlugin);

//        targetARP.setShowSql(true);

targetARP.setDevMode(PropKit.getBoolean("devMode", false));

//配置数据库方言

//         targetARP.setDialect(DatabaseUtil.getDialectByDriverName(targetDriverClass));

_MappingKit.mappingdb1(targetARP);

me.add(targetARP);

}package com.cp.conf;

import java.sql.SQLException;

import java.util.HashMap;

import java.util.Map;

import java.util.concurrent.ConcurrentHashMap;

import javax.sql.DataSource;

import com.jfinal.plugin.IPlugin;

import com.jfinal.plugin.activerecord.IDataSourceProvider;

import com.jfinal.plugin.druid.DruidPlugin;

import io.shardingjdbc.core.api.MasterSlaveDataSourceFactory;

import io.shardingjdbc.core.api.config.MasterSlaveRuleConfiguration;

/**

* 读写分离扩展类

*/

public class SlaveDrudPlugin implements IPlugin, IDataSourceProvider {

//读写分离的rule

MasterSlaveRuleConfiguration masterSlaveRuleConfiguration;

//数据源map

Map druidPlugins;

//原数据库连接源map

Map dataSourceMap;

//最终sharding-jdbc封装后的数据库连接源

DataSource dataSource;

public SlaveDrudPlugin(MasterSlaveRuleConfiguration masterSlaveRuleConfiguration, Map druidPlugins) {

this.masterSlaveRuleConfiguration = masterSlaveRuleConfiguration;

this.druidPlugins = druidPlugins;

dataSourceMap=new HashMap();

}

public boolean start() {

//遍历数据源 ,将数据源加入sharding jdbc

for(Map.Entry entry:druidPlugins.entrySet()){

entry.getValue().start();

dataSourceMap.put(entry.getKey(),entry.getValue().getDataSource());

}

try {

dataSource = MasterSlaveDataSourceFactory.createDataSource(dataSourceMap,masterSlaveRuleConfiguration, new ConcurrentHashMap());

System.out.println(dataSource);

} catch (SQLException e) {

e.printStackTrace();

}

return true;

}

public boolean stop() {

for(Map.Entry entry:druidPlugins.entrySet()){

entry.getValue().stop();

dataSourceMap.put(entry.getKey(),entry.getValue().getDataSource());

}

return true;

}

public DataSource getDataSource() {

return dataSource;

}

}

这就实现了 读写分离 !简单吧 @@@@@

我在业务中 有个需求!根据页面 切换数据源(sharding-jdbc 也是添加好了扩展)

masterSlaveRuleConfig.setLoadBalanceAlgorithmClassName("com.cp.conf.test");

一句代码搞定

test 类继承 MasterSlaveLoadBalanceAlgorithmimport java.util.List;

import io.shardingjdbc.core.api.algorithm.masterslave.MasterSlaveLoadBalanceAlgorithm;

public class test implements MasterSlaveLoadBalanceAlgorithm {

@Override

public String getDataSource(String name, String masterDataSourceName, List slaveDataSourceNames) {

写业务逻辑 代码。。。。。。

System.out.println(name+"  "+masterDataSourceName);

return "ds_slave0";

}

}

完美!!!!

此场景:如果是 没有java  代码植入 ,我还是推荐使用 proxysql 去使用,主要是项目已经形成了,只能通过sharding-jdbc 去植入规则,不去改以前的sql !

好了 有问题 一起交流!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值