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

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

跨系统环境下LabVIEW程序稳定运行

在LabVIEW开发中,不同电脑的配置和操作系统(如Win11与Win7)可能对程序的稳定运行产生影响。为了确保程序在不同平台上都能正常且稳定运行,需要从兼容性、驱动、以及性能优化等多个方面入手。本文将详细介绍如何在不同系统环境下,使LabVIEW开发的程序保持稳定运行的有效策略。 LabVIEW版本兼容性 LabVIEW各版本对不同操作系统的支持存在差异。因此,在开发程序时,尽量使用

业务协同平台--简介

一、使用场景         1.多个系统统一在业务协同平台定义协同策略,由业务协同平台代替人工完成一系列的单据录入         2.同时业务协同平台将执行任务推送给pda、pad等执行终端,通知各人员、设备进行作业执行         3.作业过程中,可设置完成时间预警、作业节点通知,时刻了解作业进程         4.做完再给你做过程分析,给出优化建议         就问你这一套下

三相直流无刷电机(BLDC)控制算法实现:BLDC有感启动算法思路分析

一枚从事路径规划算法、运动控制算法、BLDC/FOC电机控制算法、工控、物联网工程师,爱吃土豆。如有需要技术交流或者需要方案帮助、需求:以下为联系方式—V 方案1:通过霍尔传感器IO中断触发换相 1.1 整体执行思路 霍尔传感器U、V、W三相通过IO+EXIT中断的方式进行霍尔传感器数据的读取。将IO口配置为上升沿+下降沿中断触发的方式。当霍尔传感器信号发生发生信号的变化就会触发中断在中断

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓