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

相关文章

mysqld_multi在Linux服务器上运行多个MySQL实例

《mysqld_multi在Linux服务器上运行多个MySQL实例》在Linux系统上使用mysqld_multi来启动和管理多个MySQL实例是一种常见的做法,这种方式允许你在同一台机器上运行多个... 目录1. 安装mysql2. 配置文件示例配置文件3. 创建数据目录4. 启动和管理实例启动所有实例

IDEA运行spring项目时,控制台未出现的解决方案

《IDEA运行spring项目时,控制台未出现的解决方案》文章总结了在使用IDEA运行代码时,控制台未出现的问题和解决方案,问题可能是由于点击图标或重启IDEA后控制台仍未显示,解决方案提供了解决方法... 目录问题分析解决方案总结问题js使用IDEA,点击运行按钮,运行结束,但控制台未出现http://

解决Spring运行时报错:Consider defining a bean of type ‘xxx.xxx.xxx.Xxx‘ in your configuration

《解决Spring运行时报错:Considerdefiningabeanoftype‘xxx.xxx.xxx.Xxx‘inyourconfiguration》该文章主要讲述了在使用S... 目录问题分析解决方案总结问题Description:Parameter 0 of constructor in x

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

将sqlserver数据迁移到mysql的详细步骤记录

《将sqlserver数据迁移到mysql的详细步骤记录》:本文主要介绍将SQLServer数据迁移到MySQL的步骤,包括导出数据、转换数据格式和导入数据,通过示例和工具说明,帮助大家顺利完成... 目录前言一、导出SQL Server 数据二、转换数据格式为mysql兼容格式三、导入数据到MySQL数据

Python判断for循环最后一次的6种方法

《Python判断for循环最后一次的6种方法》在Python中,通常我们不会直接判断for循环是否正在执行最后一次迭代,因为Python的for循环是基于可迭代对象的,它不知道也不关心迭代的内部状态... 目录1.使用enuhttp://www.chinasem.cnmerate()和len()来判断for

关于rpc长连接与短连接的思考记录

《关于rpc长连接与短连接的思考记录》文章总结了RPC项目中长连接和短连接的处理方式,包括RPC和HTTP的长连接与短连接的区别、TCP的保活机制、客户端与服务器的连接模式及其利弊分析,文章强调了在实... 目录rpc项目中的长连接与短连接的思考什么是rpc项目中的长连接和短连接与tcp和http的长连接短

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3