需求:在一个应用的开发过程中,将应用一步步推至不同的节点,最终推至上线节点
功能:将迭代阶段推进到下一阶段,根据下一阶段不同,做不同处理
解析:进入下一阶段 /rleaseProcess/turnNext.json
下一状态是:
dev:
1),调用node接口,触发打包。node回调更新应用地址
2),调用我们stable 同步服务配置,同步页面配置接口。
3),同步完成后,更新迭代stage
sit:
1),同步迭代信息
2),更新迭代stage
pre:
1),触发审批流,更新审批流表
2),审批完成后,回调时更新迭代stage
online:
加事务:
1),将当前Online更新为Offline
2),将新的更新为Online,同时更新上次迭代字段,用于回滚时使用
其他:
只更新迭代状态
代码:
1、xml中配置流程推进处理器
<!-- 迭代流程推进处理器 -->
<bean id="ReleaseProcessService"
class="com.mybank.bketensdp.biz.share.service.ReleaseProcessServiceImpl">
<property name="turnNextProcessorMap">
<map>
<entry key="DEV" value-ref="devTurnNextProcessor"/>
<entry key="SIT" value-ref="sitTurnNextProcessor"/>
<entry key="PRE" value-ref="preTurnNextProcessor"/>
<entry key="GRAY" value-ref="defaultTurnNextProcessor"/>
<entry key="ONLINE" value-ref="onlineTurnNextProcessor"/>
<entry key="STABLE" value-ref="defaultTurnNextProcessor"/>
</map>
</property>
</bean>
2、接口
public interface ReleaseProcessService {
/**
* 发布状态推进
* @param releaseOrder
*/
void turnNext(ReleaseOrder releaseOrder);
}
@Service
public class ReleaseProcessServiceImpl implements ReleaseProcessService {
private Map<String, AbstractTurnNextProcessor> turnNextProcessorMap;
@Override
public void turnNext(ReleaseOrder releaseOrder) {
// 根据参数releaseOrder获取不同的key
String key = "DEV"
// 根据xml中的key获取相应处理器, 不存在报错
AbstractTurnNextProcessor processor = turnNextProcessorMap.get(key);
// 执行处理
processor.doTrunNext(releaseOrder);
}
/**
* Getter method for property <tt>turnNextProcessorMap</tt>.
*
* @return property value of turnNextProcessorMap
*/
public Map<String, AbstractTurnNextProcessor> getTurnNextProcessorMap() {
return turnNextProcessorMap;
}
/**
* Setter method for property <tt>turnNextProcessorMap</tt>.
*
* @param turnNextProcessorMap value to be assigned to property turnNextProcessorMap
*/
public void setTurnNextProcessorMap(
Map<String, AbstractTurnNextProcessor> turnNextProcessorMap) {
this.turnNextProcessorMap = turnNextProcessorMap;
}
}
3、推进器接口
public abstract class AbstractTurnNextProcessor {
public abstract void doTrunNext(ReleaseOrder releaseOrder);
}
DefaultTurnNextProcessor
public class DefaultTurnNextProcessor extends AbstractTurnNextProcessor {
@Override
public void doTrunNext(ReleaseOrder releaseOrder) {
// TODO 更新迭代stage
}
}
DevTurnNextProcessor
public class DevTurnNextProcessor extends AbstractTurnNextProcessor {
@Override
public void doTrunNext(ReleaseOrder releaseOrder) {
// 调用node
//打包
//更新地址
//更新迭代stage
}
}
OnlineTurnNextProcessor
public class OnlineTurnNextProcessor extends AbstractTurnNextProcessor {
@Override
public void doTrunNext(ReleaseOrder releaseOrder) {
// TODO
}
}
目录:
推荐文档:https://blog.youkuaiyun.com/zzti_erlie/article/details/102988486