feat:定时任务开发

This commit is contained in:
Xiang
2026-01-05 17:49:55 +08:00
parent 49b9a8f9a5
commit 6f998d06ce
9 changed files with 119 additions and 4 deletions

View File

@@ -0,0 +1,44 @@
package com.xiang.app.common.manage;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xiang.xmc.service.quartz.domain.entity.JobConfigDO;
import com.xiang.xmc.service.quartz.manage.IQuartzConfigManage;
import com.xiang.xmc.service.quartz.mapper.JobConfigMapper;
import com.xiang.xmc.xservice.mysql.annotation.DynamicDataSource;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Author: xiang
* @Date: 2026-01-05 14:21
*/
@Service
public class QuartzConfigManageImpl extends ServiceImpl<JobConfigMapper, JobConfigDO> implements IQuartzConfigManage {
@Override
@DynamicDataSource(value = "xxz-job")
public JobConfigDO getByName(String appName, String beanName) {
LambdaQueryWrapper<JobConfigDO> lqw = Wrappers.lambdaQuery();
lqw.eq(JobConfigDO::getApplicationName, appName);
lqw.eq(JobConfigDO::getBeanName, beanName);
lqw.eq(JobConfigDO::getDelFlag, 0);
return baseMapper.selectOne(lqw);
}
@Override
@DynamicDataSource(value = "xxz-job")
public List<JobConfigDO> selectByAppName(String appName) {
LambdaQueryWrapper<JobConfigDO> lqw = Wrappers.lambdaQuery();
lqw.eq(JobConfigDO::getApplicationName, appName);
lqw.eq(JobConfigDO::getDelFlag, 0);
return baseMapper.selectList(lqw);
}
@Override
@DynamicDataSource(value = "xxz-job")
public int delByAppName(String appName) {
return 0;
}
}

View File

@@ -0,0 +1,19 @@
package com.xiang.app.modules.jntyzx.schedule;
import com.xiang.xmc.service.quartz.annotation.XxzJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* @Author: xiang
* @Date: 2026-01-05 08:59
*/
@Slf4j
@Component
public class TestXxzJob {
@XxzJob(name = "TestXxzJob")
public void testXxzJob() {
log.info("测试xxz-job框架");
}
}

View File

@@ -1,4 +1,4 @@
package com.xiang.app.modules.jntyzx.service; package com.xiang.app.modules.jntyzx.service.impl;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
@@ -16,6 +16,7 @@ import com.xiang.app.modules.jntyzx.entity.resp.OrderCreateResp;
import com.xiang.app.modules.jntyzx.entity.resp.query.SitePositionList; import com.xiang.app.modules.jntyzx.entity.resp.query.SitePositionList;
import com.xiang.app.modules.jntyzx.entity.resp.query.VenueList; import com.xiang.app.modules.jntyzx.entity.resp.query.VenueList;
import com.xiang.app.modules.jntyzx.manage.IOrderCreateInfoManage; import com.xiang.app.modules.jntyzx.manage.IOrderCreateInfoManage;
import com.xiang.app.modules.jntyzx.service.IJntyzxHttpService;
import com.xiang.xmc.service.cache.service.IRedisService; import com.xiang.xmc.service.cache.service.IRedisService;
import com.xiang.xmc.service.http.helper.HttpHelper; import com.xiang.xmc.service.http.helper.HttpHelper;
import com.xiang.xservice.basic.utils.Base64; import com.xiang.xservice.basic.utils.Base64;

View File

@@ -1,7 +1,8 @@
package com.xiang.app.modules.jntyzx.service; package com.xiang.app.modules.jntyzx.service.impl;
import com.xiang.app.modules.jntyzx.entity.pojo.OrderInfoDO; import com.xiang.app.modules.jntyzx.entity.pojo.OrderInfoDO;
import com.xiang.app.modules.jntyzx.manage.IOrderCreateInfoManage; import com.xiang.app.modules.jntyzx.manage.IOrderCreateInfoManage;
import com.xiang.app.modules.jntyzx.service.IJtOrderService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;

View File

@@ -1,9 +1,11 @@
package com.xiang.app.modules.jntyzx.service; package com.xiang.app.modules.jntyzx.service.impl;
import com.xiang.app.common.service.dingtalk.JtDingTalkFactory; import com.xiang.app.common.service.dingtalk.JtDingTalkFactory;
import com.xiang.app.modules.jntyzx.entity.pojo.UserTokenInfoDO; import com.xiang.app.modules.jntyzx.entity.pojo.UserTokenInfoDO;
import com.xiang.app.modules.jntyzx.entity.resp.JntyzxResponse; import com.xiang.app.modules.jntyzx.entity.resp.JntyzxResponse;
import com.xiang.app.modules.jntyzx.manage.IUserTokenInfoManage; import com.xiang.app.modules.jntyzx.manage.IUserTokenInfoManage;
import com.xiang.app.modules.jntyzx.service.IJntyzxHttpService;
import com.xiang.app.modules.jntyzx.service.IUserTokenInfoService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;

View File

@@ -1,10 +1,13 @@
package com.xiang.app.modules.jntyzx.service; package com.xiang.app.modules.jntyzx.service.impl;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.xiang.app.modules.jntyzx.entity.pojo.VenueInfoDO; import com.xiang.app.modules.jntyzx.entity.pojo.VenueInfoDO;
import com.xiang.app.modules.jntyzx.entity.resp.query.SitePositionList; import com.xiang.app.modules.jntyzx.entity.resp.query.SitePositionList;
import com.xiang.app.modules.jntyzx.manage.IVenueInfoManage; import com.xiang.app.modules.jntyzx.manage.IVenueInfoManage;
import com.xiang.app.modules.jntyzx.service.IJntyzxHttpService;
import com.xiang.app.modules.jntyzx.service.IUserTokenInfoService;
import com.xiang.app.modules.jntyzx.service.IVenueService;
import com.xiang.app.modules.jntyzx.utils.VenueInfoUtils; import com.xiang.app.modules.jntyzx.utils.VenueInfoUtils;
import com.xiang.xservice.basic.utils.DateUtils; import com.xiang.xservice.basic.utils.DateUtils;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;

View File

@@ -1,5 +1,7 @@
package com.xiang.app; package com.xiang.app;
import com.xiang.xmc.service.quartz.annotation.EnableXxzJob;
import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
@@ -15,6 +17,11 @@ import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
"com.xiang.xservice.logger", "com.xiang.xservice.logger",
"com.xiang.app.common.config", "com.xiang.app.common.config",
}) })
@MapperScan(basePackages = {
"com.xiang.xmc.service.quartz",
"com.xiang.app.modules.*.mapper"
})
@EnableXxzJob(basePackages = {"com.xiang.app.modules.*.schedule"})
public class Application { public class Application {
private static final Logger log = LoggerFactory.getLogger(Application.class); private static final Logger log = LoggerFactory.getLogger(Application.class);

View File

@@ -0,0 +1,30 @@
package com.xiang.app;
import com.xiang.xmc.service.quartz.domain.JobDefinition;
import com.xiang.xmc.service.quartz.holder.JobDefinitionHolder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.List;
/**
* @Author: xiang
* @Date: 2025-12-31 14:19
*/
@Component
@Slf4j
public class JobScannerRun implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
List<JobDefinition> jobDefinitions = JobDefinitionHolder.getAll();
if (CollectionUtils.isEmpty(jobDefinitions)) {
log.info("job 注册为空");
}
jobDefinitions.forEach(item -> {
log.info("已注册job:" + item.getName());
});
}
}

View File

@@ -17,6 +17,12 @@ spring:
password: cornucopia@123 password: cornucopia@123
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
sshConnect: false sshConnect: false
xxz-job:
url: jdbc:mysql://120.27.153.87:3306/xservice_quartz?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true
username: quartz
password: quartz@123
driver-class-name: com.mysql.cj.jdbc.Driver
sshConnect: false
redis: redis:
host: r-bp1wt59a6nfyt4e3ltpd.redis.rds.aliyuncs.com host: r-bp1wt59a6nfyt4e3ltpd.redis.rds.aliyuncs.com
port: 6379 port: 6379
@@ -29,6 +35,8 @@ spring:
max-idle: 8 max-idle: 8
min-idle: 0 min-idle: 0
max-wait: 1000 max-wait: 1000
xxz-job:
appName: xservice-cornucopia
dingtalk: dingtalk:
robot: robot: