main
黄海 2 years ago
parent 0300c8c1da
commit 5ba3a9641e

@ -0,0 +1 @@
https://gitee.com/jfinal/jfinal.git

@ -50,13 +50,6 @@
<scope>system</scope>
<systemPath>${project.basedir}/ExtendJar/aspose.slides-19.3.jar</systemPath>
</dependency>
<dependency>
<groupId>org.opengauss</groupId>
<artifactId>opengauss-jdbc</artifactId>
<version>5.0.0</version>
<scope>system</scope> <!--system类似provided需要显式提供依赖的jar以后Maven就不会在Repository中查找它-->
<systemPath>${project.basedir}/ExtendJar/opengauss-jdbc-5.0.0.jar</systemPath>
</dependency>
<!--jfinal主框架-->
<dependency>
<groupId>com.jfinal</groupId>
@ -257,19 +250,18 @@
<version>1.7.36</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.opengauss/opengauss-jdbc -->
<dependency>
<groupId>org.opengauss</groupId>
<artifactId>opengauss-jdbc</artifactId>
<version>5.0.0</version>
</dependency>
<!--引入kafka-->
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>3.4.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.shardingsphere/sharding-jdbc-core -->
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-core</artifactId>
<version>4.1.1</version>
</dependency>
</dependencies>
<build>
<plugins>

@ -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 {

@ -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<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);
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<Record> list = Db.find(sql, i);
sql = "select * from test where id=?";
List<Record> list = Db.use(SLAVE).find(sql, i);
System.out.println(list);
}
}

@ -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<Record> list = Db.find(sql, i);
System.out.println(list);
}
}
}

@ -0,0 +1,6 @@
package com.dsideal.FengHuang.Const;
public class DbConst {
public static String MASTER="master";
public static String SLAVE="slave";
}

@ -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<String, DruidPlugin> druidPlugins;
//原数据库连接源map
Map<String, DataSource> dataSourceMap;
//最终sharding-jdbc封装后的数据库连接源
DataSource dataSource;
public SlaveDrudPlugin(MasterSlaveRuleConfiguration masterSlaveRuleConfiguration, Map<String, DruidPlugin> druidPlugins) {
this.masterSlaveRuleConfiguration = masterSlaveRuleConfiguration;
this.druidPlugins = druidPlugins;
dataSourceMap = new HashMap<>();
}
public boolean start() {
//遍历数据源 将数据源加入sharding jdbc
for (Map.Entry<String, DruidPlugin> 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<String, DruidPlugin> entry : druidPlugins.entrySet()) {
entry.getValue().stop();
dataSourceMap.put(entry.getKey(), entry.getValue().getDataSource());
}
return true;
}
public DataSource getDataSource() {
return dataSource;
}
}

@ -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组件

@ -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

@ -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

Loading…
Cancel
Save