123
parent
8b97cbac7c
commit
e054334e04
@ -0,0 +1,115 @@
|
|||||||
|
package com.nmgs.test;
|
||||||
|
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.DriverManager;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.ResultSetMetaData;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.sql.Statement;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author: shuguang
|
||||||
|
* @date: 2024年06月18日 17:02
|
||||||
|
* @description: 数据库表中数据比对测试
|
||||||
|
*/
|
||||||
|
public class DataTableComparisonTest {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
// 数据库连接信息
|
||||||
|
String db1Url = "jdbc:oracle:thin:@10.15.100.5:1521/TORCL";
|
||||||
|
String db2Url = "jdbc:oracle:thin:@10.15.100.5:1521/TORCL";
|
||||||
|
String username = "nmgmpayadmin";
|
||||||
|
String password = "nmgh90[]";
|
||||||
|
String username2 = "nmghlbeadmin";
|
||||||
|
String password2 = "nmlwzx2021[]";
|
||||||
|
// SQL查询语句
|
||||||
|
//String query = "SELECT SPLITDATE,PROCESSTIME,AMOUNT,TRANSACTIONCOUNT,BASICFILENAME FROM CT_ETC_CLEAR_SUM WHERE PROCESSTIME>=to_date('2024-06-16 00:00:00','yyyy-mm-dd hh24:mi:ss') and PROCESSTIME<=to_date('2024-06-17 00:00:00','yyyy-mm-dd hh24:mi:ss') ORDER BY PROCESSTIME ";
|
||||||
|
//String query = "SELECT SERPROVINCEID,CLEARDATE,PROCESSTIME,PAYERAMOUNT,PAYERMESSAGECOUNT,RECEIVERAMOUNT FROM CT_OTHER_CLEAR_SUM_1 WHERE PROCESSTIME>=to_date('2024-06-16 00:00:00','yyyy-mm-dd hh24:mi:ss') and PROCESSTIME<=to_date('2024-06-17 00:00:00','yyyy-mm-dd hh24:mi:ss') ORDER BY PROCESSTIME ";
|
||||||
|
//String query = "SELECT count(*) FROM CT_GANTRYPASSID WHERE EXTIME>=to_date('2024-06-17 00:00:00','yyyy-mm-dd hh24:mi:ss') and EXTIME<=to_date('2024-06-17 00:00:00','yyyy-mm-dd hh24:mi:ss') ";
|
||||||
|
//String query = "SELECT ID,SPLITTIME,EXTIME FROM CT_OUT_PORT_ETC_NOPAY WHERE EXTIME>=to_date('2024-06-16 00:00:00','yyyy-mm-dd hh24:mi:ss') and EXTIME<=to_date('2024-06-17 00:00:00','yyyy-mm-dd hh24:mi:ss') ORDER BY EXTIME";
|
||||||
|
//String query = "SELECT ID,SPLITTIME,ENTIME FROM CT_OTHER_OUT_PORT WHERE ENTIME>=to_date('2024-06-16 00:00:00','yyyy-mm-dd hh24:mi:ss') and ENTIME<=to_date('2024-06-17 00:00:00','yyyy-mm-dd hh24:mi:ss') ORDER BY EXTIME";
|
||||||
|
//String query = "SELECT ID,SPLITTIME FROM CT_OTHER_GANTRYPASSID WHERE SPLITTIME>=to_date('2024-06-17 00:00:00','yyyy-mm-dd hh24:mi:ss') and SPLITTIME<=to_date('2024-06-17 00:00:00','yyyy-mm-dd hh24:mi:ss') ORDER BY ID " ;
|
||||||
|
//String query = "SELECT ID,SPLITTIME FROM CT_OUTOTHER_GANTRY WHERE SPLITTIME>=to_date('2024-06-17 00:00:00','yyyy-mm-dd hh24:mi:ss') and SPLITTIME<=to_date('2024-06-17 00:00:00','yyyy-mm-dd hh24:mi:ss') ORDER BY ID " ;
|
||||||
|
String query = "SELECT ID,REFUNDID,PROCESSTIME FROM CT_SERVERREFUND_TABLE WHERE PROCESSTIME>=to_date('2024-06-16 00:00:00','yyyy-mm-dd hh24:mi:ss') and PROCESSTIME<=to_date('2024-06-17 00:00:00','yyyy-mm-dd hh24:mi:ss') ORDER BY ID" ;
|
||||||
|
//304 ID长度不一致 0114012399230100003730202404221452502024
|
||||||
|
//0114012399230100003730202404221452502024061609034300202
|
||||||
|
//String query = "SELECT ID,RESTITUTIONID,PROCESSTIME FROM CT_SERVERLATERPAY_TABLE WHERE PROCESSTIME>=to_date('2024-06-16 00:00:00','yyyy-mm-dd hh24:mi:ss') and PROCESSTIME<=to_date('2024-06-17 00:00:00','yyyy-mm-dd hh24:mi:ss') ORDER BY ID" ;
|
||||||
|
//String query = "SELECT PASSID,VEHICLEID,RECEIVERID,PAYERID,FEE,RECEIVETIME FROM CT_GATHERDETAIL_TABLE WHERE RECEIVETIME>=to_date('2024-06-16 00:00:00','yyyy-mm-dd hh24:mi:ss') and RECEIVETIME<=to_date('2024-06-17 00:00:00','yyyy-mm-dd hh24:mi:ss') ORDER BY PASSID" ;
|
||||||
|
//String query = "SELECT PASSID,VEHICLEID,ORIGIN,PAYERID,PAYFEE,PAYTIME FROM CT_PAYERDETAIL_TABLE WHERE PAYTIME>=to_date('2024-06-16 00:00:00','yyyy-mm-dd hh24:mi:ss') and PAYTIME<=to_date('2024-06-17 00:00:00','yyyy-mm-dd hh24:mi:ss') ORDER BY PASSID" ;
|
||||||
|
//String query = "SELECT CHECKID FROM CHECKRESULT_INFO_TABLE WHERE CHECKTIME>=to_date('2024-06-16 00:00:00','yyyy-mm-dd hh24:mi:ss') and CHECKTIME<=to_date('2024-06-17 00:00:00','yyyy-mm-dd hh24:mi:ss') ORDER BY CHECKID" ;
|
||||||
|
//String query = "SELECT CHECKID,VEHICLEID,CHECKTIME FROM CHECKRESULT_TABLE_NEW WHERE CHECKTIME>=to_date('2024-06-16 00:00:00','yyyy-mm-dd hh24:mi:ss') and CHECKTIME<=to_date('2024-06-17 00:00:00','yyyy-mm-dd hh24:mi:ss') ORDER BY CHECKID" ;
|
||||||
|
//String query = "SELECT ID,EXTIME FROM BSDZ_DISPUTE_PASSPROV WHERE EXTIME>=to_date('2024-06-16 00:00:00','yyyy-mm-dd hh24:mi:ss') and EXTIME<=to_date('2024-06-17 00:00:00','yyyy-mm-dd hh24:mi:ss') ORDER BY ID" ;
|
||||||
|
//String query = "SELECT SPLITDATE,SERPROVINCEID FROM BSDZ_CLEAR_SUM WHERE SPLITDATE>=to_date('2024-06-16 00:00:00','yyyy-mm-dd hh24:mi:ss') and SPLITDATE<=to_date('2024-06-17 00:00:00','yyyy-mm-dd hh24:mi:ss') ORDER BY SPLITDATE" ;
|
||||||
|
//String query = "SELECT ID,PROVEXTIME FROM BSDZ_NOOUTPORT_S2_DOWN WHERE PROVEXTIME>=to_date('2024-06-16 00:00:00','yyyy-mm-dd hh24:mi:ss') and PROVEXTIME<=to_date('2024-06-17 00:00:00','yyyy-mm-dd hh24:mi:ss') ORDER BY ID" ;
|
||||||
|
//String query = "SELECT ID,SPLITDATE FROM BSDZ_NOSPLIT_S2_DOWN WHERE SPLITDATE>=to_date('2024-06-16 00:00:00','yyyy-mm-dd hh24:mi:ss') and SPLITDATE<=to_date('2024-06-17 00:00:00','yyyy-mm-dd hh24:mi:ss') ORDER BY ID" ;
|
||||||
|
//String query = "SELECT ID,EXTIME FROM BSDZ_DISPUTE_EXPROV WHERE EXTIME>=to_date('2024-06-16 00:00:00','yyyy-mm-dd hh24:mi:ss') and EXTIME<=to_date('2024-06-17 00:00:00','yyyy-mm-dd hh24:mi:ss') ORDER BY ID" ;
|
||||||
|
|
||||||
|
//String query = "SELECT ID,PROVEXTIME FROM BSDZ_NOOUTPORT_S3_DOWN WHERE PROVEXTIME>=to_date('2024-06-16 00:00:00','yyyy-mm-dd hh24:mi:ss') and PROVEXTIME<=to_date('2024-06-17 00:00:00','yyyy-mm-dd hh24:mi:ss') ORDER BY ID" ;
|
||||||
|
//String query = "SELECT ID,PROVEXTIME FROM BSDZ_NOOUTPORT_RESULT WHERE PROVEXTIME>=to_date('2024-06-16 00:00:00','yyyy-mm-dd hh24:mi:ss') and PROVEXTIME<=to_date('2024-06-17 00:00:00','yyyy-mm-dd hh24:mi:ss') ORDER BY ID" ;
|
||||||
|
//String query = "SELECT ID,SPLITDATE FROM BSDZ_NOSPLIT_S3_DOWN WHERE SPLITDATE>=to_date('2024-06-16 00:00:00','yyyy-mm-dd hh24:mi:ss') and SPLITDATE<=to_date('2024-06-17 00:00:00','yyyy-mm-dd hh24:mi:ss') ORDER BY ID" ;
|
||||||
|
//String query = "SELECT ID,SPLITDATE FROM BSDZ_NOSPLIT_RESULT WHERE SPLITDATE>=to_date('2024-06-16 00:00:00','yyyy-mm-dd hh24:mi:ss') and SPLITDATE<=to_date('2024-06-17 00:00:00','yyyy-mm-dd hh24:mi:ss') ORDER BY ID" ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 连接数据库并获取数据
|
||||||
|
List<Map<String, Object>> dataFromDb1 = fetchData(db1Url, query, username, password);
|
||||||
|
List<Map<String, Object>> dataFromDb2 = fetchData(db2Url, query, username2, password2);
|
||||||
|
|
||||||
|
// 比较数据
|
||||||
|
|
||||||
|
|
||||||
|
boolean areEqual = areListsEqual(dataFromDb1, dataFromDb2);
|
||||||
|
System.out.println("数据是否一致: " + areEqual);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private static List<Map<String, Object>> fetchData(String url, String query, String user, String password) {
|
||||||
|
List<Map<String, Object>> dataList = new ArrayList<>();
|
||||||
|
try (Connection conn = DriverManager.getConnection(url, user, password);
|
||||||
|
Statement stmt = conn.createStatement();
|
||||||
|
ResultSet rs = stmt.executeQuery(query)) {
|
||||||
|
|
||||||
|
ResultSetMetaData metaData = rs.getMetaData();
|
||||||
|
int columnCount = metaData.getColumnCount();
|
||||||
|
|
||||||
|
while (rs.next()) {
|
||||||
|
Map<String, Object> row = new HashMap<>();
|
||||||
|
for (int i = 1; i <= columnCount; i++) {
|
||||||
|
row.put(metaData.getColumnName(i), rs.getObject(i));
|
||||||
|
}
|
||||||
|
dataList.add(row);
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return dataList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean areListsEqual(List<Map<String, Object>> list1, List<Map<String, Object>> list2) {
|
||||||
|
if (list1.size() != list2.size()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 对列表中的Map进行排序
|
||||||
|
list1.sort(Comparator.comparing(Map::toString));
|
||||||
|
list2.sort(Comparator.comparing(Map::toString));
|
||||||
|
|
||||||
|
for (int i = 0; i < list1.size(); i++) {
|
||||||
|
Map<String, Object> map1 = list1.get(i);
|
||||||
|
Map<String, Object> map2 = list2.get(i);
|
||||||
|
if (!map1.equals(map2) || !map2.equals(map1)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,61 @@
|
|||||||
|
package com.nmgs.test;
|
||||||
|
|
||||||
|
import com.nmgs.util.BatchUtil;
|
||||||
|
import com.nmgs.util.DBUtil;
|
||||||
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
public class sta_test {
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
final boolean[] result = {true};
|
||||||
|
String sql="select * from nmglwadmin.acarno_test where ishand=0 and rownum<=10000";
|
||||||
|
//String sql = "select * from nmglwadmin.acarno_test where ACARNO='冀B7093Q'";
|
||||||
|
JdbcTemplate jdbcTemplate = new JdbcTemplate(new DBUtil().Hikar_DataSource_MPAY());
|
||||||
|
//while (true){
|
||||||
|
long startAll = System.currentTimeMillis();
|
||||||
|
for (int j = 0; j < 20; j++) {
|
||||||
|
try {
|
||||||
|
long start = System.currentTimeMillis();
|
||||||
|
List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
|
||||||
|
if (list.size() > 0) {
|
||||||
|
//int poolSize = Runtime.getRuntime().availableProcessors();
|
||||||
|
ExecutorService executorService = Executors.newFixedThreadPool(20);
|
||||||
|
|
||||||
|
// 将数据分成20份
|
||||||
|
int batchSize = list.size() / 20;
|
||||||
|
for (int i = 0; i < 20; i++) {
|
||||||
|
int startIndex = i * batchSize;
|
||||||
|
int endIndex = (i + 1) * batchSize;
|
||||||
|
if (i == 19) {
|
||||||
|
endIndex = list.size(); // 最后一份可能包含更多的数据
|
||||||
|
}
|
||||||
|
List<Map<String, Object>> subList = list.subList(startIndex, endIndex);
|
||||||
|
BatchUtil task = new BatchUtil(jdbcTemplate, subList);
|
||||||
|
executorService.submit(task);
|
||||||
|
|
||||||
|
}
|
||||||
|
// 关闭线程池
|
||||||
|
// 关闭线程池,尝试停止所有正在执行的任务
|
||||||
|
executorService.shutdown();
|
||||||
|
// 等待所有任务完成,设置合理的超时时间
|
||||||
|
executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
|
||||||
|
}
|
||||||
|
long end = System.currentTimeMillis();
|
||||||
|
System.out.println("单次多线程处理耗时:"+(end-start)+"毫秒");
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
|
||||||
|
System.out.println("程序错误:" + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
long endAll = System.currentTimeMillis();
|
||||||
|
System.out.println("多线程处理总耗时:"+(endAll-startAll)+"毫秒");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,123 @@
|
|||||||
|
package com.nmgs.util;
|
||||||
|
|
||||||
|
import com.zaxxer.hikari.HikariConfig;
|
||||||
|
import com.zaxxer.hikari.HikariDataSource;
|
||||||
|
|
||||||
|
import javax.sql.DataSource;
|
||||||
|
|
||||||
|
public class DBUtil {
|
||||||
|
public DataSource Hikar_DataSource_NMGGS() throws Exception{
|
||||||
|
HikariConfig config=new HikariConfig();
|
||||||
|
try {
|
||||||
|
config.setDriverClassName("oracle.jdbc.driver.OracleDriver");
|
||||||
|
config.setJdbcUrl("jdbc:oracle:thin:@//10.15.0.11:1521/orcl");
|
||||||
|
config.setUsername("nmggs");
|
||||||
|
config.setPoolName("nmggs");
|
||||||
|
config.setPassword("sysadmin");
|
||||||
|
config.addDataSourceProperty("v$session.osuser","DL");
|
||||||
|
config.addDataSourceProperty("v$session.machine","10.15.0.36");
|
||||||
|
config.addDataSourceProperty("v$session.program","DIV_SEC");
|
||||||
|
config.setMaximumPoolSize(10);
|
||||||
|
config.setMinimumIdle(2);
|
||||||
|
config.setConnectionTestQuery("select 1 from dual");
|
||||||
|
config.setAutoCommit(true);
|
||||||
|
}
|
||||||
|
catch (Exception e){
|
||||||
|
System.out.println("连接池错误:"+e.toString());
|
||||||
|
}
|
||||||
|
DataSource ds=new HikariDataSource(config);
|
||||||
|
return ds;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DataSource Hikar_DataSource_JTJT() throws Exception{
|
||||||
|
HikariConfig config=new HikariConfig();
|
||||||
|
try {
|
||||||
|
config.setDriverClassName("oracle.jdbc.driver.OracleDriver");
|
||||||
|
config.setJdbcUrl("jdbc:oracle:thin:@//10.15.0.12:1521/orcl");
|
||||||
|
config.setUsername("nmgjtjt");
|
||||||
|
config.setPoolName("nmgjtjt");
|
||||||
|
config.setPassword("sysadmin");
|
||||||
|
config.addDataSourceProperty("v$session.osuser","DL");
|
||||||
|
config.addDataSourceProperty("v$session.machine","10.15.0.13");
|
||||||
|
config.addDataSourceProperty("v$session.program","DIV_SEC");
|
||||||
|
config.setMaximumPoolSize(10);
|
||||||
|
config.setMinimumIdle(2);
|
||||||
|
config.setConnectionTestQuery("select 1 from dual");
|
||||||
|
config.setAutoCommit(true);
|
||||||
|
}
|
||||||
|
catch (Exception e){
|
||||||
|
System.out.println("连接池错误:"+e.toString());
|
||||||
|
}
|
||||||
|
DataSource ds=new HikariDataSource(config);
|
||||||
|
return ds;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DataSource Hikar_DataSource_MPAY() throws Exception{
|
||||||
|
HikariConfig config=new HikariConfig();
|
||||||
|
try {
|
||||||
|
config.setDriverClassName("oracle.jdbc.driver.OracleDriver");
|
||||||
|
config.setJdbcUrl("jdbc:oracle:thin:@//10.15.100.5:1521/torcl");
|
||||||
|
config.setUsername("nmgmpayadmin");
|
||||||
|
config.setPoolName("nmggs");
|
||||||
|
config.setPassword("nmgh90[]");
|
||||||
|
config.addDataSourceProperty("v$session.osuser","DL");
|
||||||
|
config.addDataSourceProperty("v$session.machine","10.15.0.36");
|
||||||
|
config.addDataSourceProperty("v$session.program","DIV_SEC");
|
||||||
|
config.setMaximumPoolSize(10);
|
||||||
|
config.setMinimumIdle(2);
|
||||||
|
config.setConnectionTestQuery("select 1 from dual");
|
||||||
|
config.setAutoCommit(true);
|
||||||
|
}
|
||||||
|
catch (Exception e){
|
||||||
|
System.out.println("连接池错误:"+e.toString());
|
||||||
|
}
|
||||||
|
DataSource ds=new HikariDataSource(config);
|
||||||
|
return ds;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DataSource Hikar_DataSource_GT() throws Exception{
|
||||||
|
HikariConfig config=new HikariConfig();
|
||||||
|
try {
|
||||||
|
config.setDriverClassName("oracle.jdbc.driver.OracleDriver");
|
||||||
|
config.setJdbcUrl("jdbc:oracle:thin:@//10.15.100.5:1521/torcl");
|
||||||
|
config.setUsername("nmggtadmin");
|
||||||
|
config.setPoolName("nmggs");
|
||||||
|
config.setPassword("nmgh90[]");
|
||||||
|
config.addDataSourceProperty("v$session.osuser","DL");
|
||||||
|
config.addDataSourceProperty("v$session.machine","10.15.0.36");
|
||||||
|
config.addDataSourceProperty("v$session.program","DIV_SEC");
|
||||||
|
config.setMaximumPoolSize(10);
|
||||||
|
config.setMinimumIdle(2);
|
||||||
|
config.setConnectionTestQuery("select 1 from dual");
|
||||||
|
config.setAutoCommit(true);
|
||||||
|
}
|
||||||
|
catch (Exception e){
|
||||||
|
System.out.println("连接池错误:"+e.toString());
|
||||||
|
}
|
||||||
|
DataSource ds=new HikariDataSource(config);
|
||||||
|
return ds;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public DataSource Hikar_DataSource_216() throws Exception{
|
||||||
|
HikariConfig config=new HikariConfig();
|
||||||
|
try {
|
||||||
|
config.setDriverClassName("oracle.jdbc.OracleDriver");
|
||||||
|
config.setJdbcUrl("jdbc:oracle:thin:@//10.15.100.216:1521/torclhis");
|
||||||
|
config.setUsername("transfer");
|
||||||
|
config.setPoolName("216");
|
||||||
|
config.setPassword("trans2020");
|
||||||
|
config.setMaximumPoolSize(3);
|
||||||
|
config.setMinimumIdle(2);
|
||||||
|
config.setConnectionTestQuery("select 1 from dual");
|
||||||
|
config.setAutoCommit(true);
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception e){
|
||||||
|
System.out.println("连接池错误:"+e.toString());
|
||||||
|
}
|
||||||
|
DataSource ds=new HikariDataSource(config);
|
||||||
|
return ds;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue