From 68823298336faac66fed92054daa49edb7c47e1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=B5=B7?= <10402852@qq.com> Date: Fri, 2 Jun 2023 09:25:31 +0800 Subject: [PATCH] 'commit' --- .../java/UnitTest/MysqlReadWriteSplit.java | 77 +++++++++++++++++++ .../UnitTest/OpenGaussReadWriteSplit.java | 29 ++++--- 2 files changed, 90 insertions(+), 16 deletions(-) create mode 100644 src/main/java/UnitTest/MysqlReadWriteSplit.java diff --git a/src/main/java/UnitTest/MysqlReadWriteSplit.java b/src/main/java/UnitTest/MysqlReadWriteSplit.java new file mode 100644 index 0000000..baee507 --- /dev/null +++ b/src/main/java/UnitTest/MysqlReadWriteSplit.java @@ -0,0 +1,77 @@ +package UnitTest; + + +import com.alibaba.druid.filter.stat.StatFilter; +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 java.util.ArrayList; +import java.util.List; + +import static com.dsideal.FengHuang.Const.DbConst.MASTER; +import static com.dsideal.FengHuang.Const.DbConst.SLAVE; + +public class MysqlReadWriteSplit { + 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:mysql://10.10.14.209:22066/test_db?rewriteBatchedStatements=true&useUnicode=true&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"; + String driverClass = "com.mysql.cj.jdbc.Driver"; + String userName = "root"; + String passWord = "DsideaL147258369"; + + DruidPlugin druidMaster = createDruidPlugin(masterUrl, userName, passWord, driverClass); + druidMaster.start(); + ActiveRecordPlugin arpMaster = new ActiveRecordPlugin(MASTER, druidMaster); + arpMaster.setDevMode(false); + arpMaster.setDialect(new PostgreSqlDialect()); + arpMaster.start(); + + String sql = "truncate table test"; + Db.use(MASTER).update(sql); + + long start = System.currentTimeMillis(); + + List list=new ArrayList<>(); + for (int i = 1; i <= 100000; i++) { + sql = "insert into test(id,txt) values("+i+",'黄海')"; + list.add(sql); + } + Db.batch(list,2000); + + long end = System.currentTimeMillis(); + long elapsed = end - start; + System.out.println("程序耗时:" + elapsed + " 毫秒"); + + //sql = "select * from test where id=?"; + //List list2 = Db.use(SLAVE).find(sql, 100000); + //System.out.println(list2); + + } +} \ No newline at end of file diff --git a/src/main/java/UnitTest/OpenGaussReadWriteSplit.java b/src/main/java/UnitTest/OpenGaussReadWriteSplit.java index e548c8a..818adcc 100644 --- a/src/main/java/UnitTest/OpenGaussReadWriteSplit.java +++ b/src/main/java/UnitTest/OpenGaussReadWriteSplit.java @@ -8,6 +8,7 @@ import com.jfinal.plugin.activerecord.Record; import com.jfinal.plugin.activerecord.dialect.PostgreSqlDialect; import com.jfinal.plugin.druid.DruidPlugin; +import java.util.ArrayList; import java.util.List; import static com.dsideal.FengHuang.Const.DbConst.MASTER; @@ -65,26 +66,22 @@ public class OpenGaussReadWriteSplit { String sql = "truncate table test"; Db.use(MASTER).update(sql); - for (int i = 1; i <= 100; i++) { - sql = "insert into test(id,txt) values(?,?)"; - Db.use(MASTER).update(sql, i, "黄海——" + i); - } + long start = System.currentTimeMillis(); - for (int i = 1; i <= 100; i++) { - sql = "update test set txt='ddd' where id=?"; - Db.use(MASTER).update(sql, i); + List list=new ArrayList<>(); + for (int i = 1; i <= 100000; i++) { + sql = "insert into test(id,txt) values("+i+",'黄海')"; + list.add(sql); } + Db.batch(list,2000); + long end = System.currentTimeMillis(); + long elapsed = end - start; + System.out.println("程序耗时:" + elapsed + " 毫秒"); - for (int i = 1; i <= 100; i++) { - sql = "select * from test where id=?"; - List list = Db.use(SLAVE).find(sql, i); - System.out.println(list); - } + sql = "select * from test where id=?"; + List list2 = Db.use(SLAVE).find(sql, 100000); + System.out.println(list2); - for (int i = 1; i <= 100; i++) { - sql = "delete from test where id=?"; - Db.use(MASTER).update(sql, i); - } } } \ No newline at end of file