首页 > 其他分享 >Solon2 开发之容器,六、提取 Bean 的函数进行定制开发

Solon2 开发之容器,六、提取 Bean 的函数进行定制开发

时间:2023-02-12 22:13:07浏览次数:41  
标签:提取 log 分片 XxlJobHelper Bean 开发 Solon2 XxlJob

为什么需要提取Bean的函数?绝不是闲得淡疼。比如:控制器的@Mapping;再比如:Xxl-Job的@XxlJob。这些都是要提取Bean的函数并定制加工的。

1、比如提取 @XxlJob 注解的函数,并注册到执行器

对Xxl-Job框架来说@XxlJob注解是已经存在的。适配,只需要注册一个Bean提取器即可:

注解类:

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface XxlJob {
    String value();
    String init() default "";
    String destroy() default "";
}

注解类对应的能力注册:

 Solon.context().beanExtractorAdd(XxlJob.class, (bw, method, anno)->{
    //简单写下,以示意这个特性...
    //
    String name = anno.value();
    IJobHandler handler = new MethodJobHandler(bw.raw(), method, null, null);
    
    XxlJobExecutor.registJobHandler(name, handler);
 });

一顿简单操作,Bean里的函数已经变成Xxx-Job里job了。

2、应用

@Component
public class SampleXxlJob {
    /**
     * 1、简单任务示例(Bean模式)
     */
    @XxlJob("demoJobHandler")
    public void demoJobHandler() throws Exception {
        XxlJobHelper.log("XXL-JOB, Hello World.");

        for (int i = 0; i < 5; i++) {
            XxlJobHelper.log("beat at:" + i);
            TimeUnit.SECONDS.sleep(2);
        }
        // default success
    }


    /**
     * 2、分片广播任务
     */
    @XxlJob("shardingJobHandler")
    public void shardingJobHandler() throws Exception {

        // 分片参数
        int shardIndex = XxlJobHelper.getShardIndex();
        int shardTotal = XxlJobHelper.getShardTotal();

        XxlJobHelper.log("分片参数:当前分片序号 = {}, 总分片数 = {}", shardIndex, shardTotal);

        // 业务逻辑
        for (int i = 0; i < shardTotal; i++) {
            if (i == shardIndex) {
                XxlJobHelper.log("第 {} 片, 命中分片开始处理", i);
            } else {
                XxlJobHelper.log("第 {} 片, 忽略", i);
            }
        }

    }
}

如果你不喜欢这个注解,也可以很快换成像:@CloudJob。通过提取器,将Method注册到它的执行器里就OK。

标签:提取,log,分片,XxlJobHelper,Bean,开发,Solon2,XxlJob
From: https://www.cnblogs.com/noear/p/17114836.html

相关文章

  • Solon2 开发之容器,七、切面与函数环绕拦截
    想要环绕拦截一个Bean的函数。需要三个前置条件:通过注解做为“切点”,进行拦截(不能无缘无故给拦了吧?费性能)Bean的method是被代理的在Bean被扫描之前,完成环绕拦截......
  • Solon2 开发之容器,八、动态代理的本质
    在Java里动态代理,主要分:接口动态代理和类动态代理。因为它的代理类都是动态创建的,所以名字里会带上“动态”。官网的有些地方叫“代理”,也有些地方叫“动态代理”。都......
  • Solon2 开发之容器,三、注入或手动获取 Bean
    1、如何注入Bean?先了解一下Bean生命周期的简化版:运行构建函数尝试字段注入(有时同步注入,没时订阅注入。不会有相互依赖而卡住的问题)@Init函数(是在容器初始化完成后才......
  • Solon2 开发之容器,四、注入依赖与初始化
    Solon强调有克制的注入+手动控制结合的模式。好处是,代码用料少、启动快。Bean的关键生命节点:节点说明1.Constructor(构造方法)不支持参数注入2.@In......
  • Solon2 开发之容器,一、注入或手动获取配置
    约定resources/app.yml(或app.properties)#为应用配置文件配置样例track:name:xxxurl:http://a.a.adb1:jdbcUrl:"jdbc:mysql://..."username:......
  • Solon2 开发之容器,二、构建一个 Bean 的三种方式
    1、手动简单的构建://生成普通的BeanSolon.context().wrapAndPut(UserService.class,newUserServiceImpl());//生成带注解的Bean(比如:@Controller)Solon.context().be......
  • Bean的拓展和应用
    一.Bean的作用域1.单例模式(spring的默认机制,即拿相同的bean的时候对象都是相同的,不会造成资源浪费)<beanid="user"class="top.lostyou.pojo.user"p:name="jay周"p:se......
  • 基于Django开发的小型超市收银系统及各种炒股指标信息
    登录页面注册修改密码诗词推荐背景刷新更换登录 首页今日收益金额日收益折线图商品热度排行商品预警信息今日待办任务诗词推荐      ......
  • 上门技s端H5小程序开发
    上门技师端H5小程序开发莎士比亚说过一句富有哲理的话,人的一生是短的,但如果卑劣地过这一生,就太长了。带着这句话,我们还要更加慎重的审视这个问题:所谓上门技师端H5小程......
  • 022_第三方 bean 属性绑定
    @ConfigurationProperties使用 @ConfigurationProperties为第三方bean绑定属性:    解除使用@ConfigurationProperties注释警告:    @EnableConf......