|
@@ -5,6 +5,7 @@ import com.google.inject.assistedinject.Assisted;
|
5
|
5
|
import com.vcarecity.cvs.core.ColumnUpdateMapper;
|
6
|
6
|
import com.vcarecity.cvs.properties.AppProperties;
|
7
|
7
|
import com.vcarecity.cvs.service.ResultHandlerService;
|
|
8
|
+import com.vcarecity.cvs.service.TimerService;
|
8
|
9
|
import com.vcarecity.cvs.util.CreateDatasource;
|
9
|
10
|
import com.zaxxer.hikari.HikariDataSource;
|
10
|
11
|
import lombok.extern.slf4j.Slf4j;
|
|
@@ -14,6 +15,7 @@ import java.sql.Date;
|
14
|
15
|
import java.sql.Statement;
|
15
|
16
|
import java.sql.Timestamp;
|
16
|
17
|
import java.util.List;
|
|
18
|
+import java.util.concurrent.atomic.AtomicLong;
|
17
|
19
|
|
18
|
20
|
/**
|
19
|
21
|
* @author Kerry on 19/11/21
|
|
@@ -21,26 +23,26 @@ import java.util.List;
|
21
|
23
|
|
22
|
24
|
|
23
|
25
|
@Slf4j
|
24
|
|
-public class MySQLResultStatHandlerServiceImpl implements ResultHandlerService {
|
|
26
|
+public class MySQLResultStatHandlerServiceImpl implements ResultHandlerService, TimerService {
|
25
|
27
|
|
26
|
|
-
|
27
|
|
- private final String sql;
|
28
|
28
|
private final HikariDataSource dataSource;
|
29
|
29
|
|
|
30
|
+ private AtomicLong writeTime = new AtomicLong(0L);
|
|
31
|
+
|
30
|
32
|
@Inject
|
31
|
33
|
public MySQLResultStatHandlerServiceImpl(AppProperties properties, @Assisted Object sql) {
|
32
|
|
- this.sql = (String) sql;
|
33
|
34
|
this.dataSource = CreateDatasource.createDataSource(properties.getToDb());
|
34
|
35
|
}
|
35
|
36
|
|
36
|
|
-
|
37
|
37
|
@Override
|
38
|
38
|
public <T> void resultHandler(String table, String[] header, List<T> dataList) throws Exception {
|
39
|
39
|
|
40
|
|
-
|
|
40
|
+ if (dataList == null || dataList.isEmpty()) {
|
|
41
|
+ return;
|
|
42
|
+ }
|
41
|
43
|
long startTime = System.currentTimeMillis();
|
42
|
44
|
|
43
|
|
- StringBuffer sb = new StringBuffer();
|
|
45
|
+ StringBuilder sb = new StringBuilder();
|
44
|
46
|
|
45
|
47
|
final String[] newHeaders = ColumnUpdateMapper.updateColumnName(table, header);
|
46
|
48
|
final String column = String.join(",", newHeaders);
|
|
@@ -71,19 +73,27 @@ public class MySQLResultStatHandlerServiceImpl implements ResultHandlerService {
|
71
|
73
|
sb.append("),");
|
72
|
74
|
}
|
73
|
75
|
}
|
74
|
|
- final StringBuffer stringBuffer = sb.deleteCharAt(sb.length() - 1);
|
|
76
|
+ String execSql = sb.deleteCharAt(sb.length() - 1).toString();
|
75
|
77
|
|
76
|
|
- // logger.debug("{}", stringBuffer.toString());
|
|
78
|
+ // logger.debug("{}", execSql);
|
77
|
79
|
|
78
|
80
|
final Connection connection = dataSource.getConnection();
|
79
|
81
|
|
80
|
82
|
final Statement statement = connection.createStatement();
|
81
|
|
- statement.execute(stringBuffer.toString());
|
|
83
|
+ statement.execute(execSql);
|
82
|
84
|
statement.close();
|
83
|
85
|
connection.close();
|
84
|
86
|
|
85
|
|
- logger.info("WRITE SUCCESS to mysql usage time {} /ms, size = {}", System.currentTimeMillis() - startTime, dataList.size());
|
|
87
|
+ final long curUseTime = System.currentTimeMillis() - startTime;
|
|
88
|
+
|
|
89
|
+ writeTime.addAndGet(curUseTime);
|
|
90
|
+
|
|
91
|
+ logger.info("WRITE SUCCESS to mysql usage time {} /ms, size = {}", curUseTime, dataList.size());
|
86
|
92
|
}
|
87
|
93
|
|
88
|
94
|
|
|
95
|
+ @Override
|
|
96
|
+ public long getUsageTime() {
|
|
97
|
+ return this.writeTime.longValue();
|
|
98
|
+ }
|
89
|
99
|
}
|