refactor(framework): 重构框架核心组件

- 修改 SpringBeanHolder 类名,统一命名风格
- 更新相关类的包结构,提高代码可维护性
- 优化部分代码实现,提升性能和可读性
This commit is contained in:
2025-07-27 13:35:21 +08:00
parent b6c93031c6
commit 4673ca356c
15 changed files with 42 additions and 41 deletions
+1
View File
@@ -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

@@ -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都加载完毕了");
@@ -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 {
@@ -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();
@@ -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;
}
/**
@@ -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;
@@ -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获取详细地址
@@ -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);
@@ -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,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,请重新输入!");
}
}
@@ -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());
}
@@ -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);