From 5ba3a9641ed367e708c530445903794d1bef849d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=B5=B7?= <10402852@qq.com> Date: Thu, 1 Jun 2023 21:31:05 +0800 Subject: [PATCH] 'commit' --- JFinal下载地址.txt | 1 + pom.xml | 20 ++---- .../UnitTest/OpenGaussReplicationToKafka.java | 28 ++------ .../java/UnitTest/TestReadWriteSplit.java | 61 +++++++--------- .../java/UnitTest/TestReadWriteSplit2.java | 72 ------------------- .../com/dsideal/FengHuang/Const/DbConst.java | 6 ++ .../FengHuang/Plugin/SlaveDrudPlugin.java | 62 ---------------- .../java/com/dsideal/FengHuang/Start.java | 39 +++++----- src/main/resource/application.properties | 14 ++-- target/classes/application.properties | 14 ++-- 10 files changed, 82 insertions(+), 235 deletions(-) create mode 100644 JFinal下载地址.txt delete mode 100644 src/main/java/UnitTest/TestReadWriteSplit2.java create mode 100644 src/main/java/com/dsideal/FengHuang/Const/DbConst.java delete mode 100644 src/main/java/com/dsideal/FengHuang/Plugin/SlaveDrudPlugin.java diff --git a/JFinal下载地址.txt b/JFinal下载地址.txt new file mode 100644 index 0000000..412256f --- /dev/null +++ b/JFinal下载地址.txt @@ -0,0 +1 @@ +https://gitee.com/jfinal/jfinal.git \ No newline at end of file diff --git a/pom.xml b/pom.xml index 503a3e6..7f5230b 100644 --- a/pom.xml +++ b/pom.xml @@ -50,13 +50,6 @@ system ${project.basedir}/ExtendJar/aspose.slides-19.3.jar - - org.opengauss - opengauss-jdbc - 5.0.0 - system - ${project.basedir}/ExtendJar/opengauss-jdbc-5.0.0.jar - com.jfinal @@ -257,19 +250,18 @@ 1.7.36 + + + org.opengauss + opengauss-jdbc + 5.0.0 + org.apache.kafka kafka-clients 3.4.0 - - - - org.apache.shardingsphere - sharding-jdbc-core - 4.1.1 - diff --git a/src/main/java/UnitTest/OpenGaussReplicationToKafka.java b/src/main/java/UnitTest/OpenGaussReplicationToKafka.java index 4c150c0..4feff7b 100644 --- a/src/main/java/UnitTest/OpenGaussReplicationToKafka.java +++ b/src/main/java/UnitTest/OpenGaussReplicationToKafka.java @@ -1,44 +1,24 @@ package UnitTest; import com.alibaba.fastjson.JSONObject; - 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 com.jfinal.plugin.redis.Redis; - import com.jfinal.plugin.redis.RedisPlugin; - import org.apache.kafka.clients.producer.KafkaProducer; - import org.apache.kafka.clients.producer.ProducerConfig; - import org.apache.kafka.clients.producer.ProducerRecord; - -import org.opengauss.PGProperty; - -import org.opengauss.jdbc.PgConnection; - -import org.opengauss.replication.LogSequenceNumber; - -import org.opengauss.replication.PGReplicationStream; - - +import org.postgresql.PGProperty; +import org.postgresql.jdbc.PgConnection; +import org.postgresql.replication.LogSequenceNumber; +import org.postgresql.replication.PGReplicationStream; import java.nio.ByteBuffer; - import java.sql.DriverManager; - import java.util.List; - import java.util.Properties; - import java.util.concurrent.TimeUnit; public class OpenGaussReplicationToKafka { diff --git a/src/main/java/UnitTest/TestReadWriteSplit.java b/src/main/java/UnitTest/TestReadWriteSplit.java index 6905735..86e169a 100644 --- a/src/main/java/UnitTest/TestReadWriteSplit.java +++ b/src/main/java/UnitTest/TestReadWriteSplit.java @@ -1,19 +1,16 @@ 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; + +import static com.dsideal.FengHuang.Const.DbConst.MASTER; +import static com.dsideal.FengHuang.Const.DbConst.SLAVE; public class TestReadWriteSplit { public static DruidPlugin createDruidPlugin(String url, String username, String password, String driverClass) { @@ -42,48 +39,38 @@ public class TestReadWriteSplit { } public static void main(String[] args) { - String MasterUrl = "jdbc:opengauss://10.10.14.61:15400/test_db"; - String SlaveUrl = "jdbc:opengauss://10.10.14.62:15400/test_db"; - String driverClass = "org.opengauss.Driver"; + String masterUrl = "jdbc:postgresql://10.10.14.61:15400/test_db"; + String slaveUrl = "jdbc:postgresql://10.10.14.62:15400/test_db?loadBalanceHosts=true&targetServerType=preferSlave"; + 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); + DruidPlugin druidMaster = createDruidPlugin(masterUrl, userName, passWord, driverClass); + druidMaster.start(); + DruidPlugin druidSlave = createDruidPlugin(slaveUrl, userName, passWord, driverClass); + druidSlave.start(); - SlaveDrudPlugin drudPlugin = new SlaveDrudPlugin(masterSlaveRuleConfig, drudMap); - drudPlugin.start(); + ActiveRecordPlugin arpMaster = new ActiveRecordPlugin(MASTER, druidMaster); + arpMaster.setDevMode(false); + arpMaster.setDialect(new PostgreSqlDialect()); + arpMaster.start(); - ActiveRecordPlugin arp = new ActiveRecordPlugin("aGroup", drudPlugin); - arp.setDevMode(false); - //配置数据库方言 - arp.setDialect(new PostgreSqlDialect()); - //启动 - arp.start(); + ActiveRecordPlugin arpSlave = new ActiveRecordPlugin(SLAVE, druidMaster); + arpSlave.setDevMode(false); + arpSlave.setDialect(new PostgreSqlDialect()); + arpSlave.start(); - //String sql = "truncate table test"; - //Db.update(sql); + String sql = "truncate table test"; + Db.use(MASTER).update(sql); for (int i = 1; i <= 100; i++) { - String sql = "insert into test(id,txt) values(?,?)"; - Db.update(sql, i, "黄海——" + i); + sql = "insert into test(id,txt) values(?,?)"; + Db.use(MASTER).update(sql, i, "黄海——" + i); } for (int i = 1; i <= 100; i++) { - String sql = "select * from test where id=?"; - List list = Db.find(sql, i); + sql = "select * from test where id=?"; + List list = Db.use(SLAVE).find(sql, i); System.out.println(list); } } diff --git a/src/main/java/UnitTest/TestReadWriteSplit2.java b/src/main/java/UnitTest/TestReadWriteSplit2.java deleted file mode 100644 index 620ee7e..0000000 --- a/src/main/java/UnitTest/TestReadWriteSplit2.java +++ /dev/null @@ -1,72 +0,0 @@ -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:opengauss://10.10.14.61:15400,10.10.14.62:15400/test_db?autoBalance=roundrobin&targetServerType=master"; - String driverClass = "org.opengauss.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/Const/DbConst.java b/src/main/java/com/dsideal/FengHuang/Const/DbConst.java new file mode 100644 index 0000000..230e29d --- /dev/null +++ b/src/main/java/com/dsideal/FengHuang/Const/DbConst.java @@ -0,0 +1,6 @@ +package com.dsideal.FengHuang.Const; + +public class DbConst { + public static String MASTER="master"; + public static String SLAVE="slave"; +} diff --git a/src/main/java/com/dsideal/FengHuang/Plugin/SlaveDrudPlugin.java b/src/main/java/com/dsideal/FengHuang/Plugin/SlaveDrudPlugin.java deleted file mode 100644 index c617073..0000000 --- a/src/main/java/com/dsideal/FengHuang/Plugin/SlaveDrudPlugin.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.dsideal.FengHuang.Plugin; - -import com.jfinal.plugin.IPlugin; -import com.jfinal.plugin.activerecord.IDataSourceProvider; -import com.jfinal.plugin.druid.DruidPlugin; -import org.apache.shardingsphere.api.config.masterslave.MasterSlaveRuleConfiguration; -import org.apache.shardingsphere.shardingjdbc.api.MasterSlaveDataSourceFactory; - -import javax.sql.DataSource; -import java.sql.SQLException; -import java.util.HashMap; -import java.util.Map; -import java.util.Properties; - -/** - * 读写分离扩展类 - */ -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 Properties()); - 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; - } -} \ No newline at end of file diff --git a/src/main/java/com/dsideal/FengHuang/Start.java b/src/main/java/com/dsideal/FengHuang/Start.java index 8cecda7..362658e 100644 --- a/src/main/java/com/dsideal/FengHuang/Start.java +++ b/src/main/java/com/dsideal/FengHuang/Start.java @@ -3,6 +3,7 @@ package com.dsideal.FengHuang; import com.alibaba.druid.filter.stat.StatFilter; import com.dsideal.FengHuang.Base.Controller.BaseController; import com.dsideal.FengHuang.Classes.Controller.ClassController; +import com.dsideal.FengHuang.Const.DbConst; import com.dsideal.FengHuang.Dm.Controller.DmController; import com.dsideal.FengHuang.Exam.Controller.ExamController; import com.dsideal.FengHuang.Global.Controller.GlobalController; @@ -12,7 +13,6 @@ import com.dsideal.FengHuang.Interceptor.*; import com.dsideal.FengHuang.LoginPerson.Controller.LoginPersonController; import com.dsideal.FengHuang.Menu.Controller.MenuController; import com.dsideal.FengHuang.Organization.Controller.OrganizationController; -import com.dsideal.FengHuang.Plugin.SlaveDrudPlugin; import com.dsideal.FengHuang.Student.Controller.StudentController; import com.dsideal.FengHuang.StudentYd.Controller.StudentYdController; import com.dsideal.FengHuang.Teacher.Controller.TeacherController; @@ -20,7 +20,6 @@ import com.dsideal.FengHuang.TeacherYd.Controller.TeacherYdController; import com.dsideal.FengHuang.Util.FileUtil; import com.dsideal.FengHuang.Util.LogBackLogFactory; import com.dsideal.FengHuang.Util.PkUtil; -import com.google.common.collect.Lists; import com.jfinal.config.*; import com.jfinal.kit.PropKit; import com.jfinal.plugin.activerecord.ActiveRecordPlugin; @@ -31,14 +30,10 @@ import com.jfinal.plugin.druid.IDruidStatViewAuth; import com.jfinal.plugin.redis.RedisPlugin; import com.jfinal.server.undertow.UndertowServer; import com.jfinal.template.Engine; -import org.apache.shardingsphere.api.config.masterslave.LoadBalanceStrategyConfiguration; -import org.apache.shardingsphere.api.config.masterslave.MasterSlaveRuleConfiguration; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import java.io.File; -import java.util.HashMap; -import java.util.Map; public class Start extends JFinalConfig { @@ -132,13 +127,23 @@ public class Start extends JFinalConfig { */ @Override public void configPlugin(Plugins me) { - DruidPlugin drudPlugin = createDruidPlugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password").trim(), PropKit.get("driverClassName")); - me.add(drudPlugin); + DruidPlugin druidMaster = createDruidPlugin(PropKit.get("master_jdbcUrl"), + PropKit.get("master_user"), + PropKit.get("master_password").trim(), PropKit.get("master_driverClassName")); + me.add(druidMaster); - ActiveRecordPlugin arp = new ActiveRecordPlugin("aGroup", drudPlugin); - arp.setDevMode(false); - //配置数据库方言 - arp.setDialect(new PostgreSqlDialect()); + DruidPlugin druidSlave = createDruidPlugin(PropKit.get("slave_jdbcUrl"), + PropKit.get("slave_user"), + PropKit.get("slave_password").trim(), PropKit.get("slave_driverClassName")); + me.add(druidSlave); + + ActiveRecordPlugin arpMaster = new ActiveRecordPlugin(DbConst.MASTER, druidMaster); + arpMaster.setDevMode(false); + arpMaster.setDialect(new PostgreSqlDialect()); + + ActiveRecordPlugin arpSlave = new ActiveRecordPlugin(DbConst.SLAVE, druidMaster); + arpSlave.setDevMode(false); + arpSlave.setDialect(new PostgreSqlDialect()); //遍历sql目录下所有的sql文件 File sqlDir; @@ -148,16 +153,14 @@ public class Start extends JFinalConfig { for (File sqlFile : sqlFiles != null ? sqlFiles : new File[0]) { //只加载.sql文件 if (sqlFile.getName().indexOf(".sql") > 0) { - arp.addSqlTemplate("/Sql/" + sqlFile.getName()); + arpMaster.addSqlTemplate("/Sql/" + sqlFile.getName()); + arpSlave.addSqlTemplate("/Sql/" + sqlFile.getName()); } } - //设置方言 - arp.setDialect(new PostgreSqlDialect()); - //显示SQL语句 - //arp.setShowSql(true); //加载 - me.add(arp); + me.add(arpMaster); + me.add(arpSlave); // 用于缓存模块的redis服务 RedisPlugin redis = new RedisPlugin("myRedis", PropKit.get("redis_ip"), PropKit.getInt("redis_port"), 10 * 1000); //启动redis组件 diff --git a/src/main/resource/application.properties b/src/main/resource/application.properties index 45826d1..c3d0048 100644 --- a/src/main/resource/application.properties +++ b/src/main/resource/application.properties @@ -1,8 +1,14 @@ # 数据库信息 -driverClassName=org.opengauss.Driver -user=postgres -password=DsideaL147258369 -jdbcUrl=jdbc:opengauss://10.10.14.209:5432/ccdjzswd_db +master_driverClassName=org.postgresql.Driver +master_user=postgres +master_password=DsideaL147258369 +master_jdbcUrl=jdbc:postgresql://10.10.14.209:5432/ccdjzswd_db + +slave_driverClassName=org.postgresql.Driver +slave_user=postgres +slave_password=DsideaL147258369 +slave_jdbcUrl=jdbc:postgresql://10.10.14.209:5432/ccdjzswd_db + # redis ip redis_ip=10.10.14.169 diff --git a/target/classes/application.properties b/target/classes/application.properties index 45826d1..c3d0048 100644 --- a/target/classes/application.properties +++ b/target/classes/application.properties @@ -1,8 +1,14 @@ # 数据库信息 -driverClassName=org.opengauss.Driver -user=postgres -password=DsideaL147258369 -jdbcUrl=jdbc:opengauss://10.10.14.209:5432/ccdjzswd_db +master_driverClassName=org.postgresql.Driver +master_user=postgres +master_password=DsideaL147258369 +master_jdbcUrl=jdbc:postgresql://10.10.14.209:5432/ccdjzswd_db + +slave_driverClassName=org.postgresql.Driver +slave_user=postgres +slave_password=DsideaL147258369 +slave_jdbcUrl=jdbc:postgresql://10.10.14.209:5432/ccdjzswd_db + # redis ip redis_ip=10.10.14.169