1111import java .sql .SQLException ;
1212import java .util .List ;
1313
14- public abstract class SQLStreamExecuteListener implements SQLExecuteListener {
14+ /**
15+ * 数据事件解析监听对象
16+ */
17+ public abstract class DBEventExecuteListener implements SQLExecuteListener {
1518
16- public abstract boolean isSupport (String sql );
19+ /**
20+ * SQL适配检测
21+ */
22+ public abstract boolean support (String sql );
1723
24+ /**
25+ * 构建对应处理的SQL解析对象
26+ */
1827 public abstract SQLParser createSQLParser (String sql );
1928
29+ /**
30+ * 构建对应处理的事件解析对象
31+ */
2032 public abstract DBEventParser createDbEventParser (SQLExecuteState sqlExecuteState ,SQLParser sqlParser ,DbTable dbTable );
2133
2234 @ Override
2335 public void before (SQLExecuteState executeState ) throws SQLException {
2436 String sql = executeState .getSql ();
25- if (this .isSupport (sql )) {
37+ if (this .support (sql )) {
2638 try {
39+ // 清空执行历史
2740 ThreadLocalContext .getInstance ().remove ();
41+ // 获取SQL解析对象
2842 SQLParser sqlParser = this .createSQLParser (sql );
43+ // 提取表明
2944 String tableName = sqlParser .getTableName ();
30- executeState .updateMetaData (tableName );
45+ // 触发待更新的元数据表信息
46+ executeState .triggerDBMetaData (tableName );
47+ // 提取对应元数据表信息
3148 DbTable dbTable = executeState .getDbTable (tableName );
49+ // 判断是否支持对该表的DB事件支持
3250 if (dbTable != null && DBStreamContext .getInstance ().support (executeState .getDriverProperties (), dbTable )) {
51+ // 是否批量模式判断
3352 if (executeState .isBatchMode ()) {
53+ // 批量模式下,将获取批量的SQL执行结果数据
3454 List <SQLExecuteState > executeStateList = executeState .getBatchSQLExecuteStateList ();
3555 for (int i = 0 ; i < executeStateList .size (); i ++) {
3656 SQLExecuteState sqlExecuteState = executeStateList .get (i );
3757 DBEventParser dataParser = this .createDbEventParser (sqlExecuteState ,sqlParser ,dbTable );
58+ // DB事件解析前置
3859 dataParser .prepare ();
60+ // 存储到本地线程
3961 ThreadLocalContext .getInstance ().push (i , dataParser );
4062 }
4163 } else {
64+ // 非批量模式执行
4265 DBEventParser dataParser = this .createDbEventParser (executeState ,sqlParser ,dbTable );
66+ // DB事件解析前置
4367 dataParser .prepare ();
68+ // 存储到本地线程
4469 ThreadLocalContext .getInstance ().push (dataParser );
4570 }
4671 }
4772 } catch (Exception e ) {
73+ // 异常清空缓存数据
4874 ThreadLocalContext .getInstance ().remove ();
4975 throw new SQLException (e );
5076 }
@@ -54,24 +80,31 @@ public void before(SQLExecuteState executeState) throws SQLException {
5480 @ Override
5581 public void after (SQLExecuteState executeState , Object result ) throws SQLException {
5682 String sql = executeState .getSql ();
83+ // 获取事务标识信息
5784 String transactionKey = executeState .getTransactionKey ();
58- if (this .isSupport (sql )) {
85+ if (this .support (sql )) {
86+ // 批量模式
5987 if (executeState .isBatchMode ()) {
6088 List <SQLExecuteState > executeStateList = executeState .getBatchSQLExecuteStateList ();
6189 for (int i = 0 ; i < executeStateList .size (); i ++) {
6290 DBEventParser dataParser = ThreadLocalContext .getInstance ().get (i );
6391 if (dataParser != null ) {
92+ // 获取DB事件信息
6493 List <DBEvent > eventList = dataParser .loadEvents (result );
6594 TransactionEventPools .getInstance ().addEvents (transactionKey , eventList );
6695 }
6796 }
97+ // 清空本地缓存数据
6898 ThreadLocalContext .getInstance ().remove ();
6999 } else {
100+ // 非批量模式
70101 DBEventParser dataParser = ThreadLocalContext .getInstance ().get ();
71102 if (dataParser != null ) {
103+ // 获取DB事件信息
72104 List <DBEvent > eventList = dataParser .loadEvents (result );
73105 TransactionEventPools .getInstance ().addEvents (transactionKey , eventList );
74106 }
107+ // 清空本地缓存数据
75108 ThreadLocalContext .getInstance ().remove ();
76109 }
77110 }
0 commit comments