refactor(framework): 重构框架核心组件
- 修改 SpringBeanHolder 类名,统一命名风格 - 更新相关类的包结构,提高代码可维护性 - 优化部分代码实现,提升性能和可读性
This commit is contained in:
@@ -10,6 +10,7 @@ yarn-error.log*
|
||||
tests/**/coverage/
|
||||
tests/e2e/reports
|
||||
selenium-debug.log
|
||||
cutejava-doc
|
||||
|
||||
# Editor directories and files
|
||||
.idea
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 38 KiB |
+1
-1
@@ -28,7 +28,7 @@ import org.springframework.stereotype.Component;
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class CsBeanLoadFinishListener implements ApplicationListener<ContextRefreshedEvent> {
|
||||
public class BeanLoadFinishListener implements ApplicationListener<ContextRefreshedEvent> {
|
||||
@Override
|
||||
public void onApplicationEvent(ContextRefreshedEvent event) {
|
||||
log.info("所有的Bean都加载完毕了");
|
||||
+3
-3
@@ -31,10 +31,10 @@ import java.net.UnknownHostException;
|
||||
* @date 2024-04-20
|
||||
*/
|
||||
@Slf4j
|
||||
public class CsBootApplication {
|
||||
public class BootApplication {
|
||||
@Bean
|
||||
public SpringBeanHolder springBeanHolder() {
|
||||
return new SpringBeanHolder();
|
||||
public CsSpringBeanHolder springBeanHolder() {
|
||||
return new CsSpringBeanHolder();
|
||||
}
|
||||
|
||||
protected static void inited(ConfigurableApplicationContext application) throws UnknownHostException {
|
||||
+1
-1
@@ -9,7 +9,7 @@ import java.util.Objects;
|
||||
/**
|
||||
* 获取 HttpServletRequest
|
||||
*/
|
||||
public class RequestHolder {
|
||||
public class CsRequestHolder {
|
||||
|
||||
public static HttpServletRequest getHttpServletRequest() {
|
||||
return ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
|
||||
+8
-8
@@ -15,7 +15,7 @@ import java.util.List;
|
||||
|
||||
@Slf4j
|
||||
@SuppressWarnings({"unchecked", "all"})
|
||||
public class SpringBeanHolder implements ApplicationContextAware, DisposableBean {
|
||||
public class CsSpringBeanHolder implements ApplicationContextAware, DisposableBean {
|
||||
|
||||
private static ApplicationContext applicationContext = null;
|
||||
private static final List<CallBack> CALL_BACKS = new ArrayList<>();
|
||||
@@ -29,7 +29,7 @@ public class SpringBeanHolder implements ApplicationContextAware, DisposableBean
|
||||
*/
|
||||
public synchronized static void addCallBacks(CallBack callBack) {
|
||||
if (addCallback) {
|
||||
SpringBeanHolder.CALL_BACKS.add(callBack);
|
||||
CsSpringBeanHolder.CALL_BACKS.add(callBack);
|
||||
} else {
|
||||
log.warn("CallBack:{} 已无法添加!立即执行", callBack.getCallBackName());
|
||||
callBack.executor();
|
||||
@@ -109,22 +109,22 @@ public class SpringBeanHolder implements ApplicationContextAware, DisposableBean
|
||||
|
||||
@Override
|
||||
public void destroy() {
|
||||
SpringBeanHolder.clearHolder();
|
||||
CsSpringBeanHolder.clearHolder();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
|
||||
if (SpringBeanHolder.applicationContext != null) {
|
||||
log.warn("SpringContextHolder中的ApplicationContext被覆盖, 原有ApplicationContext为:" + SpringBeanHolder.applicationContext);
|
||||
if (CsSpringBeanHolder.applicationContext != null) {
|
||||
log.warn("SpringContextHolder中的ApplicationContext被覆盖, 原有ApplicationContext为:" + CsSpringBeanHolder.applicationContext);
|
||||
}
|
||||
SpringBeanHolder.applicationContext = applicationContext;
|
||||
CsSpringBeanHolder.applicationContext = applicationContext;
|
||||
if (addCallback) {
|
||||
for (CallBack callBack : SpringBeanHolder.CALL_BACKS) {
|
||||
for (CallBack callBack : CsSpringBeanHolder.CALL_BACKS) {
|
||||
callBack.executor();
|
||||
}
|
||||
CALL_BACKS.clear();
|
||||
}
|
||||
SpringBeanHolder.addCallback = false;
|
||||
CsSpringBeanHolder.addCallback = false;
|
||||
}
|
||||
|
||||
/**
|
||||
+1
-1
@@ -31,7 +31,7 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
@RequiredArgsConstructor
|
||||
@RequestMapping("/healthCheck")
|
||||
@Api(tags = "系统:健康检查接口")
|
||||
public class CsHealthCheckController {
|
||||
public class HealthCheckController {
|
||||
@Autowired
|
||||
private CsHealthCheckPointService healthCheckPointService;
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
package cn.odboy.framework.quartz.core;
|
||||
|
||||
import cn.odboy.framework.context.SpringBeanHolder;
|
||||
import cn.odboy.framework.context.CsSpringBeanHolder;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.util.ReflectionUtils;
|
||||
@@ -18,7 +18,7 @@ public class QuartzRunnable implements Callable<Object> {
|
||||
private final String params;
|
||||
|
||||
public QuartzRunnable(String beanName, String methodName, String params) throws NoSuchMethodException, SecurityException {
|
||||
this.target = SpringBeanHolder.getBean(beanName);
|
||||
this.target = CsSpringBeanHolder.getBean(beanName);
|
||||
this.params = params;
|
||||
if (StringUtils.isNotBlank(params)) {
|
||||
this.method = target.getClass().getDeclaredMethod(methodName, String.class);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package cn.odboy.util;
|
||||
|
||||
import cn.odboy.framework.context.SpringBeanHolder;
|
||||
import cn.odboy.framework.context.CsSpringBeanHolder;
|
||||
import lombok.experimental.UtilityClass;
|
||||
import net.dreamlu.mica.ip2region.core.Ip2regionSearcher;
|
||||
import net.dreamlu.mica.ip2region.core.IpInfo;
|
||||
@@ -17,7 +17,7 @@ public final class IpUtil {
|
||||
/**
|
||||
* 注入bean
|
||||
*/
|
||||
private final static Ip2regionSearcher IP_SEARCHER = SpringBeanHolder.getBean(Ip2regionSearcher.class);
|
||||
private final static Ip2regionSearcher IP_SEARCHER = CsSpringBeanHolder.getBean(Ip2regionSearcher.class);
|
||||
|
||||
/**
|
||||
* 根据ip获取详细地址
|
||||
|
||||
+8
-8
@@ -10,7 +10,7 @@ import cn.odboy.devops.dal.mysql.PipelineInstanceMapper;
|
||||
import cn.odboy.devops.dal.redis.PipelineInstanceDAO;
|
||||
import cn.odboy.devops.framework.pipeline.model.PipelineNodeTemplateVo;
|
||||
import cn.odboy.devops.service.core.PipelineInstanceNodeService;
|
||||
import cn.odboy.framework.context.SpringBeanHolder;
|
||||
import cn.odboy.framework.context.CsSpringBeanHolder;
|
||||
import cn.odboy.framework.exception.BadRequestException;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -33,11 +33,11 @@ public class PipelineJobBean implements InterruptableJob {
|
||||
@Override
|
||||
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
|
||||
// 获取服务
|
||||
PipelineInstanceMapper pipelineInstanceMapper = SpringBeanHolder.getBean(PipelineInstanceMapper.class);
|
||||
PipelineInstanceNodeService pipelineInstanceNodeService = SpringBeanHolder.getBean(PipelineInstanceNodeService.class);
|
||||
PipelineInstanceDAO pipelineInstanceDAO = SpringBeanHolder.getBean(PipelineInstanceDAO.class);
|
||||
PipelineJobManage pipelineJobManage = SpringBeanHolder.getBean(PipelineJobManage.class);
|
||||
PipelineNodeJobManage pipelineNodeJobManage = SpringBeanHolder.getBean(PipelineNodeJobManage.class);
|
||||
PipelineInstanceMapper pipelineInstanceMapper = CsSpringBeanHolder.getBean(PipelineInstanceMapper.class);
|
||||
PipelineInstanceNodeService pipelineInstanceNodeService = CsSpringBeanHolder.getBean(PipelineInstanceNodeService.class);
|
||||
PipelineInstanceDAO pipelineInstanceDAO = CsSpringBeanHolder.getBean(PipelineInstanceDAO.class);
|
||||
PipelineJobManage pipelineJobManage = CsSpringBeanHolder.getBean(PipelineJobManage.class);
|
||||
PipelineNodeJobManage pipelineNodeJobManage = CsSpringBeanHolder.getBean(PipelineNodeJobManage.class);
|
||||
|
||||
// 参数解析
|
||||
JobDataMap jobDataMap = jobExecutionContext.getMergedJobDataMap();
|
||||
@@ -160,8 +160,8 @@ public class PipelineJobBean implements InterruptableJob {
|
||||
public void interrupt() throws UnableToInterruptJobException {
|
||||
this.interrupted = true;
|
||||
if (this.currentInstanceId != null && StrUtil.isNotBlank(this.currentNodeCode)) {
|
||||
PipelineInstanceMapper pipelineInstanceMapper = SpringBeanHolder.getBean(PipelineInstanceMapper.class);
|
||||
PipelineInstanceDAO pipelineInstanceDAO = SpringBeanHolder.getBean(PipelineInstanceDAO.class);
|
||||
PipelineInstanceMapper pipelineInstanceMapper = CsSpringBeanHolder.getBean(PipelineInstanceMapper.class);
|
||||
PipelineInstanceDAO pipelineInstanceDAO = CsSpringBeanHolder.getBean(PipelineInstanceDAO.class);
|
||||
|
||||
int seconds = 30_000;
|
||||
log.info("中断信号已发出,等待最多 {} 秒,若未自行结束则强制终止线程", seconds);
|
||||
|
||||
+3
-3
@@ -5,7 +5,7 @@ import cn.odboy.devops.constant.pipeline.PipelineStatusEnum;
|
||||
import cn.odboy.devops.framework.pipeline.model.PipelineNodeJobExecuteResult;
|
||||
import cn.odboy.devops.framework.pipeline.model.PipelineNodeTemplateVo;
|
||||
import cn.odboy.devops.service.core.PipelineInstanceNodeService;
|
||||
import cn.odboy.framework.context.SpringBeanHolder;
|
||||
import cn.odboy.framework.context.CsSpringBeanHolder;
|
||||
import cn.odboy.framework.exception.BadRequestException;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.quartz.Job;
|
||||
@@ -25,7 +25,7 @@ import java.util.Date;
|
||||
public class PipelineNodeJobBean implements Job {
|
||||
@Override
|
||||
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
|
||||
PipelineInstanceNodeService pipelineInstanceNodeService = SpringBeanHolder.getBean(PipelineInstanceNodeService.class);
|
||||
PipelineInstanceNodeService pipelineInstanceNodeService = CsSpringBeanHolder.getBean(PipelineInstanceNodeService.class);
|
||||
|
||||
JobDataMap jobDataMap = jobExecutionContext.getMergedJobDataMap();
|
||||
long instanceId = jobDataMap.getLong(PipelineConst.INSTANCE_ID);
|
||||
@@ -34,7 +34,7 @@ public class PipelineNodeJobBean implements Job {
|
||||
|
||||
try {
|
||||
String serviceName = PipelineConst.EXECUTOR_PREFIX + nodeCode;
|
||||
PipelineNodeJobExecutor pipelineNodeJobExecutor = SpringBeanHolder.getBean(serviceName);
|
||||
PipelineNodeJobExecutor pipelineNodeJobExecutor = CsSpringBeanHolder.getBean(serviceName);
|
||||
pipelineInstanceNodeService.updatePipelineInstanceNodeByArgs(instanceId, nodeCode, PipelineStatusEnum.RUNNING, PipelineStatusEnum.RUNNING.getDesc());
|
||||
PipelineNodeJobExecuteResult executeResult = pipelineNodeJobExecutor.execute(jobDataMap);
|
||||
jobExecutionContext.getMergedJobDataMap().put(PipelineConst.LAST_NODE_RESULT, executeResult);
|
||||
|
||||
+2
-2
@@ -2,7 +2,7 @@ package cn.odboy.system.controller;
|
||||
|
||||
import cn.odboy.base.CsPageArgs;
|
||||
import cn.odboy.base.CsResultVo;
|
||||
import cn.odboy.framework.context.SpringBeanHolder;
|
||||
import cn.odboy.framework.context.CsSpringBeanHolder;
|
||||
import cn.odboy.framework.exception.BadRequestException;
|
||||
import cn.odboy.system.dal.dataobject.SystemQuartzJobTb;
|
||||
import cn.odboy.system.dal.dataobject.SystemQuartzLogTb;
|
||||
@@ -120,7 +120,7 @@ public class SystemQuartzJobController {
|
||||
private void checkBean(String beanName) {
|
||||
// 避免调用攻击者可以从SpringContextHolder获得控制jdbcTemplate类
|
||||
// 并使用getDeclaredMethod调用jdbcTemplate的queryForMap函数,执行任意sql命令。
|
||||
if (!SpringBeanHolder.getAllServiceBeanName().contains(beanName)) {
|
||||
if (!CsSpringBeanHolder.getAllServiceBeanName().contains(beanName)) {
|
||||
throw new BadRequestException("非法的 Bean,请重新输入!");
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.jwt.JWT;
|
||||
import cn.hutool.jwt.JWTUtil;
|
||||
import cn.odboy.constant.SystemConst;
|
||||
import cn.odboy.framework.context.SpringBeanHolder;
|
||||
import cn.odboy.framework.context.CsSpringBeanHolder;
|
||||
import cn.odboy.system.constant.SystemDataScopeEnum;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.alibaba.fastjson2.JSONArray;
|
||||
@@ -32,7 +32,7 @@ public class CsSecurityHelper {
|
||||
* @return UserDetails
|
||||
*/
|
||||
public static UserDetails getCurrentUser() {
|
||||
UserDetailsService userDetailsService = SpringBeanHolder.getBean(UserDetailsService.class);
|
||||
UserDetailsService userDetailsService = CsSpringBeanHolder.getBean(UserDetailsService.class);
|
||||
return userDetailsService.loadUserByUsername(getCurrentUsername());
|
||||
}
|
||||
|
||||
|
||||
+6
-6
@@ -5,7 +5,7 @@ import cn.hutool.extra.template.Template;
|
||||
import cn.hutool.extra.template.TemplateConfig;
|
||||
import cn.hutool.extra.template.TemplateEngine;
|
||||
import cn.hutool.extra.template.TemplateUtil;
|
||||
import cn.odboy.framework.context.SpringBeanHolder;
|
||||
import cn.odboy.framework.context.CsSpringBeanHolder;
|
||||
import cn.odboy.framework.quartz.core.QuartzRunnable;
|
||||
import cn.odboy.framework.redis.RedisHelper;
|
||||
import cn.odboy.system.dal.dataobject.SystemQuartzJobTb;
|
||||
@@ -31,16 +31,16 @@ public class ExecutionJobBean extends QuartzJobBean {
|
||||
/**
|
||||
* 此处仅供参考,可根据任务执行情况自定义线程池参数
|
||||
*/
|
||||
private final ThreadPoolTaskExecutor executor = SpringBeanHolder.getBean("taskAsync");
|
||||
private final ThreadPoolTaskExecutor executor = CsSpringBeanHolder.getBean("taskAsync");
|
||||
|
||||
@Override
|
||||
public void executeInternal(JobExecutionContext context) {
|
||||
// 获取任务
|
||||
SystemQuartzJobTb quartzJob = (SystemQuartzJobTb) context.getMergedJobDataMap().get(SystemQuartzJobTb.JOB_KEY);
|
||||
// 获取spring bean
|
||||
SystemQuartzLogMapper quartzLogMapper = SpringBeanHolder.getBean(SystemQuartzLogMapper.class);
|
||||
SystemQuartzJobService systemQuartzJobService = SpringBeanHolder.getBean(SystemQuartzJobService.class);
|
||||
RedisHelper redisHelper = SpringBeanHolder.getBean(RedisHelper.class);
|
||||
SystemQuartzLogMapper quartzLogMapper = CsSpringBeanHolder.getBean(SystemQuartzLogMapper.class);
|
||||
SystemQuartzJobService systemQuartzJobService = CsSpringBeanHolder.getBean(SystemQuartzJobService.class);
|
||||
RedisHelper redisHelper = CsSpringBeanHolder.getBean(RedisHelper.class);
|
||||
|
||||
String uuid = quartzJob.getUuid();
|
||||
|
||||
@@ -88,7 +88,7 @@ public class ExecutionJobBean extends QuartzJobBean {
|
||||
systemQuartzJobService.switchQuartzJobStatus(quartzJob);
|
||||
}
|
||||
if (quartzJob.getEmail() != null) {
|
||||
SystemEmailService emailService = SpringBeanHolder.getBean(SystemEmailService.class);
|
||||
SystemEmailService emailService = CsSpringBeanHolder.getBean(SystemEmailService.class);
|
||||
// 邮箱报警
|
||||
if (StringUtil.isNoneBlank(quartzJob.getEmail())) {
|
||||
SystemSendEmailArgs sendEmailRequest = taskAlarm(quartzJob, ExceptionUtil.stacktraceToString(e));
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package cn.odboy;
|
||||
|
||||
import cn.odboy.framework.context.CsBootApplication;
|
||||
import cn.odboy.framework.context.BootApplication;
|
||||
import com.anwen.mongo.config.MongoPlusAutoConfiguration;
|
||||
import com.anwen.mongo.config.OverrideMongoConfiguration;
|
||||
import io.swagger.annotations.Api;
|
||||
@@ -13,7 +13,7 @@ import java.net.UnknownHostException;
|
||||
@Api(hidden = true)
|
||||
@SpringBootApplication(exclude = OverrideMongoConfiguration.class)
|
||||
@Import(MongoPlusAutoConfiguration.class)
|
||||
public class AppRun extends CsBootApplication {
|
||||
public class AppRun extends BootApplication {
|
||||
|
||||
public static void main(String[] args) throws UnknownHostException {
|
||||
SpringApplication springApplication = new SpringApplication(AppRun.class);
|
||||
|
||||
Reference in New Issue
Block a user