Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
kt-keystone
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
Matrix
kt-keystone
Commits
05d9a191
提交
05d9a191
authored
3月 23, 2022
作者:
黄承天
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(user):修正一些错误
上级
14fd8bf7
隐藏空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
79 行增加
和
51 行删除
+79
-51
Change.java
kt-user/src/main/java/org/matrix/remote/entity/Change.java
+3
-3
DataAllCollector.java
...main/java/org/matrix/remote/service/DataAllCollector.java
+9
-0
DataTriggerCollector.java
.../java/org/matrix/remote/service/DataTriggerCollector.java
+13
-9
TransHelper.java
.../src/main/java/org/matrix/remote/service/TransHelper.java
+7
-15
TriggerInitial.java
...c/main/java/org/matrix/remote/service/TriggerInitial.java
+24
-18
DataCollectorTask.java
...c/main/java/org/matrix/remote/task/DataCollectorTask.java
+20
-6
KtZentaoApplicationTests.java
...st/java/org/matrix/ktzentao/KtZentaoApplicationTests.java
+3
-0
没有找到文件。
kt-user/src/main/java/org/matrix/remote/entity/Change.java
浏览文件 @
05d9a191
...
@@ -6,7 +6,7 @@ import lombok.Data;
...
@@ -6,7 +6,7 @@ import lombok.Data;
import
lombok.NoArgsConstructor
;
import
lombok.NoArgsConstructor
;
/**
/**
*
*
增量数据对象
* @author c
* @author c
* @since 2022-03-21
* @since 2022-03-21
*/
*/
...
@@ -18,8 +18,8 @@ public class Change {
...
@@ -18,8 +18,8 @@ public class Change {
private
String
type
;
private
String
type
;
private
String
table
;
private
String
entity
;
private
String
key
;
private
String
id
;
}
}
kt-user/src/main/java/org/matrix/remote/service/DataAllCollector.java
浏览文件 @
05d9a191
package
org
.
matrix
.
remote
.
service
;
package
org
.
matrix
.
remote
.
service
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
lombok.extern.slf4j.Slf4j
;
import
org.matrix.local.mapper.KsProjectMapper
;
import
org.matrix.local.mapper.KsProjectMapper
;
import
org.matrix.local.mapper.KsUserMapper
;
import
org.matrix.local.mapper.KsUserMapper
;
import
org.matrix.local.mapper.KsUserProjectMapper
;
import
org.matrix.local.mapper.KsUserProjectMapper
;
import
org.matrix.remote.entity.ZtProject
;
import
org.matrix.remote.entity.ZtProject
;
import
org.matrix.remote.entity.ZtUser
;
import
org.matrix.remote.entity.ZtUser
;
import
org.matrix.remote.entity.ZtUserView
;
import
org.matrix.remote.entity.ZtUserView
;
import
org.matrix.remote.mapper.ChangeMapper
;
import
org.matrix.remote.mapper.ZtProjectMapper
;
import
org.matrix.remote.mapper.ZtProjectMapper
;
import
org.matrix.remote.mapper.ZtUserMapper
;
import
org.matrix.remote.mapper.ZtUserMapper
;
import
org.matrix.remote.mapper.ZtUserViewMapper
;
import
org.matrix.remote.mapper.ZtUserViewMapper
;
...
@@ -19,9 +21,12 @@ import java.util.List;
...
@@ -19,9 +21,12 @@ import java.util.List;
/**
/**
* 禅道数据全量同步工具
* 禅道数据全量同步工具
*/
*/
@Slf4j
@Service
@Service
public
class
DataAllCollector
{
public
class
DataAllCollector
{
@Autowired
private
ChangeMapper
changeMapper
;
@Autowired
@Autowired
private
ZtUserMapper
ztUserMapper
;
private
ZtUserMapper
ztUserMapper
;
@Autowired
@Autowired
...
@@ -45,6 +50,9 @@ public class DataAllCollector {
...
@@ -45,6 +50,9 @@ public class DataAllCollector {
* 执行一次全量同步
* 执行一次全量同步
*/
*/
public
void
execute
()
{
public
void
execute
()
{
log
.
info
(
"全量同步禅道用户项目数据..."
);
//清空增量记录
changeMapper
.
delete
(
Wrappers
.
lambdaQuery
());
//用户数据
//用户数据
collectUser
();
collectUser
();
saveUser
();
saveUser
();
...
@@ -54,6 +62,7 @@ public class DataAllCollector {
...
@@ -54,6 +62,7 @@ public class DataAllCollector {
//用户项目关系数据
//用户项目关系数据
collectUserView
();
collectUserView
();
saveUserProject
();
saveUserProject
();
log
.
info
(
"同步结束...."
);
}
}
//------------------------------------private-------------------------------------
//------------------------------------private-------------------------------------
...
...
kt-user/src/main/java/org/matrix/remote/service/DataTriggerCollector.java
浏览文件 @
05d9a191
...
@@ -20,7 +20,6 @@ import org.springframework.beans.factory.annotation.Autowired;
...
@@ -20,7 +20,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Objects
;
import
static
java
.
util
.
Objects
.
nonNull
;
import
static
java
.
util
.
Objects
.
nonNull
;
...
@@ -52,19 +51,25 @@ public class DataTriggerCollector {
...
@@ -52,19 +51,25 @@ public class DataTriggerCollector {
* 执行一次增量同步
* 执行一次增量同步
*/
*/
public
void
execute
()
{
public
void
execute
()
{
boolean
hasChanges
=
changeMapper
.
selectCount
(
Wrappers
.
lambdaQuery
())
>
0
;
Long
count
=
changeMapper
.
selectCount
(
Wrappers
.
lambdaQuery
());
boolean
hasChanges
=
count
>
0
;
if
(
hasChanges
)
{
if
(
hasChanges
)
{
List
<
Change
>
changes
=
changeMapper
.
selectList
(
Wrappers
.
lambdaQuery
());
List
<
Change
>
changes
=
changeMapper
.
selectList
(
Wrappers
.
lambdaQuery
());
changes
.
forEach
(
this
::
handle
);
changes
.
forEach
(
this
::
handle
);
}
}
changeMapper
.
delete
(
Wrappers
.
lambdaQuery
());
}
}
//----------------------------------------private-----------------------------------------
//----------------------------------------private-----------------------------------------
/**
* 增量数据同步处理
* @param change 增量数据
*/
private
void
handle
(
Change
change
)
{
private
void
handle
(
Change
change
)
{
String
table
=
change
.
getTable
();
String
entity
=
change
.
getEntity
();
log
.
info
(
"发现数据变更 数据类型:{} 操作类型:{} 主键:{}"
,
change
.
get
Table
(),
change
.
getType
(),
change
.
getKey
());
log
.
info
(
"发现数据变更 数据类型:{} 操作类型:{} 主键:{}"
,
change
.
get
Entity
(),
change
.
getType
(),
change
.
getId
());
switch
(
table
)
{
switch
(
entity
)
{
case
"user"
:
case
"user"
:
handleUser
(
change
);
handleUser
(
change
);
return
;
return
;
...
@@ -76,11 +81,10 @@ public class DataTriggerCollector {
...
@@ -76,11 +81,10 @@ public class DataTriggerCollector {
return
;
return
;
default
:
default
:
}
}
changeMapper
.
delete
(
Wrappers
.
lambdaQuery
(
change
));
}
}
private
void
handleUser
(
Change
change
)
{
private
void
handleUser
(
Change
change
)
{
Integer
id
=
Integer
.
valueOf
(
change
.
get
Key
());
Integer
id
=
Integer
.
valueOf
(
change
.
get
Id
());
ZtUser
ztUser
=
ztUserMapper
.
selectById
(
id
);
ZtUser
ztUser
=
ztUserMapper
.
selectById
(
id
);
String
type
=
change
.
getType
();
String
type
=
change
.
getType
();
switch
(
type
)
{
switch
(
type
)
{
...
@@ -104,7 +108,7 @@ public class DataTriggerCollector {
...
@@ -104,7 +108,7 @@ public class DataTriggerCollector {
}
}
private
void
handleProject
(
Change
change
)
{
private
void
handleProject
(
Change
change
)
{
Integer
id
=
Integer
.
valueOf
(
change
.
get
Key
());
Integer
id
=
Integer
.
valueOf
(
change
.
get
Id
());
ZtProject
ztProject
=
ztProjectMapper
.
selectById
(
id
);
ZtProject
ztProject
=
ztProjectMapper
.
selectById
(
id
);
String
type
=
change
.
getType
();
String
type
=
change
.
getType
();
switch
(
type
)
{
switch
(
type
)
{
...
@@ -128,7 +132,7 @@ public class DataTriggerCollector {
...
@@ -128,7 +132,7 @@ public class DataTriggerCollector {
}
}
private
void
handleUserView
(
Change
change
)
{
private
void
handleUserView
(
Change
change
)
{
String
account
=
change
.
get
Key
();
String
account
=
change
.
get
Id
();
ZtUserView
ztUserView
=
ztUserViewMapper
.
selectOne
(
Wrappers
.<
ZtUserView
>
lambdaQuery
().
eq
(
ZtUserView:
:
getAccount
,
account
));
ZtUserView
ztUserView
=
ztUserViewMapper
.
selectOne
(
Wrappers
.<
ZtUserView
>
lambdaQuery
().
eq
(
ZtUserView:
:
getAccount
,
account
));
String
type
=
change
.
getType
();
String
type
=
change
.
getType
();
switch
(
type
)
{
switch
(
type
)
{
...
...
kt-user/src/main/java/org/matrix/remote/service/TransHelper.java
浏览文件 @
05d9a191
...
@@ -4,15 +4,11 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
...
@@ -4,15 +4,11 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import
org.matrix.local.entity.Project
;
import
org.matrix.local.entity.Project
;
import
org.matrix.local.entity.User
;
import
org.matrix.local.entity.User
;
import
org.matrix.local.entity.UserProject
;
import
org.matrix.local.entity.UserProject
;
import
org.matrix.local.mapper.KsProjectMapper
;
import
org.matrix.local.mapper.KsUserMapper
;
import
org.matrix.local.mapper.KsUserMapper
;
import
org.matrix.local.mapper.KsUserProjectMapper
;
import
org.matrix.remote.entity.ZtProject
;
import
org.matrix.remote.entity.ZtProject
;
import
org.matrix.remote.entity.ZtUser
;
import
org.matrix.remote.entity.ZtUser
;
import
org.matrix.remote.entity.ZtUserView
;
import
org.matrix.remote.entity.ZtUserView
;
import
org.matrix.remote.mapper.ZtProjectMapper
;
import
org.matrix.remote.mapper.ZtProjectMapper
;
import
org.matrix.remote.mapper.ZtUserMapper
;
import
org.matrix.remote.mapper.ZtUserViewMapper
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
...
@@ -24,21 +20,16 @@ import java.util.stream.Collectors;
...
@@ -24,21 +20,16 @@ import java.util.stream.Collectors;
import
static
java
.
util
.
Objects
.
nonNull
;
import
static
java
.
util
.
Objects
.
nonNull
;
/**
* 数据类型转换器
*/
@Service
@Service
public
class
TransHelper
{
public
class
TransHelper
{
@Autowired
private
ZtUserMapper
ztUserMapper
;
@Autowired
private
ZtUserViewMapper
ztUserViewMapper
;
@Autowired
@Autowired
private
ZtProjectMapper
ztProjectMapper
;
private
ZtProjectMapper
ztProjectMapper
;
@Autowired
@Autowired
private
KsUserMapper
ksUserMapper
;
private
KsUserMapper
ksUserMapper
;
@Autowired
private
KsProjectMapper
ksProjectMapper
;
@Autowired
private
KsUserProjectMapper
ksUserProjectMapper
;
public
User
user
(
ZtUser
ztUser
)
{
public
User
user
(
ZtUser
ztUser
)
{
return
new
User
(
Long
.
valueOf
(
ztUser
.
getId
()),
ztUser
.
getRealname
(),
ztUser
.
getAccount
(),
ztUser
.
getPassword
());
return
new
User
(
Long
.
valueOf
(
ztUser
.
getId
()),
ztUser
.
getRealname
(),
ztUser
.
getAccount
(),
ztUser
.
getPassword
());
...
@@ -48,7 +39,7 @@ public class TransHelper {
...
@@ -48,7 +39,7 @@ public class TransHelper {
return
new
Project
(
Long
.
valueOf
(
ztProject
.
getId
()),
ztProject
.
getName
());
return
new
Project
(
Long
.
valueOf
(
ztProject
.
getId
()),
ztProject
.
getName
());
}
}
public
List
<
UserProject
>
userProjects
(
ZtUserView
ztUserView
)
{
List
<
UserProject
>
userProjects
(
ZtUserView
ztUserView
)
{
User
user
=
ksUserMapper
.
selectOne
(
Wrappers
.<
User
>
lambdaQuery
().
eq
(
User:
:
getAccount
,
ztUserView
.
getAccount
()));
User
user
=
ksUserMapper
.
selectOne
(
Wrappers
.<
User
>
lambdaQuery
().
eq
(
User:
:
getAccount
,
ztUserView
.
getAccount
()));
if
(
nonNull
(
user
))
{
if
(
nonNull
(
user
))
{
Long
userId
=
user
.
getId
();
Long
userId
=
user
.
getId
();
...
@@ -64,8 +55,9 @@ public class TransHelper {
...
@@ -64,8 +55,9 @@ public class TransHelper {
}
}
}
}
//private---------------------------------------------------------------------------
p
ublic
Long
findProjectId
(
ZtProject
ztProject
)
{
p
rivate
Long
findProjectId
(
ZtProject
ztProject
)
{
if
(
nonNull
(
ztProject
.
getProject
())
&&
ztProject
.
getProject
()
>
0
)
{
if
(
nonNull
(
ztProject
.
getProject
())
&&
ztProject
.
getProject
()
>
0
)
{
return
Long
.
valueOf
(
ztProject
.
getProject
());
return
Long
.
valueOf
(
ztProject
.
getProject
());
}
else
{
}
else
{
...
@@ -73,7 +65,7 @@ public class TransHelper {
...
@@ -73,7 +65,7 @@ public class TransHelper {
}
}
}
}
p
ublic
List
<
String
>
toList
(
String
content
)
{
p
rivate
List
<
String
>
toList
(
String
content
)
{
List
<
String
>
result
=
Arrays
.
stream
(
content
.
split
(
","
)).
collect
(
Collectors
.
toList
());
List
<
String
>
result
=
Arrays
.
stream
(
content
.
split
(
","
)).
collect
(
Collectors
.
toList
());
result
.
remove
(
0
);
result
.
remove
(
0
);
return
result
;
return
result
;
...
...
kt-user/src/main/java/org/matrix/remote/service/TriggerInitial.java
浏览文件 @
05d9a191
...
@@ -8,11 +8,11 @@ import org.springframework.stereotype.Service;
...
@@ -8,11 +8,11 @@ import org.springframework.stereotype.Service;
/**
/**
* 用于增量同步的初始化操作
* 用于增量同步的初始化操作
* 1.对需要监听数据的表进行添加触发器
* 1.对需要监听数据的表进行添加触发器
* 2.与创建记录数据变化的表
* 2.与创建记录数据变化的增量表
* <p>
* 触发器的内容是对增量表里插入该条数据变化的关键内容
* 此后可通过读取该增量表来进行增量同步
* <p>
* <p>
* 触发器的内容是对记录用的表里插入该条数据变化的大致内容
* 此后可通过读取该表来进行增量同步
*
* PS:选择性使用
* PS:选择性使用
*/
*/
@SuppressWarnings
(
"SqlNoDataSourceInspection"
)
@SuppressWarnings
(
"SqlNoDataSourceInspection"
)
...
@@ -26,19 +26,19 @@ public class TriggerInitial {
...
@@ -26,19 +26,19 @@ public class TriggerInitial {
/**
/**
* 创建
数据变化
表
* 创建
增量数据
表
* 该表有3个字段
* 该表有3个字段
* type:该条变化数据的操作类型(INSERT、UPDATE、DELETE)
* type:该条变化数据的操作类型(INSERT、UPDATE、DELETE)
*
table:该条变化
数据属于哪个表
*
entity:该条增量
数据属于哪个表
* key:该条变化数据的
主键值(可以根据该主键值在原表查出具体数据再做同步更新、删除操作则只需指定主键值
)
* key:该条变化数据的
唯一标识(一般为主键值 可以根据该标识在原表查出具体数据再做同步更新、删除操作则只需指定标识
)
*/
*/
public
void
createChangeTable
()
{
public
void
createChangeTable
()
{
String
dropChangeTableSQL
=
"DROP TABLE IF EXISTS `zentao`.`kt_change`;\n"
;
String
dropChangeTableSQL
=
"DROP TABLE IF EXISTS `zentao`.`kt_change`;\n"
;
jdbcTemplate
.
execute
(
dropChangeTableSQL
);
jdbcTemplate
.
execute
(
dropChangeTableSQL
);
String
createChangeTableSQL
=
"CREATE TABLE `zentao`.`kt_change` (\n"
+
String
createChangeTableSQL
=
"CREATE TABLE `zentao`.`kt_change` (\n"
+
" `type` VARCHAR(11) NULL,\n"
+
" `type` VARCHAR(11) NULL,\n"
+
" `
table
` VARCHAR(255) NULL,\n"
+
" `
entity
` VARCHAR(255) NULL,\n"
+
" `
data_key
` VARCHAR(255) NULL);\n"
;
" `
id
` VARCHAR(255) NULL);\n"
;
jdbcTemplate
.
execute
(
createChangeTableSQL
);
jdbcTemplate
.
execute
(
createChangeTableSQL
);
}
}
...
@@ -49,21 +49,24 @@ public class TriggerInitial {
...
@@ -49,21 +49,24 @@ public class TriggerInitial {
String
dropInsertTrigger
=
"DROP TRIGGER IF EXISTS `zentao`.`zt_user_AFTER_INSERT`;\n"
;
String
dropInsertTrigger
=
"DROP TRIGGER IF EXISTS `zentao`.`zt_user_AFTER_INSERT`;\n"
;
String
createInsertTrigger
=
"CREATE TRIGGER `zentao`.`zt_user_AFTER_INSERT` AFTER INSERT ON `zt_user` FOR EACH ROW\n"
+
String
createInsertTrigger
=
"CREATE TRIGGER `zentao`.`zt_user_AFTER_INSERT` AFTER INSERT ON `zt_user` FOR EACH ROW\n"
+
"BEGIN\n"
+
"BEGIN\n"
+
"insert into `zentao`.`kt_change` (`type`,`
table`, `content
`) values ('insert','user',new.id);\n"
+
"insert into `zentao`.`kt_change` (`type`,`
entity`, `id
`) values ('insert','user',new.id);\n"
+
"END;"
;
"END;"
;
jdbcTemplate
.
execute
(
dropInsertTrigger
);
jdbcTemplate
.
execute
(
dropInsertTrigger
);
jdbcTemplate
.
execute
(
createInsertTrigger
);
jdbcTemplate
.
execute
(
createInsertTrigger
);
String
dropUpdateTrigger
=
"DROP TRIGGER IF EXISTS `zentao`.`zt_user_AFTER_UPDATE`;\n"
;
String
dropUpdateTrigger
=
"DROP TRIGGER IF EXISTS `zentao`.`zt_user_AFTER_UPDATE`;\n"
;
String
createUpdateTrigger
=
"CREATE TRIGGER `zentao`.`zt_user_AFTER_UPDATE` AFTER UPDATE ON `zt_user` FOR EACH ROW\n"
+
String
createUpdateTrigger
=
"CREATE TRIGGER `zentao`.`zt_user_AFTER_UPDATE` AFTER UPDATE ON `zt_user` FOR EACH ROW\n"
+
"BEGIN\n"
+
"BEGIN\n"
+
"insert into `zentao`.`kt_change` (`type`,`table`, `key`) values ('update','user',new.id);\n"
+
"IF(new.account != old.account or new.password != old.password or new.realname != old.realname)\n"
+
"THEN\n"
+
"insert into `zentao`.`kt_change` (`type`,`entity`, `id`) values ('update','user',new.id);\n"
+
"END IF;\n"
+
"END;"
;
"END;"
;
jdbcTemplate
.
execute
(
dropUpdateTrigger
);
jdbcTemplate
.
execute
(
dropUpdateTrigger
);
jdbcTemplate
.
execute
(
createUpdateTrigger
);
jdbcTemplate
.
execute
(
createUpdateTrigger
);
String
dropDeleteTrigger
=
"DROP TRIGGER IF EXISTS `zentao`.`zt_user_AFTER_DELETE`;\n"
;
String
dropDeleteTrigger
=
"DROP TRIGGER IF EXISTS `zentao`.`zt_user_AFTER_DELETE`;\n"
;
String
createDeleteTrigger
=
"CREATE TRIGGER `zentao`.`zt_user_AFTER_DELETE` AFTER DELETE ON `zt_user` FOR EACH ROW\n"
+
String
createDeleteTrigger
=
"CREATE TRIGGER `zentao`.`zt_user_AFTER_DELETE` AFTER DELETE ON `zt_user` FOR EACH ROW\n"
+
"BEGIN\n"
+
"BEGIN\n"
+
"insert into `zentao`.`kt_change` (`type`,`
table`, `key
`) values ('delete','user',old.id);\n"
+
"insert into `zentao`.`kt_change` (`type`,`
entity`, `id
`) values ('delete','user',old.id);\n"
+
"END;"
;
"END;"
;
jdbcTemplate
.
execute
(
dropDeleteTrigger
);
jdbcTemplate
.
execute
(
dropDeleteTrigger
);
jdbcTemplate
.
execute
(
createDeleteTrigger
);
jdbcTemplate
.
execute
(
createDeleteTrigger
);
...
@@ -76,21 +79,24 @@ public class TriggerInitial {
...
@@ -76,21 +79,24 @@ public class TriggerInitial {
String
dropInsertTrigger
=
"DROP TRIGGER IF EXISTS `zentao`.`zt_project_AFTER_INSERT`;\n"
;
String
dropInsertTrigger
=
"DROP TRIGGER IF EXISTS `zentao`.`zt_project_AFTER_INSERT`;\n"
;
String
createInsertTrigger
=
"CREATE TRIGGER `zentao`.`zt_project_AFTER_INSERT` AFTER INSERT ON `zt_project` FOR EACH ROW\n"
+
String
createInsertTrigger
=
"CREATE TRIGGER `zentao`.`zt_project_AFTER_INSERT` AFTER INSERT ON `zt_project` FOR EACH ROW\n"
+
"BEGIN\n"
+
"BEGIN\n"
+
"insert into `zentao`.`kt_change` (`type`,`
table`, `content
`) values ('insert','project',new.id);\n"
+
"insert into `zentao`.`kt_change` (`type`,`
entity`, `id
`) values ('insert','project',new.id);\n"
+
"END;"
;
"END;"
;
jdbcTemplate
.
execute
(
dropInsertTrigger
);
jdbcTemplate
.
execute
(
dropInsertTrigger
);
jdbcTemplate
.
execute
(
createInsertTrigger
);
jdbcTemplate
.
execute
(
createInsertTrigger
);
String
dropUpdateTrigger
=
"DROP TRIGGER IF EXISTS `zentao`.`zt_project_AFTER_UPDATE`;\n"
;
String
dropUpdateTrigger
=
"DROP TRIGGER IF EXISTS `zentao`.`zt_project_AFTER_UPDATE`;\n"
;
String
createUpdateTrigger
=
"CREATE TRIGGER `zentao`.`zt_project_AFTER_UPDATE` AFTER UPDATE ON `zt_project` FOR EACH ROW\n"
+
String
createUpdateTrigger
=
"CREATE TRIGGER `zentao`.`zt_project_AFTER_UPDATE` AFTER UPDATE ON `zt_project` FOR EACH ROW\n"
+
"BEGIN\n"
+
"BEGIN\n"
+
"insert into `zentao`.`kt_change` (`type`,`table`, `key`) values ('update','project',new.id);\n"
+
"IF(new.name != old.name)\n"
+
"THEN\n"
+
"insert into `zentao`.`kt_change` (`type`,`entity`, `id`) values ('update','project',new.id);\n"
+
"END IF;\n"
+
"END;"
;
"END;"
;
jdbcTemplate
.
execute
(
dropUpdateTrigger
);
jdbcTemplate
.
execute
(
dropUpdateTrigger
);
jdbcTemplate
.
execute
(
createUpdateTrigger
);
jdbcTemplate
.
execute
(
createUpdateTrigger
);
String
dropDeleteTrigger
=
"DROP TRIGGER IF EXISTS `zentao`.`zt_project_AFTER_DELETE`;\n"
;
String
dropDeleteTrigger
=
"DROP TRIGGER IF EXISTS `zentao`.`zt_project_AFTER_DELETE`;\n"
;
String
createDeleteTrigger
=
"CREATE TRIGGER `zentao`.`zt_project_AFTER_DELETE` AFTER DELETE ON `zt_project` FOR EACH ROW\n"
+
String
createDeleteTrigger
=
"CREATE TRIGGER `zentao`.`zt_project_AFTER_DELETE` AFTER DELETE ON `zt_project` FOR EACH ROW\n"
+
"BEGIN\n"
+
"BEGIN\n"
+
"insert into `zentao`.`kt_change` (`type`,`
table`, `key
`) values ('delete','project',old.id);\n"
+
"insert into `zentao`.`kt_change` (`type`,`
entity`, `id
`) values ('delete','project',old.id);\n"
+
"END;"
;
"END;"
;
jdbcTemplate
.
execute
(
dropDeleteTrigger
);
jdbcTemplate
.
execute
(
dropDeleteTrigger
);
jdbcTemplate
.
execute
(
createDeleteTrigger
);
jdbcTemplate
.
execute
(
createDeleteTrigger
);
...
@@ -103,21 +109,21 @@ public class TriggerInitial {
...
@@ -103,21 +109,21 @@ public class TriggerInitial {
String
dropInsertTrigger
=
"DROP TRIGGER IF EXISTS `zentao`.`zt_userview_AFTER_INSERT`;\n"
;
String
dropInsertTrigger
=
"DROP TRIGGER IF EXISTS `zentao`.`zt_userview_AFTER_INSERT`;\n"
;
String
createInsertTrigger
=
"CREATE TRIGGER `zentao`.`zt_userview_AFTER_INSERT` AFTER INSERT ON `zt_userview` FOR EACH ROW\n"
+
String
createInsertTrigger
=
"CREATE TRIGGER `zentao`.`zt_userview_AFTER_INSERT` AFTER INSERT ON `zt_userview` FOR EACH ROW\n"
+
"BEGIN\n"
+
"BEGIN\n"
+
"insert into `zentao`.`kt_change` (`type`,`
table`, `content
`) values ('insert','userview',new.account);\n"
+
"insert into `zentao`.`kt_change` (`type`,`
entity`, `id
`) values ('insert','userview',new.account);\n"
+
"END;"
;
"END;"
;
jdbcTemplate
.
execute
(
dropInsertTrigger
);
jdbcTemplate
.
execute
(
dropInsertTrigger
);
jdbcTemplate
.
execute
(
createInsertTrigger
);
jdbcTemplate
.
execute
(
createInsertTrigger
);
String
dropUpdateTrigger
=
"DROP TRIGGER IF EXISTS `zentao`.`zt_userview_AFTER_UPDATE`;\n"
;
String
dropUpdateTrigger
=
"DROP TRIGGER IF EXISTS `zentao`.`zt_userview_AFTER_UPDATE`;\n"
;
String
createUpdateTrigger
=
"CREATE TRIGGER `zentao`.`zt_userview_AFTER_UPDATE` AFTER UPDATE ON `zt_userview` FOR EACH ROW\n"
+
String
createUpdateTrigger
=
"CREATE TRIGGER `zentao`.`zt_userview_AFTER_UPDATE` AFTER UPDATE ON `zt_userview` FOR EACH ROW\n"
+
"BEGIN\n"
+
"BEGIN\n"
+
"insert into `zentao`.`kt_change` (`type`,`
table`, `key
`) values ('update','userview',new.account);\n"
+
"insert into `zentao`.`kt_change` (`type`,`
entity`, `id
`) values ('update','userview',new.account);\n"
+
"END;"
;
"END;"
;
jdbcTemplate
.
execute
(
dropUpdateTrigger
);
jdbcTemplate
.
execute
(
dropUpdateTrigger
);
jdbcTemplate
.
execute
(
createUpdateTrigger
);
jdbcTemplate
.
execute
(
createUpdateTrigger
);
String
dropDeleteTrigger
=
"DROP TRIGGER IF EXISTS `zentao`.`zt_userview_AFTER_DELETE`;\n"
;
String
dropDeleteTrigger
=
"DROP TRIGGER IF EXISTS `zentao`.`zt_userview_AFTER_DELETE`;\n"
;
String
createDeleteTrigger
=
"CREATE TRIGGER `zentao`.`zt_userview_AFTER_DELETE` AFTER DELETE ON `zt_userview` FOR EACH ROW\n"
+
String
createDeleteTrigger
=
"CREATE TRIGGER `zentao`.`zt_userview_AFTER_DELETE` AFTER DELETE ON `zt_userview` FOR EACH ROW\n"
+
"BEGIN\n"
+
"BEGIN\n"
+
"insert into `zentao`.`kt_change` (`type`,`
table`, `key
`) values ('delete','userview',old.account);\n"
+
"insert into `zentao`.`kt_change` (`type`,`
entity`, `id
`) values ('delete','userview',old.account);\n"
+
"END;"
;
"END;"
;
jdbcTemplate
.
execute
(
dropDeleteTrigger
);
jdbcTemplate
.
execute
(
dropDeleteTrigger
);
jdbcTemplate
.
execute
(
createDeleteTrigger
);
jdbcTemplate
.
execute
(
createDeleteTrigger
);
...
...
kt-user/src/main/java/org/matrix/remote/task/DataCollectorTask.java
浏览文件 @
05d9a191
...
@@ -2,6 +2,7 @@ package org.matrix.remote.task;
...
@@ -2,6 +2,7 @@ package org.matrix.remote.task;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.matrix.remote.service.DataAllCollector
;
import
org.matrix.remote.service.DataAllCollector
;
import
org.matrix.remote.service.DataTriggerCollector
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.CommandLineRunner
;
import
org.springframework.boot.CommandLineRunner
;
import
org.springframework.scheduling.annotation.Scheduled
;
import
org.springframework.scheduling.annotation.Scheduled
;
...
@@ -14,23 +15,36 @@ import org.springframework.stereotype.Component;
...
@@ -14,23 +15,36 @@ import org.springframework.stereotype.Component;
@Component
@Component
public
class
DataCollectorTask
implements
CommandLineRunner
{
public
class
DataCollectorTask
implements
CommandLineRunner
{
@Autowired
@Autowired
private
DataAllCollector
dataAllCollector
;
private
DataAllCollector
dataAllCollector
;
@Autowired
private
DataTriggerCollector
dataTriggerCollector
;
/**
/**
* 同步禅道取的用户和项目数据
*
全量
同步禅道取的用户和项目数据
* 每小时收集一次
* 每小时收集一次
*/
*/
@Scheduled
(
cron
=
"0 0 */1 * * ?"
)
// @Scheduled(cron = "0 0 */1 * * ?")
public
void
collect
()
{
public
void
allCollect
()
{
log
.
info
(
"同步禅道用户项目数据..."
);
dataAllCollector
.
execute
();
dataAllCollector
.
execute
();
log
.
info
(
"同步结束...."
);
}
}
/**
* 增量同步禅道取的用户和项目数据
* 每分钟收集一次
*/
@Scheduled
(
cron
=
"0 */1 * * * ?"
)
public
void
triggerCollect
()
{
dataTriggerCollector
.
execute
();
}
/**
* 在项目刚启动时进行一次全量同步
* 后续则轮询进行增量同步
*/
@Override
@Override
public
void
run
(
String
...
args
)
{
public
void
run
(
String
...
args
)
{
allCollect
();
}
}
}
}
kt-user/src/test/java/org/matrix/ktzentao/KtZentaoApplicationTests.java
浏览文件 @
05d9a191
...
@@ -20,7 +20,10 @@ class KtZentaoApplicationTests {
...
@@ -20,7 +20,10 @@ class KtZentaoApplicationTests {
@Test
@Test
void
test
()
{
void
test
()
{
triggerInitial
.
createChangeTable
();
triggerInitial
.
createUserTrigger
();
triggerInitial
.
createProjectTrigger
();
triggerInitial
.
createProjectTrigger
();
triggerInitial
.
createUserViewTrigger
();
}
}
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论