From 9211f4d7fe979c8a6eedca69349b9a4e1e03aba3 Mon Sep 17 00:00:00 2001
From: wxm <115806199+youfanx@users.noreply.github.com>
Date: Wed, 21 Feb 2024 17:39:08 +0800
Subject: [PATCH] up rxlib-x
---
agent/pom.xml | 2 +-
pom.xml | 34 +-
rxlib-x/pom.xml | 51 +
.../java/org/rx/jdbc/ConnectionPoolKind.java | 13 +
.../org/rx/jdbc/ConnectionPoolMXBean.java | 25 +
.../java/org/rx/jdbc/DataSourceConfig.java | 16 +
.../java/org/rx/jdbc/DriverClassFlag.java | 45 +
.../src/main/java/org/rx/jdbc/JdbcConfig.java | 69 ++
.../main/java/org/rx/jdbc/JdbcExecutable.java | 50 +
.../main/java/org/rx/jdbc/JdbcExecutor.java | 589 ++++++++++
.../src/main/java/org/rx/jdbc/JdbcUtil.java | 198 ++++
.../org/rx/jdbc/ResultSetProxyObject.java | 1006 +++++++++++++++++
.../java/org/rx/jdbc/SqlStatementType.java | 11 +
.../java/org/rx/jdbc/SuperDataSource.java | 32 +
.../src/main/java/org/rx/jdbc/SuperJdbc.java | 33 +
.../java/org/rx/jdbc/TimeoutEventArgs.java | 13 +
.../src/test/java/org/rx/jdbc/TestJdbc.java | 13 +
rxlib/pom.xml | 48 +-
rxlib/src/test/java/org/rx/bean/TestBean.java | 2 +
rxlib/src/test/java/org/rx/core/TestCore.java | 2 +-
rxlib/src/test/java/org/rx/io/TestIO.java | 3 +
rxlib/src/test/java/org/rx/net/TestSocks.java | 1 +
.../java/org/rx/{bean => test}/ErrorBean.java | 2 +-
.../java/org/rx/{bean => test}/GirlBean.java | 3 +-
.../rx/{bean => test}/HttpUserManager.java | 2 +-
.../java/org/rx/{bean => test}/IPerson.java | 2 +-
.../org/rx/{bean => test}/PersonBean.java | 5 +-
.../org/rx/{bean => test}/PersonGender.java | 3 +-
.../org/rx/{bean => test}/UserEventArgs.java | 2 +-
.../org/rx/{bean => test}/UserManager.java | 2 +-
.../rx/{bean => test}/UserManagerImpl.java | 2 +-
rxlib/src/test/java/org/rx/util/TestUtil.java | 3 +
32 files changed, 2247 insertions(+), 35 deletions(-)
create mode 100644 rxlib-x/pom.xml
create mode 100644 rxlib-x/src/main/java/org/rx/jdbc/ConnectionPoolKind.java
create mode 100644 rxlib-x/src/main/java/org/rx/jdbc/ConnectionPoolMXBean.java
create mode 100644 rxlib-x/src/main/java/org/rx/jdbc/DataSourceConfig.java
create mode 100644 rxlib-x/src/main/java/org/rx/jdbc/DriverClassFlag.java
create mode 100644 rxlib-x/src/main/java/org/rx/jdbc/JdbcConfig.java
create mode 100644 rxlib-x/src/main/java/org/rx/jdbc/JdbcExecutable.java
create mode 100644 rxlib-x/src/main/java/org/rx/jdbc/JdbcExecutor.java
create mode 100644 rxlib-x/src/main/java/org/rx/jdbc/JdbcUtil.java
create mode 100644 rxlib-x/src/main/java/org/rx/jdbc/ResultSetProxyObject.java
create mode 100644 rxlib-x/src/main/java/org/rx/jdbc/SqlStatementType.java
create mode 100644 rxlib-x/src/main/java/org/rx/jdbc/SuperDataSource.java
create mode 100644 rxlib-x/src/main/java/org/rx/jdbc/SuperJdbc.java
create mode 100644 rxlib-x/src/main/java/org/rx/jdbc/TimeoutEventArgs.java
create mode 100644 rxlib-x/src/test/java/org/rx/jdbc/TestJdbc.java
rename rxlib/src/test/java/org/rx/{bean => test}/ErrorBean.java (98%)
rename rxlib/src/test/java/org/rx/{bean => test}/GirlBean.java (95%)
rename rxlib/src/test/java/org/rx/{bean => test}/HttpUserManager.java (96%)
rename rxlib/src/test/java/org/rx/{bean => test}/IPerson.java (79%)
rename rxlib/src/test/java/org/rx/{bean => test}/PersonBean.java (93%)
rename rxlib/src/test/java/org/rx/{bean => test}/PersonGender.java (86%)
rename rxlib/src/test/java/org/rx/{bean => test}/UserEventArgs.java (94%)
rename rxlib/src/test/java/org/rx/{bean => test}/UserManager.java (95%)
rename rxlib/src/test/java/org/rx/{bean => test}/UserManagerImpl.java (97%)
diff --git a/agent/pom.xml b/agent/pom.xml
index d503fe0f..2b3ef6a9 100644
--- a/agent/pom.xml
+++ b/agent/pom.xml
@@ -4,7 +4,7 @@
com.github.rockylomo
rx
- 2.19.10
+ 2.19.12
agent
diff --git a/pom.xml b/pom.xml
index d46beb1c..d86cf161 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,5 +1,6 @@
-
+
4.0.0
com.github.rockylomo
rx
@@ -12,9 +13,10 @@
9
- rxlib
- agent
daemon
+ agent
+ rxlib
+ rxlib-x
rx
@@ -54,8 +56,34 @@
1.8
true
false
+
+ 1.18.30
+ 5.9.1
+ 1.36
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+ provided
+
+
+
+ org.junit.jupiter
+ junit-jupiter
+ ${junit.version}
+ test
+
+
+ org.openjdk.jmh
+ jmh-generator-annprocess
+ ${jmh.version}
+ test
+
+
+
diff --git a/rxlib-x/pom.xml b/rxlib-x/pom.xml
new file mode 100644
index 00000000..b73520d3
--- /dev/null
+++ b/rxlib-x/pom.xml
@@ -0,0 +1,51 @@
+
+
+ 4.0.0
+
+ com.github.rockylomo
+ rx
+ 2.19.13-SNAPSHOT
+
+ rxlib-x
+ jar
+ rxlib-x
+ A set of utilities for Java
+
+
+ 8
+ 8
+ UTF-8
+ 1.18.30
+
+
+
+
+ com.github.rockylomo
+ rxlib
+ ${parent.version}
+
+
+ mysql
+ mysql-connector-java
+ 5.1.49
+
+
+ com.zaxxer
+ HikariCP
+ 4.0.3
+
+
+ slf4j-api
+ org.slf4j
+
+
+
+
+ com.alibaba
+ druid
+ 1.2.21
+
+
+
diff --git a/rxlib-x/src/main/java/org/rx/jdbc/ConnectionPoolKind.java b/rxlib-x/src/main/java/org/rx/jdbc/ConnectionPoolKind.java
new file mode 100644
index 00000000..35c795fc
--- /dev/null
+++ b/rxlib-x/src/main/java/org/rx/jdbc/ConnectionPoolKind.java
@@ -0,0 +1,13 @@
+package org.rx.jdbc;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @author wangxiaoming
+ * Date: 2019/12/10
+ */
+public enum ConnectionPoolKind {
+ NONE,
+ HikariCP,
+ Druid
+}
diff --git a/rxlib-x/src/main/java/org/rx/jdbc/ConnectionPoolMXBean.java b/rxlib-x/src/main/java/org/rx/jdbc/ConnectionPoolMXBean.java
new file mode 100644
index 00000000..ca1fcb9d
--- /dev/null
+++ b/rxlib-x/src/main/java/org/rx/jdbc/ConnectionPoolMXBean.java
@@ -0,0 +1,25 @@
+package org.rx.jdbc;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @author wangxiaoming
+ * Date: 2019/12/10
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+public class ConnectionPoolMXBean implements Serializable {
+ private static final long serialVersionUID = -8774671998907063174L;
+ private String name;
+ private int idleConnections;
+ private int activeConnections;
+ private int totalConnections;
+ private int threadsAwaitingConnection;
+}
diff --git a/rxlib-x/src/main/java/org/rx/jdbc/DataSourceConfig.java b/rxlib-x/src/main/java/org/rx/jdbc/DataSourceConfig.java
new file mode 100644
index 00000000..e84e11b8
--- /dev/null
+++ b/rxlib-x/src/main/java/org/rx/jdbc/DataSourceConfig.java
@@ -0,0 +1,16 @@
+package org.rx.jdbc;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+public class DataSourceConfig implements Serializable {
+ private static final long serialVersionUID = 8722778295417630020L;
+ String jdbcUrl;
+ String username, password;
+}
diff --git a/rxlib-x/src/main/java/org/rx/jdbc/DriverClassFlag.java b/rxlib-x/src/main/java/org/rx/jdbc/DriverClassFlag.java
new file mode 100644
index 00000000..667d2add
--- /dev/null
+++ b/rxlib-x/src/main/java/org/rx/jdbc/DriverClassFlag.java
@@ -0,0 +1,45 @@
+package org.rx.jdbc;
+
+import lombok.Getter;
+import org.rx.bean.NEnum;
+import org.rx.core.Arrays;
+import org.rx.core.Linq;
+import org.rx.core.Strings;
+import org.rx.exception.InvalidException;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @author wangxiaoming
+ * Date: 2019/9/2
+ */
+@Getter
+public enum DriverClassFlag implements NEnum {
+ MySQL(1, "com.mysql.jdbc.Driver", "jdbc:mysql:"),
+ PostgreSQL(2, "org.postgresql.Driver", "jdbc:postgresql:"),
+ Oracle(3, "oracle.jdbc.driver.OracleDriver", "jdbc:oracle:"),
+ SQLServer(4, "com.microsoft.sqlserver.jdbc.SQLServerDriver", "jdbc:sqlserver:", "jdbc:microsoft:sqlserver:"),
+ H2(5, "org.h2.Driver", "jdbc:h2:"),
+ MongoDB(6, "com.xdbc.jdbc.mongodb.MongoDriver", "jdbc:mongodb:");
+
+ private final int value;
+ private final String driverClassName;
+ private final List urlPrefixes;
+
+ DriverClassFlag(int value, String driverClassName, String... urlPrefixes) {
+ this.value = value;
+ this.driverClassName = driverClassName;
+ this.urlPrefixes = Collections.unmodifiableList(Arrays.toList(urlPrefixes));
+ }
+
+ public static DriverClassFlag recognize(String jdbcUrl) {
+ DriverClassFlag flag = Linq.from(DriverClassFlag.values()).firstOrDefault(p -> Linq.from(p.urlPrefixes).any(x -> Strings.startsWithIgnoreCase(jdbcUrl, x)));
+ if (flag == null) {
+ throw new InvalidException("Recognize url {} fail", jdbcUrl);
+ }
+ return flag;
+ }
+}
diff --git a/rxlib-x/src/main/java/org/rx/jdbc/JdbcConfig.java b/rxlib-x/src/main/java/org/rx/jdbc/JdbcConfig.java
new file mode 100644
index 00000000..7c47e368
--- /dev/null
+++ b/rxlib-x/src/main/java/org/rx/jdbc/JdbcConfig.java
@@ -0,0 +1,69 @@
+package org.rx.jdbc;
+
+import lombok.*;
+import org.rx.net.Sockets;
+
+import java.net.InetSocketAddress;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class JdbcConfig extends DataSourceConfig {
+ private static final long serialVersionUID = 2890340670027176789L;
+
+ private long connectionTimeoutMillis = 30000;
+ private long idleTimeoutMillis = 60000;
+ private long maxLifetimeMillis = 1800000;
+ private int minPoolSize = 10;
+ private int maxPoolSize = 10;
+ private ConnectionPoolKind poolKind = ConnectionPoolKind.HikariCP;
+
+ private String poolName;
+ private boolean enableStreamingResults;
+ private long executeTimeoutMillis = 30000;
+ private boolean interruptTimeoutExecution = false;
+
+ @Getter(AccessLevel.PRIVATE)
+ @Setter(AccessLevel.PRIVATE)
+ private InetSocketAddress endpoint;
+ @Getter(AccessLevel.PRIVATE)
+ @Setter(AccessLevel.PRIVATE)
+ private String databaseName;
+
+ public void setUrl(String url) {
+ jdbcUrl = url;
+ endpoint = null;
+ databaseName = null;
+ }
+
+ public InetSocketAddress getEndpointFromUrl() {
+ if (endpoint == null) {
+ endpoint = getEndpointFromUrl(jdbcUrl);
+ }
+ return endpoint;
+ }
+
+ public String getDatabaseNameFromUrl() {
+ if (databaseName == null) {
+ databaseName = getDatabaseNameFromUrl(jdbcUrl);
+ }
+ return databaseName;
+ }
+
+ public static InetSocketAddress getEndpointFromUrl(String url) {
+ return Sockets.parseEndpoint(findChars(url, "://", "/", 0));
+ }
+
+ public static String getDatabaseNameFromUrl(String url) {
+ return findChars(url, "/", "?", url.indexOf("://") + 3);
+ }
+
+ private static String findChars(String url, String begin, String end, int startIndex) {
+ int s = url.indexOf(begin, startIndex);
+ if (s == -1) {
+// throw new InvalidOperationException("begin flag not found");
+ return null;
+ }
+ int offset = s + begin.length(), e = url.indexOf(end, offset);
+ return e == -1 ? url.substring(offset) : url.substring(offset, e);
+ }
+}
diff --git a/rxlib-x/src/main/java/org/rx/jdbc/JdbcExecutable.java b/rxlib-x/src/main/java/org/rx/jdbc/JdbcExecutable.java
new file mode 100644
index 00000000..8f080420
--- /dev/null
+++ b/rxlib-x/src/main/java/org/rx/jdbc/JdbcExecutable.java
@@ -0,0 +1,50 @@
+package org.rx.jdbc;
+
+import lombok.NonNull;
+import org.rx.bean.$;
+import org.rx.util.function.BiFunc;
+
+import java.sql.ResultSet;
+import java.util.List;
+
+public interface JdbcExecutable {
+ ResultSet executeQuery(String sql, Object[] params);
+
+ ResultSet executeQuery(String sql, Object[] params, long executeTimeoutMillis);
+
+ T executeQuery(String sql, Object[] params, BiFunc func);
+
+ T executeQuery(String sql, Object[] params, BiFunc func, long executeTimeoutMillis);
+
+ int execute(String sql, Object[] params);
+
+ int execute(String sql, Object[] params, long executeTimeoutMillis);
+
+ int execute(String sql, Object[] params, int generatedKeys, $ lastInsertId);
+
+ int execute(String sql, Object[] params, long executeTimeoutMillis, int generatedKeys, $ lastInsertId);
+
+ int[] executeBatch(String sql, List