feat:环境隔离
This commit is contained in:
@@ -86,4 +86,9 @@ public class JobConfigDO implements Serializable {
|
||||
* 版本
|
||||
*/
|
||||
private Integer version;
|
||||
|
||||
/**
|
||||
* 环境
|
||||
*/
|
||||
private Long env;
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* @Author: xiang
|
||||
@@ -15,6 +16,9 @@ import javax.validation.constraints.NotBlank;
|
||||
@NoArgsConstructor
|
||||
public class TaskRegisterRequest {
|
||||
|
||||
@NotNull(message = "命名空间不能为空")
|
||||
private Long env;
|
||||
|
||||
/**
|
||||
* 应用名称
|
||||
*/
|
||||
|
||||
@@ -13,7 +13,7 @@ import java.util.List;
|
||||
public interface IQuartzConfigManage extends IService<JobConfigDO> {
|
||||
|
||||
|
||||
List<JobConfigDO> selectByAppName(String name);
|
||||
List<JobConfigDO> selectByAppName(String name, Long env);
|
||||
List<JobConfigDO> selectByAppNameAndVersion(String name, Integer version);
|
||||
|
||||
List<JobConfigDO> loadEnabledJobs();
|
||||
|
||||
@@ -18,10 +18,11 @@ import java.util.List;
|
||||
@Service
|
||||
public class QuartzConfigManageImpl extends ServiceImpl<IQuartzConfigMapper, JobConfigDO> implements IQuartzConfigManage {
|
||||
@Override
|
||||
public List<JobConfigDO> selectByAppName(String name) {
|
||||
public List<JobConfigDO> selectByAppName(String name, Long env) {
|
||||
LambdaQueryWrapper<JobConfigDO> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(JobConfigDO::getApplicationName, name);
|
||||
lqw.eq(JobConfigDO::getDelFlag, 0);
|
||||
lqw.eq(JobConfigDO::getEnv, env);
|
||||
return baseMapper.selectList(lqw);
|
||||
}
|
||||
|
||||
|
||||
@@ -22,13 +22,15 @@ public class XxzJobFetchController {
|
||||
|
||||
private final ITaskConfigService taskConfigService;
|
||||
@GetMapping("/list")
|
||||
public Result<JobConfigDO> list(@RequestParam("appName") String appName) {
|
||||
List<JobConfigDO> jobsByAppName = taskConfigService.getJobsByAppName(appName);
|
||||
public Result<JobConfigDO> list(@RequestParam("appName") String appName, @RequestParam("env") Long env) {
|
||||
List<JobConfigDO> jobsByAppName = taskConfigService.getJobsByAppName(appName, env);
|
||||
return Result.success(jobsByAppName);
|
||||
}
|
||||
|
||||
@GetMapping("/listByVersion")
|
||||
public Result<JobConfigDO> listByVersion(@RequestParam("appName") String appName, @RequestParam("currVersion") Integer currVersion) {
|
||||
return Result.success(taskConfigService.getJobsByAppNameAndVersion(appName, currVersion));
|
||||
public Result<JobConfigDO> listByVersion(@RequestParam("appName") String appName,
|
||||
@RequestParam("currVersion") Integer currVersion,
|
||||
@RequestParam("env") Long env) {
|
||||
return Result.success(taskConfigService.getJobsByAppNameAndVersion(appName, currVersion, env));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ public interface ITaskConfigService {
|
||||
* @param appName
|
||||
* @return
|
||||
*/
|
||||
List<JobConfigDO> getJobsByAppName(String appName);
|
||||
List<JobConfigDO> getJobsByAppName(String appName, Long env);
|
||||
|
||||
/**
|
||||
* 根据应用名称和版本获取任务
|
||||
@@ -38,5 +38,5 @@ public interface ITaskConfigService {
|
||||
* @param version
|
||||
* @return
|
||||
*/
|
||||
List<JobConfigDO> getJobsByAppNameAndVersion(String appName, Integer version);
|
||||
List<JobConfigDO> getJobsByAppNameAndVersion(String appName, Integer version, Long env);
|
||||
}
|
||||
|
||||
@@ -41,7 +41,8 @@ public class TaskConfigServiceImpl implements ITaskConfigService {
|
||||
return false;
|
||||
}
|
||||
String applicationName = request.get(0).getApplicationName();
|
||||
List<JobConfigDO> jobs = quartzConfigManage.selectByAppName(applicationName);
|
||||
Long env = request.get(0).getEnv();
|
||||
List<JobConfigDO> jobs = quartzConfigManage.selectByAppName(applicationName, env);
|
||||
Map<String, JobConfigDO> existJobs = Maps.newHashMap();
|
||||
if (CollectionUtils.isNotEmpty(jobs)) {
|
||||
existJobs.putAll(jobs.stream().collect(Collectors.toMap(JobConfigDO::getBeanName, Function.identity(), (a, b) -> a)));
|
||||
@@ -69,13 +70,13 @@ public class TaskConfigServiceImpl implements ITaskConfigService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<JobConfigDO> getJobsByAppName(String appName) {
|
||||
return quartzConfigManage.selectByAppName(appName);
|
||||
public List<JobConfigDO> getJobsByAppName(String appName, Long env) {
|
||||
return quartzConfigManage.selectByAppName(appName, env);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<JobConfigDO> getJobsByAppNameAndVersion(String appName, Integer version) {
|
||||
List<JobConfigDO> jobConfigDOS = quartzConfigManage.selectByAppName(appName);
|
||||
public List<JobConfigDO> getJobsByAppNameAndVersion(String appName, Integer version, Long env) {
|
||||
List<JobConfigDO> jobConfigDOS = quartzConfigManage.selectByAppName(appName, env);
|
||||
Map<String, List<JobConfigDO>> map = Maps.newHashMap();
|
||||
if (CollectionUtils.isNotEmpty(jobConfigDOS)) {
|
||||
map.putAll(jobConfigDOS.stream().collect(Collectors.groupingBy(JobConfigDO::getBeanName)));
|
||||
@@ -104,5 +105,6 @@ public class TaskConfigServiceImpl implements ITaskConfigService {
|
||||
jobConfigDO.setClazz(item.getClazz());
|
||||
jobConfigDO.setMethod(item.getMethod());
|
||||
jobConfigDO.setJobSwitch(Objects.isNull(jobConfigDO.getJobSwitch()) ? 0 : jobConfigDO.getJobSwitch());
|
||||
jobConfigDO.setEnv(item.getEnv());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ server:
|
||||
port: 30030
|
||||
spring:
|
||||
profiles:
|
||||
active: test
|
||||
active: prod
|
||||
application:
|
||||
name: xservice-quartz-admin
|
||||
main:
|
||||
|
||||
@@ -11,8 +11,8 @@ import java.util.List;
|
||||
*/
|
||||
public interface AdminJobClient {
|
||||
|
||||
List<JobConfigDO> fetchJobByAppName(String appName);
|
||||
List<JobConfigDO> fetchJobByAppNameAndVersion(String appName, Integer version);
|
||||
List<JobConfigDO> fetchJobByAppName(String appName, Long namespace);
|
||||
List<JobConfigDO> fetchJobByAppNameAndVersion(String appName, Integer version, Long namespace);
|
||||
|
||||
void registerJob(JobDefinition jobDefinition, String className);
|
||||
}
|
||||
|
||||
@@ -30,11 +30,12 @@ public class HttpAdminJobClientImpl implements AdminJobClient {
|
||||
private static final BaseHttpHelp httpHelp = HttpHelperFactory.createQuartzHttp();
|
||||
|
||||
@Override
|
||||
public List<JobConfigDO> fetchJobByAppName(String appName) {
|
||||
public List<JobConfigDO> fetchJobByAppName(String appName, Long namespace) {
|
||||
String address = xxzJobProperties.getAdminAddress();
|
||||
address = address + "/open/quartz/fetch/list";
|
||||
Map<String, String> params = Maps.newHashMap();
|
||||
params.put("appName", appName);
|
||||
params.put("env", String.valueOf(namespace));
|
||||
String resp = httpHelp.doGet(address, params);
|
||||
if (StringUtils.isNotBlank(resp)) {
|
||||
JSONObject jsonObject = JSON.parseObject(resp);
|
||||
@@ -49,11 +50,12 @@ public class HttpAdminJobClientImpl implements AdminJobClient {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<JobConfigDO> fetchJobByAppNameAndVersion(String appName, Integer version) {
|
||||
public List<JobConfigDO> fetchJobByAppNameAndVersion(String appName, Integer version, Long namespace) {
|
||||
String address = xxzJobProperties.getAdminAddress();
|
||||
address = address + "/open/quartz/fetch/listByVersion";
|
||||
Map<String, String> params = Maps.newHashMap();
|
||||
params.put("appName", appName);
|
||||
params.put("env", String.valueOf(namespace));
|
||||
params.put("currVersion", String.valueOf(version));
|
||||
String resp = httpHelp.doGet(address, params);
|
||||
|
||||
@@ -78,6 +80,7 @@ public class HttpAdminJobClientImpl implements AdminJobClient {
|
||||
request.setCron(jobDefinition.getCron());
|
||||
request.setClazz(className);
|
||||
request.setMethod(jobDefinition.getMethod().getName());
|
||||
request.setEnv(xxzJobProperties.getNamespace());
|
||||
String address = xxzJobProperties.getAdminAddress();
|
||||
address = address + "/open/quartz/register/single";
|
||||
httpHelp.doPost(address, JSON.toJSONString(request));
|
||||
|
||||
@@ -35,7 +35,7 @@ public class JobBootstrap implements ApplicationRunner {
|
||||
@Override
|
||||
public void run(ApplicationArguments args) {
|
||||
// 启动时动态获取此app下面的数据库配置好的定时任务 用于管理cron和开关
|
||||
List<JobConfigDO> jobConfigDOS = adminJobClient.fetchJobByAppName(xxzJobProperties.getAppName());
|
||||
List<JobConfigDO> jobConfigDOS = adminJobClient.fetchJobByAppName(xxzJobProperties.getAppName(), xxzJobProperties.getNamespace());
|
||||
if (CollectionUtils.isEmpty(jobConfigDOS)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -42,4 +42,9 @@ public class TaskRegisterRequest {
|
||||
* 方法
|
||||
*/
|
||||
private String method;
|
||||
|
||||
/**
|
||||
* 环境
|
||||
*/
|
||||
private Long env;
|
||||
}
|
||||
|
||||
@@ -25,4 +25,9 @@ public class XxzJobProperties {
|
||||
* 调度中心地址
|
||||
*/
|
||||
private String adminAddress;
|
||||
|
||||
/**
|
||||
* 命名空间
|
||||
*/
|
||||
private Long namespace;
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ public class JobConfigRefreshTask {
|
||||
private JobScheduler jobScheduler;
|
||||
@Scheduled(fixedDelay = 5000)
|
||||
public void refresh() {
|
||||
List<JobConfigDO> jobConfigDOS = adminJobClient.fetchJobByAppName(xxzJobProperties.getAppName());
|
||||
List<JobConfigDO> jobConfigDOS = adminJobClient.fetchJobByAppName(xxzJobProperties.getAppName(), xxzJobProperties.getNamespace());
|
||||
|
||||
for (JobConfigDO jobConfigDO : jobConfigDOS) {
|
||||
JobDefinition jobDefinition = JobDefinitionHolder.getOne(jobConfigDO.getBeanName());
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
xxz-job:
|
||||
app-name: springboot-quartz-test
|
||||
admin-address: http://127.0.0.1:30030
|
||||
namespace: 1
|
||||
|
||||
spring:
|
||||
main:
|
||||
|
||||
Reference in New Issue
Block a user