feat:环境隔离

This commit is contained in:
Xiang
2026-01-14 16:35:13 +08:00
parent c1f7305b69
commit 5fb186a85b
15 changed files with 48 additions and 20 deletions

View File

@@ -86,4 +86,9 @@ public class JobConfigDO implements Serializable {
* 版本
*/
private Integer version;
/**
* 环境
*/
private Long env;
}

View File

@@ -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;
/**
* 应用名称
*/

View File

@@ -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();

View File

@@ -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);
}

View File

@@ -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));
}
}

View File

@@ -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);
}

View File

@@ -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());
}
}

View File

@@ -2,7 +2,7 @@ server:
port: 30030
spring:
profiles:
active: test
active: prod
application:
name: xservice-quartz-admin
main:

View File

@@ -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);
}

View File

@@ -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));

View File

@@ -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;
}

View File

@@ -42,4 +42,9 @@ public class TaskRegisterRequest {
* 方法
*/
private String method;
/**
* 环境
*/
private Long env;
}

View File

@@ -25,4 +25,9 @@ public class XxzJobProperties {
* 调度中心地址
*/
private String adminAddress;
/**
* 命名空间
*/
private Long namespace;
}

View File

@@ -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());

View File

@@ -1,6 +1,7 @@
xxz-job:
app-name: springboot-quartz-test
admin-address: http://127.0.0.1:30030
namespace: 1
spring:
main: