25
25
import org .hsweb .expands .script .engine .ScriptContext ;
26
26
import org .hsweb .web .bean .po .quartz .QuartzJob ;
27
27
import org .hsweb .web .bean .po .quartz .QuartzJobHistory ;
28
+ import org .hsweb .web .bean .po .user .User ;
29
+ import org .hsweb .web .core .utils .WebUtil ;
28
30
import org .hsweb .web .service .quartz .QuartzJobHistoryService ;
29
31
import org .hsweb .web .service .quartz .QuartzJobService ;
32
+ import org .hsweb .web .service .user .UserService ;
30
33
import org .quartz .*;
31
34
import org .slf4j .Logger ;
32
35
import org .slf4j .LoggerFactory ;
@@ -41,6 +44,7 @@ public class SimpleJob implements Job {
41
44
protected QuartzJobService quartzJobService ;
42
45
protected QuartzJobHistoryService quartzJobHistoryService ;
43
46
protected Map <String , Object > defaultVar ;
47
+ protected User defaultUser ;
44
48
45
49
/**
46
50
* 子类必须实现此构造方法,否则无法创建任务
@@ -55,55 +59,61 @@ public SimpleJob(QuartzJobService quartzJobService, QuartzJobHistoryService hist
55
59
56
60
@ Override
57
61
public void execute (JobExecutionContext context ) throws JobExecutionException {
58
- JobDataMap jobDataMap = context .getJobDetail ().getJobDataMap ();
59
- String id = jobDataMap .getString (SimpleJobFactory .QUARTZ_ID_KEY );
60
- Assert .notNull (id , "定时任务ID错误" );
61
- QuartzJob job = quartzJobService .selectByPk (id );
62
- Assert .notNull (job , "任务不存在" );
63
- if (logger .isDebugEnabled ())
64
- logger .debug ("start job [{}],data : {}" , job .getName (), jobDataMap );
65
- DynamicScriptEngine engine = DynamicScriptEngineFactory .getEngine (job .getLanguage ());
66
- String scriptId = "quartz.job." .concat (id );
62
+ //初始化用户信息
67
63
try {
68
- if (!engine .compiled (scriptId )) {
69
- engine .compile (scriptId , job .getScript ());
70
- } else {
71
- ScriptContext scriptContext = engine .getContext (scriptId );
72
- //脚本发生了变化,自动重新编译
73
- if (!MD5 .defaultEncode (job .getScript ()).equals (scriptContext .getMd5 ())) {
74
- if (logger .isDebugEnabled ())
75
- logger .debug ("script is changed,recompile...." );
64
+ //解决定时任务获取当前用户
65
+ WebUtil .setCurrentUser (defaultUser );
66
+ JobDataMap jobDataMap = context .getJobDetail ().getJobDataMap ();
67
+ String id = jobDataMap .getString (SimpleJobFactory .QUARTZ_ID_KEY );
68
+ Assert .notNull (id , "定时任务ID错误" );
69
+ QuartzJob job = quartzJobService .selectByPk (id );
70
+ Assert .notNull (job , "任务不存在" );
71
+ if (logger .isDebugEnabled ())
72
+ logger .debug ("start job [{}],data : {}" , job .getName (), jobDataMap );
73
+ DynamicScriptEngine engine = DynamicScriptEngineFactory .getEngine (job .getLanguage ());
74
+ String scriptId = "quartz.job." .concat (id );
75
+ try {
76
+ if (!engine .compiled (scriptId )) {
76
77
engine .compile (scriptId , job .getScript ());
78
+ } else {
79
+ ScriptContext scriptContext = engine .getContext (scriptId );
80
+ //脚本发生了变化,自动重新编译
81
+ if (!MD5 .defaultEncode (job .getScript ()).equals (scriptContext .getMd5 ())) {
82
+ if (logger .isDebugEnabled ())
83
+ logger .debug ("script is changed,recompile...." );
84
+ engine .compile (scriptId , job .getScript ());
85
+ }
77
86
}
87
+ } catch (Exception e ) {
88
+ throw new JobExecutionException ("编译任务脚本失败" , e );
78
89
}
79
- } catch (Exception e ) {
80
- throw new JobExecutionException ("编译任务脚本失败" , e );
81
- }
82
- if (logger .isDebugEnabled ())
83
- logger .debug ("job running..." );
84
-
85
- String hisId = quartzJobHistoryService .createAndInsertHistory (id );
86
- Map <String , Object > var = getVar ();
87
- var .put ("context" , context );
88
- ExecuteResult result = engine .execute (scriptId , var );
89
- String strRes ;
90
- if (logger .isDebugEnabled ())
91
- logger .debug ("job end...{} " , result .isSuccess () ? "success" : "fail" );
92
- if (result .isSuccess ()) {
93
- Object res = result .getResult ();
94
- if (res instanceof String )
95
- strRes = ((String ) res );
96
- else strRes = JSON .toJSONString (res );
97
- quartzJobHistoryService .endHistory (hisId , strRes , QuartzJobHistory .Status .SUCCESS );
98
- } else {
99
- if (result .getException () != null ) {
100
- strRes = StringUtils .throwable2String (result .getException ());
101
- logger .error ("job failed" , result .getException ());
90
+ if (logger .isDebugEnabled ())
91
+ logger .debug ("job running..." );
92
+ String hisId = quartzJobHistoryService .createAndInsertHistory (id );
93
+ Map <String , Object > var = getVar ();
94
+ var .put ("context" , context );
95
+ ExecuteResult result = engine .execute (scriptId , var );
96
+ String strRes ;
97
+ if (logger .isDebugEnabled ())
98
+ logger .debug ("job end...{} " , result .isSuccess () ? "success" : "fail" );
99
+ if (result .isSuccess ()) {
100
+ Object res = result .getResult ();
101
+ if (res instanceof String )
102
+ strRes = ((String ) res );
103
+ else strRes = JSON .toJSONString (res );
104
+ quartzJobHistoryService .endHistory (hisId , strRes , QuartzJobHistory .Status .SUCCESS );
102
105
} else {
103
- strRes = result .getMessage ();
104
- logger .error ("job failed {}" , strRes );
106
+ if (result .getException () != null ) {
107
+ strRes = StringUtils .throwable2String (result .getException ());
108
+ logger .error ("job failed" , result .getException ());
109
+ } else {
110
+ strRes = result .getMessage ();
111
+ logger .error ("job failed {}" , strRes );
112
+ }
113
+ quartzJobHistoryService .endHistory (hisId , strRes , QuartzJobHistory .Status .FAIL );
105
114
}
106
- quartzJobHistoryService .endHistory (hisId , strRes , QuartzJobHistory .Status .FAIL );
115
+ } finally {
116
+ WebUtil .removeCurrentUser ();
107
117
}
108
118
}
109
119
@@ -115,4 +125,8 @@ public Map<String, Object> getVar() {
115
125
if (defaultVar == null ) return new HashMap <>();
116
126
return new HashMap <>(defaultVar );
117
127
}
128
+
129
+ public void setDefaultUser (User defaultUser ) {
130
+ this .defaultUser = defaultUser ;
131
+ }
118
132
}
0 commit comments