2019.08.15日记,记录一次多个业务并行运行的思路

2024-06-17 14:18

本文主要是介绍2019.08.15日记,记录一次多个业务并行运行的思路,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

记录一次在处理业务过程中遇到的问题,

背景是这样子,有一天boss过来找我说,小王呀,公司现在有一个只有一个支付宝的支付功能,为了拓展业务,所以又打算接入一个微信的支付功能,现在要求这两个功能同时上线运行,然后又随机分配,如果其中一个出了问题可以马上切换到另一个顶上去!

然后boss说完需求就自顾自的去忙了,留下一脸懵逼的我!!

不管怎么样,需求提出来了,功能还是要做的。

思前想后,想出了一个解决思路,可以利用多态的思想,建立一个基类/接口,上代码

public interface BaseData {public String getName();
}

然后其下面有两个子类


@Component("DataOne")
public class DataOne implements BaseData {public String getName(){return "DataOne";}
}
@Component("DataTwo")
public class DataTwo implements BaseData {public String getName(){return "DataTwo";}
}

最后再创建一个代理类

@Component
public class PoxyData {Random random = new Random();@Autowired@Qualifier("DataOne")BaseData DataOne;@Autowired@Qualifier("DataTwo")BaseData DataTwo;public BaseData getData(){List<BaseData> baseDataList = new ArrayList<>();baseDataList.add(DataOne);baseDataList.add(DataTwo);int index =  random.nextInt(2);return baseDataList.get(index);}}

最后是调用

@RestController
public class TestController {@AutowiredPoxyData poxyData;@GetMapping("/test1")public String testClient1() {return poxyData.getData().getName();}
}

最后看一下运行结果

这里可以看到大概的功能已经实现了

通过一个代理类去封装里面业务实现的细节的,然后对外只暴露一代理类,跟据需求去里面取对应的实现类就行了。

然后你以为这样子就可以吗?图样图森破,细心的同学可能已经发现了

没错,就是他,这是不是意味着,如果有多个业务的话,就要写多个属性??这对于这么懒的小编来说,是不可以接受的

于是,屁颠屁颠的跑去跟小组长求救,于是乎有了改良版


@Component
public class PoxyData  implements BeanPostProcessor {Random random = new Random();List<BaseData> baseDataList = new ArrayList<>();
//    @Autowired
//    @Qualifier("DataOne")
//    BaseData DataOne;
//
//    @Autowired
//    @Qualifier("DataTwo")
//    BaseData DataTwo;@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {if (bean instanceof BaseData) {baseDataList.add((BaseData) bean);}return bean;}public BaseData getData(){int index =  random.nextInt(2);return baseDataList.get(index);}}

通过继承BeanPostProcessor ,然后他的 postProcessAfterInitialization方法里面把BaseData的子类全部放到集合中,

对于BeanPostProcessor不了解的同学,可以点这里去了解一下

就此,可以实现boss提出的功能啦!想想还是蛮开心的啦

这篇关于2019.08.15日记,记录一次多个业务并行运行的思路的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1069675

相关文章

国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)

《国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)》本文给大家利用deepseek模型搭建私有知识问答库的详细步骤和遇到的问题及解决办法,感兴趣的朋友一起看看吧... 目录1. 第1步大家在安装完ollama后,需要到系统环境变量中添加两个变量2. 第3步 “在cmd中

在VSCode中本地运行DeepSeek的流程步骤

《在VSCode中本地运行DeepSeek的流程步骤》本文详细介绍了如何在本地VSCode中安装和配置Ollama和CodeGPT,以使用DeepSeek进行AI编码辅助,无需依赖云服务,需要的朋友可... 目录步骤 1:在 VSCode 中安装 Ollama 和 CodeGPT安装Ollama下载Olla

Java之并行流(Parallel Stream)使用详解

《Java之并行流(ParallelStream)使用详解》Java并行流(ParallelStream)通过多线程并行处理集合数据,利用Fork/Join框架加速计算,适用于大规模数据集和计算密集... 目录Java并行流(Parallel Stream)1. 核心概念与原理2. 创建并行流的方式3. 适

解读docker运行时-itd参数是什么意思

《解读docker运行时-itd参数是什么意思》在Docker中,-itd参数组合用于在后台运行一个交互式容器,同时保持标准输入和分配伪终端,这种方式适合需要在后台运行容器并保持交互能力的场景... 目录docker运行时-itd参数是什么意思1. -i(或 --interactive)2. -t(或 --

Spring Retry 实现乐观锁重试实践记录

《SpringRetry实现乐观锁重试实践记录》本文介绍了在秒杀商品SKU表中使用乐观锁和MybatisPlus配置乐观锁的方法,并分析了测试环境和生产环境的隔离级别对乐观锁的影响,通过简单验证,... 目录一、场景分析 二、简单验证 2.1、可重复读 2.2、读已提交 三、最佳实践 3.1、配置重试模板

在 Spring Boot 中使用异步线程时的 HttpServletRequest 复用问题记录

《在SpringBoot中使用异步线程时的HttpServletRequest复用问题记录》文章讨论了在SpringBoot中使用异步线程时,由于HttpServletRequest复用导致... 目录一、问题描述:异步线程操作导致请求复用时 Cookie 解析失败1. 场景背景2. 问题根源二、问题详细分

pycharm远程连接服务器运行pytorch的过程详解

《pycharm远程连接服务器运行pytorch的过程详解》:本文主要介绍在Linux环境下使用Anaconda管理不同版本的Python环境,并通过PyCharm远程连接服务器来运行PyTorc... 目录linux部署pytorch背景介绍Anaconda安装Linux安装pytorch虚拟环境安装cu

Python自动化办公之合并多个Excel

《Python自动化办公之合并多个Excel》在日常的办公自动化工作中,尤其是处理大量数据时,合并多个Excel表格是一个常见且繁琐的任务,下面小编就来为大家介绍一下如何使用Python轻松实现合... 目录为什么选择 python 自动化目标使用 Python 合并多个 Excel 文件安装所需库示例代码

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D