好的,以下是修改后的代码:
public class InsertData {
private static final String TABLE_NAME = "mode";
private static final String TASK_ID_PREFIX = "U00000000430138013002023032809110096f5bb04e024";
private static final String TRANS_NO = "2E2023021500021858031";
private static final String BANK_NO = "ZJRCU";
private static final String SYSTEM_NO = "JZZY1";
private static final int THREAD_COUNT = 10;
public static void main(String[] args) {
// 数据库连接池
DataSource dataSource = DruidDataSourceFactory.createDataSource(getProperty());
ExecutorService executorService = Executors.newFixedThreadPool(THREAD_COUNT);
for (int i = 0; i < THREAD_COUNT; i++) {
executorService.execute(() -> {
try (Connection conn = dataSource.getConnection()) {
insertData(conn, i);
} catch (SQLException e) {
e.printStackTrace();
}
});
}
executorService.shutdown();
}
private static void insertData(Connection conn, int threadNo) throws SQLException {
PreparedStatement ps = conn.prepareStatement("INSERT INTO " + TABLE_NAME + " VALUES(?, ?, ?, ?, ?)");
Set taskIdSet = new HashSet<>();
while(taskIdSet.size() < 100000){
StringBuilder sb = new StringBuilder(TASK_ID_PREFIX);
for(int i=0; i<24; i++){
if(i == 21){ // 跳过原序列号位置
continue;
}
int randomNum = (int)(Math.random() * 16);
char hexChar = Character.forDigit(randomNum, 16);
sb.setCharAt(i, hexChar);
}
String taskId = sb.toString();
taskIdSet.add(taskId);
int taskState;
if (taskIdSet.size() % 10 < 2) taskState = 1; // 10%的数据taskState为1
else if (taskIdSet.size() % 10 < 4) taskState = 3; // 20%的数据taskState为3
else if (taskIdSet.size() % 10 < 6) taskState = 5; // 30%的数据taskState为5
else if (taskIdSet.size() %