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??
??
- xxl-job???mysql?????????Oracle ??docker??????mysql???
- xxl-job??2.0.2??????????????