Skip to content

Commit c645da0

Browse files
committed
优化定时调度
1 parent 13dd16a commit c645da0

File tree

4 files changed

+39
-14
lines changed

4 files changed

+39
-14
lines changed

hsweb-web-service/hsweb-web-service-api/src/main/java/org/hsweb/web/service/quartz/QuartzJobService.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,7 @@ public interface QuartzJobService extends GenericService<QuartzJob, String> {
3636
List<Date> getExecTimes(String cron, int number);
3737

3838
Object execute(String id, Map<String,Object> var);
39+
40+
41+
Object executeNoTx(String id, Map<String,Object> var);
3942
}

hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/quartz/QuartzJobServiceImpl.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import org.springframework.cache.annotation.CacheEvict;
4545
import org.springframework.cache.annotation.Cacheable;
4646
import org.springframework.stereotype.Service;
47+
import org.springframework.transaction.annotation.Propagation;
4748
import org.springframework.transaction.annotation.Transactional;
4849
import org.springframework.util.Assert;
4950

@@ -167,8 +168,18 @@ public interface JobHelper {
167168
}
168169

169170
@Override
170-
@Transactional
171+
@Transactional(propagation = Propagation.NOT_SUPPORTED)
172+
public Object executeNoTx(String id, Map<String, Object> var) {
173+
return doExecute(id, var);
174+
}
175+
176+
@Override
177+
@Transactional(rollbackFor = Exception.class)
171178
public Object execute(String id, Map<String, Object> var) {
179+
return doExecute(id, var);
180+
}
181+
182+
protected Object doExecute(String id, Map<String, Object> var) {
172183
Assert.notNull(id, "定时任务ID错误");
173184
QuartzJob job = selectByPk(id);
174185
Assert.notNull(job, "任务不存在");

hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/quartz/SimpleJob.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@
3030
@DisallowConcurrentExecution
3131
public class SimpleJob implements Job {
3232
protected Logger logger = LoggerFactory.getLogger(this.getClass());
33-
protected QuartzJobService quartzJobService;
33+
protected QuartzJobService quartzJobService;
3434
protected QuartzJobHistoryService quartzJobHistoryService;
35-
protected Map<String, Object> defaultVar;
36-
protected User defaultUser;
35+
protected Map<String, Object> defaultVar;
36+
protected User defaultUser;
3737

3838
/**
3939
* 子类必须实现此构造方法,否则无法创建任务
@@ -52,11 +52,16 @@ public void execute(JobExecutionContext context) throws JobExecutionException {
5252
WebUtil.setCurrentUser(defaultUser);
5353
JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
5454
String id = jobDataMap.getString(SimpleJobFactory.QUARTZ_ID_KEY);
55+
boolean tx = jobDataMap.getBooleanFromString("tx");
5556
Map<String, Object> var = getVar();
5657
var.put("context", context);
5758
var.put("user", defaultUser);
5859
try {
59-
quartzJobService.execute(id, var);
60+
if (tx) {
61+
quartzJobService.execute(id, var);
62+
} else {
63+
quartzJobService.executeNoTx(id, var);
64+
}
6065
} catch (Throwable e) {
6166
throw new JobExecutionException(e);
6267
}

hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/quartz/SimpleJobFactory.java

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
public class SimpleJobFactory implements JobFactory {
4242

4343
public static final String QUARTZ_ID_KEY = "quartz.id";
44-
protected Logger logger = LoggerFactory.getLogger(this.getClass());
44+
protected Logger logger = LoggerFactory.getLogger(this.getClass());
4545
@Resource
4646
private QuartzJobService quartzJobService;
4747

@@ -62,6 +62,8 @@ public class SimpleJobFactory implements JobFactory {
6262
@Autowired(required = false)
6363
private Map<String, ExpressionScopeBean> expressionScopeBeanMap;
6464

65+
private User user;
66+
6567
@Override
6668
public Job newJob(TriggerFiredBundle bundle, Scheduler scheduler) throws SchedulerException {
6769
Map<String, Object> data = bundle.getJobDetail().getJobDataMap();
@@ -70,16 +72,20 @@ public Job newJob(TriggerFiredBundle bundle, Scheduler scheduler) throws Schedul
7072
String id = (String) data.get(QUARTZ_ID_KEY);
7173
Assert.notNull(id);
7274
try {
73-
SimpleJob job = (SimpleJob) jobClass.getConstructor(QuartzJobService.class, QuartzJobHistoryService.class).newInstance(quartzJobService, quartzJobHistoryService);
75+
SimpleJob job = (SimpleJob) jobClass.getConstructor(QuartzJobService.class, QuartzJobHistoryService.class)
76+
.newInstance(quartzJobService, quartzJobHistoryService);
7477
String username = configService.get("quartz", "executeUserName", "admin");
75-
User user = userService.selectByUserName(username);
76-
if (user != null) {
77-
user.initRoleInfo();
78-
job.setDefaultUser(user);
79-
} else {
80-
//未找到用户名
81-
logger.warn("job executor user:{} not found!", username);
78+
if (user == null || !user.getUsername().equals(username)) {
79+
user = userService.selectByUserName(username);
80+
if (user != null) {
81+
user.initRoleInfo();
82+
job.setDefaultUser(user);
83+
} else {
84+
//未找到用户名
85+
logger.warn("job executor user:{} not found!", username);
86+
}
8287
}
88+
8389
Map<String, Object> var = new HashMap<>();
8490
if (expressionScopeBeanMap != null)
8591
var.putAll(expressionScopeBeanMap);

0 commit comments

Comments
 (0)