|
@@ -26,6 +26,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
|
|
+import org.springframework.aop.support.AopUtils;
|
|
|
import org.springframework.scheduling.support.CronExpression;
|
|
import org.springframework.scheduling.support.CronExpression;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
@@ -56,7 +57,7 @@ public class DevJobServiceImpl extends ServiceImpl<DevJobMapper, DevJob> impleme
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public Page<DevJob> page(DevJobPageParam devJobPageParam) {
|
|
public Page<DevJob> page(DevJobPageParam devJobPageParam) {
|
|
|
- QueryWrapper<DevJob> queryWrapper = new QueryWrapper<>();
|
|
|
|
|
|
|
+ QueryWrapper<DevJob> queryWrapper = new QueryWrapper<DevJob>().checkSqlInjection();
|
|
|
// 查询部分字段
|
|
// 查询部分字段
|
|
|
queryWrapper.lambda().select(DevJob::getId, DevJob::getName, DevJob::getCategory,
|
|
queryWrapper.lambda().select(DevJob::getId, DevJob::getName, DevJob::getCategory,
|
|
|
DevJob::getActionClass, DevJob::getCronExpression, DevJob::getJobStatus, DevJob::getSortCode);
|
|
DevJob::getActionClass, DevJob::getCronExpression, DevJob::getJobStatus, DevJob::getSortCode);
|
|
@@ -81,20 +82,20 @@ public class DevJobServiceImpl extends ServiceImpl<DevJobMapper, DevJob> impleme
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public List<DevJob> list(DevJobListParam devJobListParam) {
|
|
public List<DevJob> list(DevJobListParam devJobListParam) {
|
|
|
- LambdaQueryWrapper<DevJob> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
|
|
+ QueryWrapper<DevJob> queryWrapper = new QueryWrapper<DevJob>().checkSqlInjection();
|
|
|
// 查询部分字段
|
|
// 查询部分字段
|
|
|
- lambdaQueryWrapper.select(DevJob::getId, DevJob::getName, DevJob::getCategory,
|
|
|
|
|
|
|
+ queryWrapper.lambda().select(DevJob::getId, DevJob::getName, DevJob::getCategory,
|
|
|
DevJob::getActionClass, DevJob::getCronExpression, DevJob::getJobStatus, DevJob::getSortCode);
|
|
DevJob::getActionClass, DevJob::getCronExpression, DevJob::getJobStatus, DevJob::getSortCode);
|
|
|
if(ObjectUtil.isNotEmpty(devJobListParam.getCategory())) {
|
|
if(ObjectUtil.isNotEmpty(devJobListParam.getCategory())) {
|
|
|
- lambdaQueryWrapper.eq(DevJob::getCategory, devJobListParam.getCategory());
|
|
|
|
|
|
|
+ queryWrapper.lambda().eq(DevJob::getCategory, devJobListParam.getCategory());
|
|
|
}
|
|
}
|
|
|
if(ObjectUtil.isNotEmpty(devJobListParam.getSearchKey())) {
|
|
if(ObjectUtil.isNotEmpty(devJobListParam.getSearchKey())) {
|
|
|
- lambdaQueryWrapper.like(DevJob::getName, devJobListParam.getSearchKey());
|
|
|
|
|
|
|
+ queryWrapper.lambda().like(DevJob::getName, devJobListParam.getSearchKey());
|
|
|
}
|
|
}
|
|
|
if(ObjectUtil.isNotEmpty(devJobListParam.getJobStatus())) {
|
|
if(ObjectUtil.isNotEmpty(devJobListParam.getJobStatus())) {
|
|
|
- lambdaQueryWrapper.like(DevJob::getJobStatus, devJobListParam.getJobStatus());
|
|
|
|
|
|
|
+ queryWrapper.lambda().like(DevJob::getJobStatus, devJobListParam.getJobStatus());
|
|
|
}
|
|
}
|
|
|
- return this.list(lambdaQueryWrapper);
|
|
|
|
|
|
|
+ return this.list(queryWrapper);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -214,7 +215,7 @@ public class DevJobServiceImpl extends ServiceImpl<DevJobMapper, DevJob> impleme
|
|
|
CronUtil.schedule(devJob.getId(), devJob.getCronExpression(), () -> {
|
|
CronUtil.schedule(devJob.getId(), devJob.getCronExpression(), () -> {
|
|
|
try {
|
|
try {
|
|
|
// 运行定时任务
|
|
// 运行定时任务
|
|
|
- ((CommonTimerTaskRunner) SpringUtil.getBean(Class.forName(devJob.getActionClass()))).action();
|
|
|
|
|
|
|
+ ((CommonTimerTaskRunner) SpringUtil.getBean(Class.forName(devJob.getActionClass()))).action(devJob.getId());
|
|
|
} catch (ClassNotFoundException e) {
|
|
} catch (ClassNotFoundException e) {
|
|
|
throw new CommonException("定时任务找不到对应的类,名称为:{}", devJob.getActionClass());
|
|
throw new CommonException("定时任务找不到对应的类,名称为:{}", devJob.getActionClass());
|
|
|
}
|
|
}
|
|
@@ -223,6 +224,7 @@ public class DevJobServiceImpl extends ServiceImpl<DevJobMapper, DevJob> impleme
|
|
|
.set(DevJob::getJobStatus, DevJobStatusEnum.RUNNING.getValue()));
|
|
.set(DevJob::getJobStatus, DevJobStatusEnum.RUNNING.getValue()));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
@Override
|
|
@Override
|
|
|
public void runJobNow(DevJobIdParam devJobIdParam) {
|
|
public void runJobNow(DevJobIdParam devJobIdParam) {
|
|
|
DevJob devJob = this.detail(devJobIdParam);
|
|
DevJob devJob = this.detail(devJobIdParam);
|
|
@@ -232,7 +234,7 @@ public class DevJobServiceImpl extends ServiceImpl<DevJobMapper, DevJob> impleme
|
|
|
}
|
|
}
|
|
|
try {
|
|
try {
|
|
|
// 直接运行一次
|
|
// 直接运行一次
|
|
|
- ((CommonTimerTaskRunner) SpringUtil.getBean(Class.forName(devJob.getActionClass()))).action();
|
|
|
|
|
|
|
+ ((CommonTimerTaskRunner) SpringUtil.getBean(Class.forName(devJob.getActionClass()))).action(devJob.getId());
|
|
|
} catch (ClassNotFoundException e) {
|
|
} catch (ClassNotFoundException e) {
|
|
|
throw new CommonException("定时任务找不到对应的类,名称为:{}", devJob.getActionClass());
|
|
throw new CommonException("定时任务找不到对应的类,名称为:{}", devJob.getActionClass());
|
|
|
}
|
|
}
|
|
@@ -243,7 +245,15 @@ public class DevJobServiceImpl extends ServiceImpl<DevJobMapper, DevJob> impleme
|
|
|
Map<String, CommonTimerTaskRunner> commonTimerTaskRunnerMap = SpringUtil.getBeansOfType(CommonTimerTaskRunner.class);
|
|
Map<String, CommonTimerTaskRunner> commonTimerTaskRunnerMap = SpringUtil.getBeansOfType(CommonTimerTaskRunner.class);
|
|
|
if (ObjectUtil.isNotEmpty(commonTimerTaskRunnerMap)) {
|
|
if (ObjectUtil.isNotEmpty(commonTimerTaskRunnerMap)) {
|
|
|
Collection<CommonTimerTaskRunner> values = commonTimerTaskRunnerMap.values();
|
|
Collection<CommonTimerTaskRunner> values = commonTimerTaskRunnerMap.values();
|
|
|
- return values.stream().map(commonTimerTaskRunner -> commonTimerTaskRunner.getClass().getName()).collect(Collectors.toList());
|
|
|
|
|
|
|
+ return values.stream().map(commonTimerTaskRunner -> {
|
|
|
|
|
+ Class<?> clazz = null;
|
|
|
|
|
+ if(AopUtils.isAopProxy(commonTimerTaskRunner)) {
|
|
|
|
|
+ clazz = AopUtils.getTargetClass(commonTimerTaskRunner);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ clazz = commonTimerTaskRunner.getClass();
|
|
|
|
|
+ }
|
|
|
|
|
+ return clazz.getName();
|
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
} else {
|
|
} else {
|
|
|
return CollectionUtil.newArrayList();
|
|
return CollectionUtil.newArrayList();
|
|
|
}
|
|
}
|