diff --git a/src/main/java/UnitTest/TestReadWriteSplit.java b/src/main/java/UnitTest/TestReadWriteSplit.java new file mode 100644 index 0000000..520ede5 --- /dev/null +++ b/src/main/java/UnitTest/TestReadWriteSplit.java @@ -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 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 list = Db.find(sql, i); + System.out.println(list); + } + } +} diff --git a/src/main/java/UnitTest/TestReadWriteSplit2.java b/src/main/java/UnitTest/TestReadWriteSplit2.java new file mode 100644 index 0000000..27f623c --- /dev/null +++ b/src/main/java/UnitTest/TestReadWriteSplit2.java @@ -0,0 +1,73 @@ +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 TestReadWriteSplit2 { + 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 url = "jdbc:postgresql://10.10.14.61:15400,10.10.14.62:15400/test_db?autoBalance=roundrobin&targetServerType=master"; + String driverClass = "org.postgresql.Driver"; + String userName = "postgres"; + String passWord = "DsideaL147258369"; + DruidPlugin druidPlugin = createDruidPlugin(url, userName, passWord, driverClass); + druidPlugin.start(); + + ActiveRecordPlugin arp = new ActiveRecordPlugin("aGroup", druidPlugin); + 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 list = Db.find(sql, i); + System.out.println(list); + } + } +} diff --git a/src/main/java/com/dsideal/FengHuang/Start.java b/src/main/java/com/dsideal/FengHuang/Start.java index 48b439f..1868726 100644 --- a/src/main/java/com/dsideal/FengHuang/Start.java +++ b/src/main/java/com/dsideal/FengHuang/Start.java @@ -132,12 +132,12 @@ public class Start extends JFinalConfig { */ @Override public void configPlugin(Plugins me) { - DruidPlugin dp1 = createDruidPlugin(PropKit.get("master_jdbcUrl"), PropKit.get("master_user"), PropKit.get("master_password").trim(), PropKit.get("master_driverClassName")); - DruidPlugin dp2 = createDruidPlugin(PropKit.get("slave_jdbcUrl"), PropKit.get("slave_user"), PropKit.get("slave_password").trim(), PropKit.get("slave_driverClassName")); + DruidPlugin dpMaster = createDruidPlugin(PropKit.get("master_jdbcUrl"), PropKit.get("master_user"), PropKit.get("master_password").trim(), PropKit.get("master_driverClassName")); + DruidPlugin dpSlave = createDruidPlugin(PropKit.get("slave_jdbcUrl"), PropKit.get("slave_user"), PropKit.get("slave_password").trim(), PropKit.get("slave_driverClassName")); Map drudMap = new HashMap<>(); - drudMap.put("ds_master", dp1); - drudMap.put("ds_slave", dp2); + drudMap.put("ds_master", dpMaster); + drudMap.put("ds_slave", dpSlave); //负载均衡算法 LoadBalanceStrategyConfiguration loadBalanceStrategyConfiguration = new LoadBalanceStrategyConfiguration("round_robin"); @@ -152,7 +152,7 @@ public class Start extends JFinalConfig { me.add(drudPlugin); ActiveRecordPlugin arp = new ActiveRecordPlugin("aGroup", drudPlugin); - arp.setDevMode(PropKit.getBoolean("devMode", false)); + arp.setDevMode(false); //配置数据库方言 arp.setDialect(new PostgreSqlDialect());