本文主要是介绍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日记,记录一次多个业务并行运行的思路的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!