【xxl-job】源码中策略模式的使用

发布于:2024-08-13 ⋅ 阅读:(132) ⋅ 点赞:(0)

使用到了工厂枚举,抽象策略类以及具体策略类

1、ExecutorRouteStrategyEnum 工厂枚举类

public enum ExecutorRouteStrategyEnum {

    FIRST(I18nUtil.getString("jobconf_route_first"), new ExecutorRouteFirst()),
    LAST(I18nUtil.getString("jobconf_route_last"), new ExecutorRouteLast()),
    此处省略部分策略枚举......
    SHARDING_BROADCAST(I18nUtil.getString("jobconf_route_shard"), null);

    ExecutorRouteStrategyEnum(String title, ExecutorRouter router) {
        this.title = title;
        this.router = router;
    }

    private String title;
    private ExecutorRouter router;

    省略部分代码......

    //匹配策略方法
    public static ExecutorRouteStrategyEnum match(String name, ExecutorRouteStrategyEnum defaultItem){
        if (name != null) {
            for (ExecutorRouteStrategyEnum item: ExecutorRouteStrategyEnum.values()) {
                if (item.name().equals(name)) {
                    return item;
                }
            }
        }
        return defaultItem;
    }
}

2、策略类

例如

public class ExecutorRouteFirst extends ExecutorRouter {

    @Override
    public ReturnT<String> route(TriggerParam triggerParam, List<String> addressList){
        return new ReturnT<String>(addressList.get(0));
    }

}

3、使用

ExecutorRouteStrategyEnum executorRouteStrategyEnum = ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null);    // route strategy

详细使用看源码......

ReturnT<String> routeAddressResult = executorRouteStrategyEnum.getRouter().route(triggerParam, group.getRegistryList());


网站公告

今日签到

点亮在社区的每一天
去签到