Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lakernote
EasyAdmin
提交
8cf408ad
E
EasyAdmin
项目概览
lakernote
/
EasyAdmin
10 个月 前同步成功
通知
14
Star
3
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
EasyAdmin
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
8cf408ad
编写于
10月 18, 2022
作者:
lakernote
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
增加长事务监控
上级
e5a0281b
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
54 addition
and
69 deletion
+54
-69
src/main/java/com/laker/admin/framework/aop/trace/TreeView.java
...in/java/com/laker/admin/framework/aop/trace/TreeView.java
+26
-43
src/main/java/com/laker/admin/framework/ext/transaction/LakerDataSourceTransactionManager.java
...rk/ext/transaction/LakerDataSourceTransactionManager.java
+4
-7
src/main/java/com/laker/admin/module/sys/controller/SysRoleController.java
.../laker/admin/module/sys/controller/SysRoleController.java
+1
-17
src/main/java/com/laker/admin/module/sys/service/ISysRolePowerService.java
.../laker/admin/module/sys/service/ISysRolePowerService.java
+1
-0
src/main/java/com/laker/admin/module/sys/service/impl/SysRolePowerServiceImpl.java
...dmin/module/sys/service/impl/SysRolePowerServiceImpl.java
+22
-2
未找到文件。
src/main/java/com/laker/admin/framework/aop/trace/TreeView.java
浏览文件 @
8cf408ad
...
...
@@ -41,30 +41,24 @@ public class TreeView {
final
StringBuilder
treeSB
=
new
StringBuilder
();
recursive
(
0
,
true
,
""
,
root
,
new
Callback
()
{
@Override
public
void
callback
(
int
deep
,
boolean
isLast
,
String
prefix
,
Node
node
)
{
treeSB
.
append
(
prefix
).
append
(
isLast
?
STEP_FIRST_CHAR
:
STEP_NORMAL_CHAR
);
if
(
isPrintCost
&&
!
node
.
isRoot
())
{
if
(
node
==
maxCost
)
{
// the node with max cost will be highlighted
treeSB
.
append
(
"[max]:"
+
node
.
toString
().
toString
());
}
else
{
treeSB
.
append
(
node
.
toString
());
}
recursive
(
0
,
true
,
""
,
root
,
(
deep
,
isLast
,
prefix
,
node
)
->
{
treeSB
.
append
(
prefix
).
append
(
isLast
?
STEP_FIRST_CHAR
:
STEP_NORMAL_CHAR
);
if
(
isPrintCost
&&
!
node
.
isRoot
())
{
if
(
node
==
maxCost
)
{
// the node with max cost will be highlighted
treeSB
.
append
(
"[max]:"
+
node
);
}
else
{
treeSB
.
append
(
node
);
}
treeSB
.
append
(
node
.
data
);
if
(
node
.
mark
!=
null
&&
node
.
mark
.
length
()
!=
0
)
{
treeSB
.
append
(
" ["
).
append
(
node
.
mark
)
.
append
(
node
.
marks
>
1
?
","
+
node
.
marks
:
""
)
.
append
(
"]"
);
}
treeSB
.
append
(
"\n"
);
}
treeSB
.
append
(
node
.
data
);
if
(
node
.
mark
!=
null
&&
node
.
mark
.
length
()
!=
0
)
{
treeSB
.
append
(
" ["
).
append
(
node
.
mark
)
.
append
(
node
.
marks
>
1
?
","
+
node
.
marks
:
""
)
.
append
(
"]"
);
}
treeSB
.
append
(
"\n"
);
});
return
treeSB
.
toString
();
...
...
@@ -94,12 +88,8 @@ public class TreeView {
* @param node
*/
private
void
findMaxCostNode
(
Node
node
)
{
if
(!
node
.
isRoot
()
&&
!
node
.
parent
.
isRoot
())
{
if
(
maxCost
==
null
)
{
maxCost
=
node
;
}
else
if
(
maxCost
.
totalCost
<
node
.
totalCost
)
{
maxCost
=
node
;
}
if
(!
node
.
isRoot
()
&&
!
node
.
parent
.
isRoot
()
&&
(
maxCost
==
null
||
(
maxCost
.
totalCost
<
node
.
totalCost
)))
{
maxCost
=
node
;
}
if
(!
node
.
isLeaf
())
{
for
(
Node
n
:
node
.
children
)
{
...
...
@@ -171,9 +161,9 @@ public class TreeView {
/**
* 子节点
*/
final
List
<
Node
>
children
=
new
ArrayList
<
Node
>();
final
List
<
Node
>
children
=
new
ArrayList
<>();
final
Map
<
String
,
Node
>
map
=
new
HashMap
<
String
,
Node
>();
final
Map
<
String
,
Node
>
map
=
new
HashMap
<>();
/**
* 开始时间戳
...
...
@@ -237,12 +227,12 @@ public class TreeView {
}
Node
markBegin
()
{
beginTimestamp
=
System
.
nanoTime
();
beginTimestamp
=
System
.
currentTimeMillis
();
return
this
;
}
Node
markEnd
()
{
endTimestamp
=
System
.
nanoTime
();
endTimestamp
=
System
.
currentTimeMillis
();
long
cost
=
getCost
();
if
(
cost
<
minCost
)
{
...
...
@@ -267,24 +257,17 @@ public class TreeView {
return
endTimestamp
-
beginTimestamp
;
}
/**
* convert nano-seconds to milli-seconds
*/
double
getCostInMillis
(
long
nanoSeconds
)
{
return
nanoSeconds
/
1000000.0
;
}
@Override
public
String
toString
()
{
StringBuilder
sb
=
new
StringBuilder
();
if
(
times
<=
1
)
{
sb
.
append
(
"["
).
append
(
getCost
InMillis
(
getCost
()
))
sb
.
append
(
"["
).
append
(
getCost
(
))
.
append
(
TIME_UNIT
).
append
(
"] "
);
}
else
{
sb
.
append
(
"[min="
).
append
(
getCostInMillis
(
minCost
)
)
sb
.
append
(
"[min="
).
append
(
minCost
)
.
append
(
TIME_UNIT
).
append
(
",max="
)
.
append
(
getCostInMillis
(
maxCost
)
).
append
(
TIME_UNIT
)
.
append
(
",total="
).
append
(
getCostInMillis
(
totalCost
)
)
.
append
(
maxCost
).
append
(
TIME_UNIT
)
.
append
(
",total="
).
append
(
totalCost
)
.
append
(
TIME_UNIT
).
append
(
",count="
).
append
(
times
)
.
append
(
"] "
);
}
...
...
src/main/java/com/laker/admin/framework/ext/transaction/LakerDataSourceTransactionManager.java
浏览文件 @
8cf408ad
package
com.laker.admin.framework.ext.transaction
;
import
cn.hutool.core.date.DateUnit
;
import
cn.hutool.core.date.DateUtil
;
import
com.laker.admin.framework.aop.trace.SpanType
;
import
com.laker.admin.framework.aop.trace.TraceContext
;
import
lombok.extern.slf4j.Slf4j
;
...
...
@@ -9,7 +7,6 @@ import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import
org.springframework.transaction.TransactionDefinition
;
import
javax.sql.DataSource
;
import
java.util.Date
;
/**
* @author: laker
...
...
@@ -28,7 +25,7 @@ public class LakerDataSourceTransactionManager extends DataSourceTransactionMana
protected
void
doBegin
(
Object
transaction
,
TransactionDefinition
definition
)
{
String
name
=
definition
.
getName
();
TraceContext
.
addSpan
(
"LakerDataSourceTransactionManager.doBegin"
,
SpanType
.
Transaction
);
dateThreadLocal
.
set
(
new
Transaction
(
new
Date
(),
name
));
dateThreadLocal
.
set
(
new
Transaction
(
System
.
currentTimeMillis
(),
name
));
super
.
doBegin
(
transaction
,
definition
);
}
...
...
@@ -37,15 +34,15 @@ public class LakerDataSourceTransactionManager extends DataSourceTransactionMana
super
.
doCleanupAfterCompletion
(
transaction
);
TraceContext
.
stopSpan
();
Transaction
transactionT
=
dateThreadLocal
.
get
();
log
.
info
(
"事务耗时监控!transaction:{},time:{}ms"
,
transactionT
.
name
,
DateUtil
.
between
(
new
Date
(),
transactionT
.
begin
,
DateUnit
.
MS
)
);
log
.
info
(
"事务耗时监控!transaction:{},time:{}ms"
,
transactionT
.
name
,
System
.
currentTimeMillis
()
-
transactionT
.
begin
);
dateThreadLocal
.
remove
();
}
class
Transaction
{
Date
begin
;
long
begin
;
String
name
;
Transaction
(
Date
begin
,
String
name
)
{
Transaction
(
long
begin
,
String
name
)
{
this
.
begin
=
begin
;
this
.
name
=
name
;
}
...
...
src/main/java/com/laker/admin/module/sys/controller/SysRoleController.java
浏览文件 @
8cf408ad
...
...
@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.laker.admin.framework.aop.metrics.Metrics
;
import
com.laker.admin.framework.exception.BusinessException
;
import
com.laker.admin.framework.model.PageResponse
;
import
com.laker.admin.framework.model.Response
;
...
...
@@ -18,11 +17,8 @@ import com.laker.admin.module.sys.service.ISysRolePowerService;
import
com.laker.admin.module.sys.service.ISysRoleService
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
/**
...
...
@@ -35,7 +31,6 @@ import java.util.List;
*/
@RestController
@RequestMapping
(
"/sys/role"
)
@Metrics
public
class
SysRoleController
{
@Autowired
ISysRoleService
sysRoleService
;
...
...
@@ -108,19 +103,8 @@ public class SysRoleController {
@PutMapping
(
"/saveRolePower"
)
@ApiOperation
(
value
=
"保存角色权限数据"
)
@SaCheckPermission
(
"role.update.power"
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
Response
saveRolePower
(
Long
roleId
,
String
powerIds
)
{
List
<
String
>
stringList
=
Arrays
.
asList
(
powerIds
.
split
(
","
));
sysRolePowerService
.
remove
(
Wrappers
.<
SysRolePower
>
lambdaQuery
().
eq
(
SysRolePower:
:
getRoleId
,
roleId
));
List
<
SysRolePower
>
rolePowers
=
new
ArrayList
<>();
stringList
.
forEach
(
powerId
->
{
SysRolePower
sysRolePower
=
new
SysRolePower
();
sysRolePower
.
setRoleId
(
roleId
);
sysRolePower
.
setPowerId
(
Long
.
valueOf
(
powerId
));
rolePowers
.
add
(
sysRolePower
);
});
boolean
saveBatch
=
sysRolePowerService
.
saveBatch
(
rolePowers
);
return
Response
.
ok
(
saveBatch
);
return
Response
.
ok
(
sysRolePowerService
.
saveRolePower
(
roleId
,
powerIds
));
}
...
...
src/main/java/com/laker/admin/module/sys/service/ISysRolePowerService.java
浏览文件 @
8cf408ad
...
...
@@ -13,4 +13,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public
interface
ISysRolePowerService
extends
IService
<
SysRolePower
>
{
boolean
saveRolePower
(
Long
roleId
,
String
powerIds
);
}
src/main/java/com/laker/admin/module/sys/service/impl/SysRolePowerServiceImpl.java
浏览文件 @
8cf408ad
package
com.laker.admin.module.sys.service.impl
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.laker.admin.module.sys.entity.SysRolePower
;
import
com.laker.admin.module.sys.mapper.SysRolePowerMapper
;
import
com.laker.admin.module.sys.service.ISysRolePowerService
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
/**
* <p>
*
服务实现类
* 服务实现类
* </p>
*
* @author laker
...
...
@@ -17,4 +23,18 @@ import org.springframework.stereotype.Service;
@Service
public
class
SysRolePowerServiceImpl
extends
ServiceImpl
<
SysRolePowerMapper
,
SysRolePower
>
implements
ISysRolePowerService
{
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
public
boolean
saveRolePower
(
Long
roleId
,
String
powerIds
)
{
List
<
String
>
stringList
=
Arrays
.
asList
(
powerIds
.
split
(
","
));
this
.
remove
(
Wrappers
.<
SysRolePower
>
lambdaQuery
().
eq
(
SysRolePower:
:
getRoleId
,
roleId
));
List
<
SysRolePower
>
rolePowers
=
new
ArrayList
<>();
stringList
.
forEach
(
powerId
->
{
SysRolePower
sysRolePower
=
new
SysRolePower
();
sysRolePower
.
setRoleId
(
roleId
);
sysRolePower
.
setPowerId
(
Long
.
valueOf
(
powerId
));
rolePowers
.
add
(
sysRolePower
);
});
return
this
.
saveBatch
(
rolePowers
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录