­

docker部署xxl-job 通用反射执行器

  • 2019 年 10 月 3 日
  • 筆記

??

????????job???????spring boot???????????
?????????????????????????cron???->??git->jenkins????

????

???????????????????????????????xxl-job?????????????????RPC???????spring boot???

??

???????????sql
??docker???? ???????2.0.2

docker pull xuxueli/xxl-job-admin:2.0.2

????docker?? ??????

docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://?????:3306/xxl-job?Unicode=true&characterEncoding=UTF-8 --spring.datasource.password=????? --spring.mail.host=smtp.163.com --spring.mail.username=??? --spring.mail.password=???? --xxl.job.login.password=????" -p 8080:8080 -v /tmp:/data/applogs --name xxl-job-admin --privileged=true  -d xuxueli/xxl-job-admin:2.0.2

?????????????

??????

????????????spring boot??

@Configuration  public class XxlJobConfig {      private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);        @Value("${xxl.job.admin.addresses}")      private String adminAddresses;        @Value("${xxl.job.executor.appname}")      private String appName;        @Value("${xxl.job.executor.ip}")      private String ip;        @Value("${xxl.job.executor.port}")      private int port;        @Value("${xxl.job.accessToken}")      private String accessToken;        @Value("${xxl.job.executor.logpath}")      private String logPath;        @Value("${xxl.job.executor.logretentiondays}")      private int logRetentionDays;          @Bean(initMethod = "start", destroyMethod = "destroy")      public XxlJobSpringExecutor xxlJobExecutor() {          logger.info(">>>>>>>>>>> xxl-job config init.");          XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();          xxlJobSpringExecutor.setAdminAddresses(adminAddresses);          xxlJobSpringExecutor.setAppName(appName);          xxlJobSpringExecutor.setIp(ip);          xxlJobSpringExecutor.setPort(port);          xxlJobSpringExecutor.setAccessToken(accessToken);          xxlJobSpringExecutor.setLogPath(logPath);          xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);            return xxlJobSpringExecutor;      }  }

????????????

### ????????? [??]???????????????????????????????????"???????"?"??????"???????????  xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin    ### ???AppName [??]??????????????????????  xxl.job.executor.appname=xxl-job-executor-sample    ### ???IP [??]???????????IP????????????IP??IP????Host?????????????? "?????" ? "???????????"?  xxl.job.executor.ip=    ### ?????? [??]?????0???????????9999?????????????????????????  xxl.job.executor.port=9999    ### ?????TOKEN [??]???????  xxl.job.accessToken=    ### ??????????????? [??] ????????????????????????  xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler    ### ????????? [??] ????3?????????Log???????????????  xxl.job.executor.logretentiondays=-1

???

???????????????????????????????????????????????????????????????????????????
????????????????

@Component  @JobHandler(value = "BeanByClassHandler")  public class BeanByClassHandler extends IJobHandler {      @Autowired      private ApplicationContext applicationContext;        //?????? ??????????      @Override      public ReturnT<String> execute(String param) throws Exception {          XxlJobLogger.log(param);          if (param == null || param.equals("")) {              return new ReturnT<>(ReturnT.FAIL_CODE, "???????");          }          String[] split = param.split(",");          if (split == null || split.length < 2) {              return new ReturnT<>(ReturnT.FAIL_CODE, "????????? ????,???");          }          Class taskBeanClass = null;          try {              taskBeanClass = Class.forName(split[0]);          } catch (Exception e) {              return new ReturnT<>(ReturnT.FAIL_CODE, "?" + split[0] + "???");          }          Method method = null;          try {              method = taskBeanClass.getMethod(split[1]);          } catch (Exception e) {              return new ReturnT<>(ReturnT.FAIL_CODE, "??" + split[1] + "???");          }          Object o = applicationContext.getBean(taskBeanClass);          if (o == null) {              return new ReturnT<>(ReturnT.FAIL_CODE, "?Application?????");          }          try {              method.invoke(o);          } catch (Exception e) {              return new ReturnT<>(ReturnT.FAIL_CODE, "??????");          }          return new ReturnT<>(ReturnT.SUCCESS_CODE, "????");        }  }

?????????????spring??beanName????????

@Component  @JobHandler(value = "BeanByNameHandler")  public class BeanByNameHandler extends IJobHandler {      @Autowired      private ApplicationContext applicationContext;      //??spring???bean name?????      @Override      public ReturnT<String> execute(String param) throws Exception {          XxlJobLogger.log(param);          if (param == null || param.equals("")) {              return new ReturnT<>(ReturnT.FAIL_CODE, "???????");          }          String[] split = param.split(",");          if (split == null || split.length < 2) {              return new ReturnT<>(ReturnT.FAIL_CODE, "?????????bean??,???");          }          Object o = applicationContext.getBean(split[0]);          if(o == null){              return new ReturnT<>(ReturnT.FAIL_CODE,"??applicationContext????");          }          Method method;          try {              method = o.getClass().getMethod(split[1]);          }catch (Exception e){              return new ReturnT<>(ReturnT.FAIL_CODE,"??"+split[1]+"???");          }          try {              method.invoke(o);          }catch (Exception e){              return new ReturnT<>(ReturnT.FAIL_CODE,"??????");          }          return new ReturnT<>(ReturnT.SUCCESS_CODE,"??job??");      }  }

??

?web?????? ??? ???,???????????

???????shell??

??

  1. xxl-job???mysql?????????Oracle ??docker??????mysql???
  2. xxl-job??2.0.2??????????????