|
|
|
@ -0,0 +1,90 @@
|
|
|
|
|
package UnitTest;
|
|
|
|
|
|
|
|
|
|
import com.alibaba.druid.filter.stat.StatFilter;
|
|
|
|
|
import com.dsideal.FengHuang.Plugin.SlaveDrudPlugin;
|
|
|
|
|
import com.google.common.collect.Lists;
|
|
|
|
|
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
|
|
|
|
|
import com.jfinal.plugin.activerecord.Db;
|
|
|
|
|
import com.jfinal.plugin.activerecord.Record;
|
|
|
|
|
import com.jfinal.plugin.activerecord.dialect.PostgreSqlDialect;
|
|
|
|
|
import com.jfinal.plugin.druid.DruidPlugin;
|
|
|
|
|
import org.apache.shardingsphere.api.config.masterslave.LoadBalanceStrategyConfiguration;
|
|
|
|
|
import org.apache.shardingsphere.api.config.masterslave.MasterSlaveRuleConfiguration;
|
|
|
|
|
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
|
|
public class TestReadWriteSplit {
|
|
|
|
|
public static DruidPlugin createDruidPlugin(String url, String username, String password, String driverClass) {
|
|
|
|
|
DruidPlugin druidPlugin = new DruidPlugin(url, username, password, driverClass);
|
|
|
|
|
//最大连接池数量
|
|
|
|
|
druidPlugin.setMaxActive(20);
|
|
|
|
|
//最小连接池数量
|
|
|
|
|
druidPlugin.setMinIdle(1);
|
|
|
|
|
//初始化时建立物理连接的个数,默认为0
|
|
|
|
|
druidPlugin.setInitialSize(1);
|
|
|
|
|
//获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
|
|
|
|
|
druidPlugin.setMaxWait(60000);
|
|
|
|
|
//如果连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接。
|
|
|
|
|
druidPlugin.setTimeBetweenEvictionRunsMillis(60000);
|
|
|
|
|
//连接保持空闲而不被驱逐的最小时间
|
|
|
|
|
druidPlugin.setMinEvictableIdleTimeMillis(300000);
|
|
|
|
|
//建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
|
|
|
|
|
druidPlugin.setTestWhileIdle(true);
|
|
|
|
|
//申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。默认为true
|
|
|
|
|
druidPlugin.setTestOnBorrow(false);
|
|
|
|
|
//归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。默认为true
|
|
|
|
|
druidPlugin.setTestOnReturn(false);
|
|
|
|
|
//数据监控
|
|
|
|
|
druidPlugin.addFilter(new StatFilter());
|
|
|
|
|
return druidPlugin;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
|
|
String MasterUrl = "jdbc:postgresql://10.10.14.61:15400/test_db";
|
|
|
|
|
String SlaveUrl = "jdbc:postgresql://10.10.14.62:15400/test_db";
|
|
|
|
|
String driverClass = "org.postgresql.Driver";
|
|
|
|
|
String userName = "postgres";
|
|
|
|
|
String passWord = "DsideaL147258369";
|
|
|
|
|
DruidPlugin dpMaster = createDruidPlugin(MasterUrl, userName, passWord, driverClass);
|
|
|
|
|
DruidPlugin dpSlave = createDruidPlugin(SlaveUrl, userName, passWord, driverClass);
|
|
|
|
|
|
|
|
|
|
Map<String, DruidPlugin> drudMap = new HashMap<>();
|
|
|
|
|
drudMap.put("ds_master", dpMaster);
|
|
|
|
|
drudMap.put("ds_slave", dpSlave);
|
|
|
|
|
|
|
|
|
|
//负载均衡算法
|
|
|
|
|
LoadBalanceStrategyConfiguration loadBalanceStrategyConfiguration = new LoadBalanceStrategyConfiguration("round_robin");
|
|
|
|
|
MasterSlaveRuleConfiguration masterSlaveRuleConfig =
|
|
|
|
|
new MasterSlaveRuleConfiguration(
|
|
|
|
|
"device_read_write",
|
|
|
|
|
"ds_master",
|
|
|
|
|
Lists.newArrayList("ds_slave"),
|
|
|
|
|
loadBalanceStrategyConfiguration);
|
|
|
|
|
|
|
|
|
|
SlaveDrudPlugin drudPlugin = new SlaveDrudPlugin(masterSlaveRuleConfig, drudMap);
|
|
|
|
|
drudPlugin.start();
|
|
|
|
|
|
|
|
|
|
ActiveRecordPlugin arp = new ActiveRecordPlugin("aGroup", drudPlugin);
|
|
|
|
|
arp.setDevMode(false);
|
|
|
|
|
//配置数据库方言
|
|
|
|
|
arp.setDialect(new PostgreSqlDialect());
|
|
|
|
|
//启动
|
|
|
|
|
arp.start();
|
|
|
|
|
|
|
|
|
|
String sql = "truncate table test";
|
|
|
|
|
Db.update(sql);
|
|
|
|
|
|
|
|
|
|
for (int i = 1; i <= 100; i++) {
|
|
|
|
|
sql = "insert into test(id,txt) values(?,?)";
|
|
|
|
|
Db.update(sql, i, "黄海——" + i);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (int i = 1; i <= 100; i++) {
|
|
|
|
|
sql = "select * from test where id=?";
|
|
|
|
|
List<Record> list = Db.find(sql, i);
|
|
|
|
|
System.out.println(list);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|