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