├── README.md ├── lts-example-jobclient ├── lts-example-jobclient-java │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── ltsopensource │ │ │ └── example │ │ │ └── java │ │ │ ├── JobCompletedHandlerImpl.java │ │ │ ├── Main.java │ │ │ └── TestSubmit.java │ │ └── resources │ │ ├── log4j.properties │ │ └── lts.properties ├── lts-example-jobclient-spring-annotation │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── ltsopensource │ │ │ └── example │ │ │ ├── JobClientConfig.java │ │ │ ├── JobCompletedHandlerImpl.java │ │ │ └── Main.java │ │ └── resources │ │ ├── log4j.properties │ │ ├── lts-jobclient.xml │ │ └── lts.properties ├── lts-example-jobclient-spring-xml │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── ltsopensource │ │ │ └── example │ │ │ └── spring │ │ │ ├── JobCompletedHandlerImpl.java │ │ │ └── Main.java │ │ └── resources │ │ ├── log4j.properties │ │ ├── lts-jobclient.xml │ │ └── lts.properties ├── lts-example-jobclient-springboot │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── ltsopensource │ │ │ └── example │ │ │ └── springboot │ │ │ ├── Application.java │ │ │ ├── JobClientReferenceBean.java │ │ │ ├── JobCompletedHandlerImpl.java │ │ │ └── MasterNodeChangeListener.java │ │ └── resources │ │ ├── application.properties │ │ └── log4j.properties └── pom.xml ├── lts-example-jobtracker ├── lts-example-jobtracker-java │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── ltsopensource │ │ │ └── example │ │ │ └── java │ │ │ └── Main.java │ │ └── resources │ │ ├── log4j.properties │ │ └── lts.properties ├── lts-example-jobtracker-spring-annotaion │ ├── lts-example-jobtracker-spring-annotaion.iml │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── ltsopensource │ │ │ └── example │ │ │ ├── JobTrackerConfig.java │ │ │ └── Main.java │ │ └── resources │ │ ├── log4j.properties │ │ ├── lts-jobtracker.xml │ │ └── lts.properties ├── lts-example-jobtracker-spring-xml │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── ltsopensource │ │ │ └── example │ │ │ └── spring │ │ │ └── Main.java │ │ └── resources │ │ ├── log4j.properties │ │ └── lts-jobtracker.xml ├── lts-example-jobtracker-springboot │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── ltsopensource │ │ │ └── example │ │ │ └── springboot │ │ │ ├── Application.java │ │ │ └── MasterNodeChangeListener.java │ │ └── resources │ │ ├── application.properties │ │ └── log4j.properties └── pom.xml ├── lts-example-monitor ├── lts-example-monitor-springboot │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── ltsopensource │ │ │ └── example │ │ │ └── springboot │ │ │ └── Application.java │ │ └── resources │ │ ├── application.properties │ │ └── log4j.properties └── pom.xml ├── lts-example-quartz ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── ltsopensource │ │ └── example │ │ ├── Main.java │ │ ├── QuartzTest.java │ │ └── QuartzTestJob.java │ └── resources │ ├── log4j.properties │ ├── lts-quartz.xml │ └── lts.properties ├── lts-example-tasktracker ├── lts-example-tasktarcker-springboot │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── ltsopensource │ │ │ └── example │ │ │ └── springboot │ │ │ ├── Application.java │ │ │ ├── JobRunnerImpl.java │ │ │ └── MasterNodeChangeListener.java │ │ └── resources │ │ ├── application.properties │ │ └── log4j.properties ├── lts-example-tasktracker-java │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── ltsopensource │ │ │ └── example │ │ │ └── java │ │ │ ├── Main.java │ │ │ └── TestJobRunner.java │ │ └── resources │ │ ├── log4j.properties │ │ └── lts.properties ├── lts-example-tasktracker-spring-annotation-shard │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── ltsopensource │ │ │ └── example │ │ │ ├── JobScheduler.java │ │ │ ├── JobScheduler2.java │ │ │ ├── Main.java │ │ │ └── SpringBean.java │ │ └── resources │ │ ├── log4j.properties │ │ └── lts-tasktracker-shard-annotaion.xml ├── lts-example-tasktracker-spring-annotation │ ├── lts-example-tasktracker-spring-annotation.iml │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── ltsopensource │ │ │ └── example │ │ │ ├── Main.java │ │ │ ├── SpringAnnotationJobRunner.java │ │ │ ├── SpringBean.java │ │ │ └── TaskTrackerConfig.java │ │ └── resources │ │ ├── log4j.properties │ │ ├── lts-tasktracker.xml │ │ └── lts.properties ├── lts-example-tasktracker-spring-xml-shard │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── ltsopensource │ │ │ └── example │ │ │ ├── Main.java │ │ │ ├── SpringBean.java │ │ │ └── XmlJobScheduler.java │ │ └── resources │ │ ├── log4j.properties │ │ └── lts-tasktracker-shard-xml.xml ├── lts-example-tasktracker-spring-xml │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── ltsopensource │ │ │ └── example │ │ │ └── spring │ │ │ ├── Main.java │ │ │ ├── SpringAnnotationJobRunner.java │ │ │ └── SpringBean.java │ │ └── resources │ │ ├── log4j.properties │ │ └── lts-tasktracker.xml ├── lts-example-tasktracker-springboot-shard │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── ltsopensource │ │ │ └── example │ │ │ ├── Application.java │ │ │ ├── JobScheduler.java │ │ │ ├── JobScheduler2.java │ │ │ └── SpringBean.java │ │ └── resources │ │ ├── application.properties │ │ └── log4j.properties ├── lts-example-tasktracker-tester │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── github │ │ └── ltsopensource │ │ └── example │ │ ├── TestJobRunner.java │ │ └── TestJobRunnerTester.java └── pom.xml └── pom.xml /README.md: -------------------------------------------------------------------------------- 1 | # lts-examples 2 | -------------------------------------------------------------------------------- /lts-example-jobclient/lts-example-jobclient-java/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | lts-example-jobclient 7 | com.github.ltsopensource 8 | 1.7.2-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | lts-example-jobclient-java 13 | 14 | 15 | -------------------------------------------------------------------------------- /lts-example-jobclient/lts-example-jobclient-java/src/main/java/com/github/ltsopensource/example/java/JobCompletedHandlerImpl.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example.java; 2 | 3 | import com.github.ltsopensource.core.commons.utils.CollectionUtils; 4 | import com.github.ltsopensource.core.domain.JobResult; 5 | import com.github.ltsopensource.jobclient.support.JobCompletedHandler; 6 | 7 | import java.text.SimpleDateFormat; 8 | import java.util.Date; 9 | import java.util.List; 10 | 11 | /** 12 | * @author Robert HG (254963746@qq.com) on 4/17/16. 13 | */ 14 | public class JobCompletedHandlerImpl implements JobCompletedHandler { 15 | 16 | @Override 17 | public void onComplete(List jobResults) { 18 | // 任务执行反馈结果处理 19 | if (CollectionUtils.isNotEmpty(jobResults)) { 20 | for (JobResult jobResult : jobResults) { 21 | System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + " 任务执行完成:" + jobResult); 22 | } 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /lts-example-jobclient/lts-example-jobclient-java/src/main/java/com/github/ltsopensource/example/java/Main.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example.java; 2 | 3 | import com.github.ltsopensource.core.commons.utils.DateUtils; 4 | import com.github.ltsopensource.core.domain.Job; 5 | import com.github.ltsopensource.jobclient.JobClient; 6 | import com.github.ltsopensource.jobclient.JobClientBuilder; 7 | import com.github.ltsopensource.jobclient.domain.Response; 8 | 9 | import java.util.Date; 10 | 11 | /** 12 | * @author Robert HG (254963746@qq.com) on 4/17/16. 13 | */ 14 | public class Main { 15 | 16 | public static void main(String[] args) { 17 | 18 | // 方式1 19 | // JobClient jobClient = new RetryJobClient(); 20 | // jobClient.setNodeGroup("test_jobClient"); 21 | // jobClient.setClusterName("test_cluster"); 22 | // jobClient.setRegistryAddress("zookeeper://127.0.0.1:2181"); 23 | // jobClient.setJobCompletedHandler(new JobCompletedHandlerImpl()); 24 | // jobClient.addConfig("job.fail.store", "mapdb"); 25 | // jobClient.start(); 26 | 27 | // 方式2 28 | JobClient jobClient = new JobClientBuilder() 29 | .setPropertiesConfigure("lts.properties") 30 | .setJobCompletedHandler(new JobCompletedHandlerImpl()) 31 | .build(); 32 | 33 | jobClient.start(); 34 | 35 | submitCronJob(jobClient); 36 | submitRepeatJob(jobClient); 37 | submitRealtimeJob(jobClient); 38 | submitTriggerTimeJob(jobClient); 39 | } 40 | 41 | private static void submitCronJob(JobClient jobClient) { 42 | Job job = new Job(); 43 | job.setTaskId("t_cron_555"); 44 | job.setParam("shopId", "1122222221"); 45 | job.setTaskTrackerNodeGroup("test_trade_TaskTracker"); // 执行要执行该任务的taskTracker的节点组名称 46 | job.setNeedFeedback(true); 47 | job.setReplaceOnExist(true); // 当任务队列中存在这个任务的时候,是否替换更新 48 | job.setCronExpression("0 0/1 * * * ?"); 49 | Response response = jobClient.submitJob(job); 50 | System.out.println(response); 51 | } 52 | 53 | private static void submitRepeatJob(JobClient jobClient) { 54 | Job job = new Job(); 55 | job.setTaskId("t_repeat_555"); 56 | job.setParam("shopId", "1122222221"); 57 | job.setTaskTrackerNodeGroup("test_trade_TaskTracker"); 58 | job.setNeedFeedback(true); 59 | job.setReplaceOnExist(true); // 当任务队列中存在这个任务的时候,是否替换更新 60 | job.setRepeatCount(50); // 一共执行50次 61 | job.setRepeatInterval(50 * 1000L); // 50s 执行一次 62 | Response response = jobClient.submitJob(job); 63 | System.out.println(response); 64 | } 65 | 66 | private static void submitRealtimeJob(JobClient jobClient) { 67 | Job job = new Job(); 68 | job.setTaskId("t_realtime_555"); 69 | job.setParam("shopId", "1122222221"); 70 | job.setTaskTrackerNodeGroup("test_trade_TaskTracker"); 71 | job.setNeedFeedback(true); 72 | job.setReplaceOnExist(true); // 当任务队列中存在这个任务的时候,是否替换更新 73 | Response response = jobClient.submitJob(job); 74 | System.out.println(response); 75 | } 76 | 77 | private static void submitTriggerTimeJob(JobClient jobClient) { 78 | Job job = new Job(); 79 | job.setTaskId("t_trigger_time_555"); 80 | job.setParam("shopId", "1122222221"); 81 | job.setTaskTrackerNodeGroup("test_trade_TaskTracker"); 82 | job.setNeedFeedback(true); 83 | job.setReplaceOnExist(true); // 当任务队列中存在这个任务的时候,是否替换更新 84 | job.setTriggerTime(DateUtils.addHour(new Date(), 1).getTime()); // 1 小时之后执行 85 | Response response = jobClient.submitJob(job); 86 | System.out.println(response); 87 | } 88 | 89 | } 90 | -------------------------------------------------------------------------------- /lts-example-jobclient/lts-example-jobclient-java/src/main/java/com/github/ltsopensource/example/java/TestSubmit.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example.java; 2 | 3 | import com.github.ltsopensource.core.commons.utils.StringUtils; 4 | import com.github.ltsopensource.core.domain.Job; 5 | import com.github.ltsopensource.core.exception.JobSubmitException; 6 | import com.github.ltsopensource.jobclient.JobClient; 7 | import com.github.ltsopensource.jobclient.JobClientBuilder; 8 | import com.github.ltsopensource.jobclient.domain.Response; 9 | 10 | import java.io.BufferedReader; 11 | import java.io.IOException; 12 | import java.io.InputStreamReader; 13 | import java.text.ParseException; 14 | import java.text.SimpleDateFormat; 15 | 16 | /** 17 | * Created by hugui.hg on 4/23/16. 18 | */ 19 | public class TestSubmit { 20 | 21 | static JobClient jobClient; 22 | 23 | public static void main(String[] args) throws IOException { 24 | // 方式2 25 | jobClient = new JobClientBuilder() 26 | .setPropertiesConfigure("lts.properties") 27 | .setJobCompletedHandler(new JobCompletedHandlerImpl()) 28 | .build(); 29 | 30 | jobClient.start(); 31 | 32 | startConsole(); 33 | } 34 | 35 | private static int mode = 2; 36 | 37 | public static void startConsole() throws IOException { 38 | 39 | BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in)); 40 | 41 | String help = "命令参数: \n" + 42 | "\t1:cronExpression模式,如 0 0/1 * * * ?(一分钟执行一次), \n\t2:指定时间模式 yyyy-MM-dd HH:mm:ss,在执行时间模式下,如果字符串now,表示立即执行 \n" + 43 | "\tquit:退出\n" + 44 | "\thelp:帮助"; 45 | System.out.println(help); 46 | System.out.println("指定时间模式:"); 47 | 48 | Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { 49 | @Override 50 | public void run() { 51 | jobClient.stop(); 52 | } 53 | })); 54 | 55 | String input; 56 | while (!"quit".equals(input = buffer.readLine())) { 57 | try { 58 | if ("now".equals(input)) { 59 | input = ""; 60 | } 61 | if ("help".equals(input)) { 62 | System.out.println(help); 63 | } else if ("1".equals(input)) { 64 | mode = 1; 65 | } else if ("2".equals(input)) { 66 | mode = 2; 67 | } else { 68 | if (mode == 1) { 69 | submitWithCronExpression(jobClient, input); 70 | } else if (mode == 2) { 71 | submitWithTrigger(jobClient, input); 72 | } 73 | } 74 | 75 | if (mode == 1) { 76 | System.out.print("cronExpression模式:"); 77 | } else if (mode == 2) { 78 | System.out.print("指定时间模式:"); 79 | } 80 | 81 | } catch (Exception e) { 82 | System.out.println("输入错误"); 83 | } 84 | } 85 | System.exit(0); 86 | } 87 | 88 | public static void submitWithCronExpression(final JobClient jobClient, String cronExpression) throws ParseException, JobSubmitException { 89 | Job job = new Job(); 90 | // 必填,尽量taskId 有一定规律性,能让自己识别 91 | job.setTaskId(StringUtils.generateUUID()); 92 | // 任务的参数,value必须为字符串 93 | job.setParam("shopId", "111"); 94 | // 执行节点的group名称 95 | job.setTaskTrackerNodeGroup("test_trade_TaskTracker"); 96 | // 是否接收执行反馈消息 jobClient.setJobFinishedHandler(new JobFinishedHandlerImpl()); 中接受 97 | job.setNeedFeedback(true); 98 | // 这个是 cron expression 和 quartz 一样,可选 99 | job.setCronExpression(cronExpression); 100 | // 这个是指定执行时间,可选 101 | // job.setTriggerTime(new Date()); 102 | // 当 cronExpression 和 triggerTime 都不设置的时候,默认是立即执行任务 103 | // response 返回提交成功还是失败 104 | Response response = jobClient.submitJob(job); 105 | 106 | 107 | System.out.println(response); 108 | } 109 | 110 | public static void submitWithTrigger(final JobClient jobClient, String triggerTime) throws ParseException, JobSubmitException { 111 | Job job = new Job(); 112 | job.setTaskId(StringUtils.generateUUID()); 113 | job.setParam("shopId", "111"); 114 | job.setMaxRetryTimes(5); 115 | job.setTaskTrackerNodeGroup("test_trade_TaskTracker"); 116 | job.setNeedFeedback(true); 117 | if (triggerTime != null && !"".equals(triggerTime.trim())) { 118 | job.setTriggerTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(triggerTime).getTime()); 119 | } 120 | Response response = jobClient.submitJob(job); 121 | System.out.println(response); 122 | } 123 | } 124 | -------------------------------------------------------------------------------- /lts-example-jobclient/lts-example-jobclient-java/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | 2 | log4j.rootLogger=INFO,stdout 3 | 4 | log4j.appender.stdout.Threshold=INFO 5 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 6 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 7 | log4j.appender.stdout.layout.ConversionPattern=%d [%t] (%F:%L) %-5p %c %x - %m%n -------------------------------------------------------------------------------- /lts-example-jobclient/lts-example-jobclient-java/src/main/resources/lts.properties: -------------------------------------------------------------------------------- 1 | lts.jobclient.cluster-name=test_cluster 2 | lts.jobclient.registry-address=zookeeper://127.0.0.1:2181 3 | lts.jobclient.node-group=test_jobClient 4 | lts.jobclient.use-retry-client=true 5 | lts.jobclient.configs.job.fail.store=mapdb 6 | 7 | 8 | #LTS.JOBCLIENT.CLUSTER-NAME=test_cluster 9 | #LTS.JOBCLIENT.REGISTRY-ADDRESS=zookeeper://127.0.0.1:2181 10 | #LTS.JOBCLIENT.NODE-GROUP=test_jobClient 11 | #LTS.JOBCLIENT.USE-RETRY-CLIENT=true 12 | #LTS.JOBCLIENT.CONFIGS.job.fail.store=mapdb 13 | -------------------------------------------------------------------------------- /lts-example-jobclient/lts-example-jobclient-spring-annotation/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | lts-example-jobclient 7 | com.github.ltsopensource 8 | 1.7.2-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | lts-example-jobclient-spring-annotation 13 | 14 | 15 | 16 | org.springframework 17 | spring-core 18 | ${springframework.version} 19 | 20 | 21 | org.springframework 22 | spring-beans 23 | ${springframework.version} 24 | 25 | 26 | org.springframework 27 | spring-context 28 | ${springframework.version} 29 | 30 | 31 | org.springframework 32 | spring-context-support 33 | ${springframework.version} 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /lts-example-jobclient/lts-example-jobclient-spring-annotation/src/main/java/com/github/ltsopensource/example/JobClientConfig.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example; 2 | 3 | import com.github.ltsopensource.jobclient.JobClient; 4 | import com.github.ltsopensource.spring.JobClientFactoryBean; 5 | import org.springframework.context.annotation.Bean; 6 | import org.springframework.context.annotation.Configuration; 7 | 8 | /** 9 | * @author Robert HG (254963746@qq.com) on 4/22/16. 10 | */ 11 | @Configuration 12 | public class JobClientConfig { 13 | 14 | @Bean(name = "jobClient") 15 | public JobClient getJobClient() throws Exception { 16 | JobClientFactoryBean factoryBean = new JobClientFactoryBean(); 17 | factoryBean.setLocations("lts.properties"); 18 | factoryBean.afterPropertiesSet(); 19 | factoryBean.start(); 20 | return factoryBean.getObject(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /lts-example-jobclient/lts-example-jobclient-spring-annotation/src/main/java/com/github/ltsopensource/example/JobCompletedHandlerImpl.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example; 2 | 3 | import com.github.ltsopensource.core.commons.utils.CollectionUtils; 4 | import com.github.ltsopensource.core.domain.JobResult; 5 | import com.github.ltsopensource.jobclient.support.JobCompletedHandler; 6 | 7 | import java.text.SimpleDateFormat; 8 | import java.util.Date; 9 | import java.util.List; 10 | 11 | /** 12 | * @author Robert HG (254963746@qq.com) on 4/17/16. 13 | */ 14 | public class JobCompletedHandlerImpl implements JobCompletedHandler { 15 | 16 | @Override 17 | public void onComplete(List jobResults) { 18 | // 任务执行反馈结果处理 19 | if (CollectionUtils.isNotEmpty(jobResults)) { 20 | for (JobResult jobResult : jobResults) { 21 | System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + " 任务执行完成:" + jobResult); 22 | } 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /lts-example-jobclient/lts-example-jobclient-spring-annotation/src/main/java/com/github/ltsopensource/example/Main.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example; 2 | 3 | import com.github.ltsopensource.core.domain.Job; 4 | import com.github.ltsopensource.jobclient.JobClient; 5 | import com.github.ltsopensource.jobclient.domain.Response; 6 | import org.springframework.context.ApplicationContext; 7 | import org.springframework.context.support.ClassPathXmlApplicationContext; 8 | 9 | /** 10 | * @author Robert HG (254963746@qq.com) on 4/22/16. 11 | */ 12 | public class Main { 13 | 14 | public static void main(String[] args) { 15 | ApplicationContext context = new ClassPathXmlApplicationContext("/lts-jobclient.xml"); 16 | 17 | JobClient jobClient = (JobClient) context.getBean("jobClient"); 18 | 19 | Job job = new Job(); 20 | job.setTaskId("t_realtime_5556666"); 21 | job.setParam("shopId", "1122222221"); 22 | job.setTaskTrackerNodeGroup("test_trade_TaskTracker"); 23 | job.setNeedFeedback(true); 24 | job.setReplaceOnExist(true); // 当任务队列中存在这个任务的时候,是否替换更新 25 | Response response = jobClient.submitJob(job); 26 | System.out.println(response); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /lts-example-jobclient/lts-example-jobclient-spring-annotation/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | 2 | log4j.rootLogger=INFO,stdout 3 | 4 | log4j.appender.stdout.Threshold=INFO 5 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 6 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 7 | log4j.appender.stdout.layout.ConversionPattern=%d [%t] (%F:%L) %-5p %c %x - %m%n -------------------------------------------------------------------------------- /lts-example-jobclient/lts-example-jobclient-spring-annotation/src/main/resources/lts-jobclient.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /lts-example-jobclient/lts-example-jobclient-spring-annotation/src/main/resources/lts.properties: -------------------------------------------------------------------------------- 1 | lts.jobclient.cluster-name=test_cluster 2 | lts.jobclient.registry-address=zookeeper://127.0.0.1:2181 3 | lts.jobclient.node-group=test_jobClient 4 | lts.jobclient.use-retry-client=true 5 | lts.jobclient.configs.job.fail.store=mapdb 6 | 7 | 8 | #LTS.JOBCLIENT.CLUSTER-NAME=test_cluster 9 | #LTS.JOBCLIENT.REGISTRY-ADDRESS=zookeeper://127.0.0.1:2181 10 | #LTS.JOBCLIENT.NODE-GROUP=test_jobClient 11 | #LTS.JOBCLIENT.USE-RETRY-CLIENT=true 12 | #LTS.JOBCLIENT.CONFIGS.job.fail.store=mapdb 13 | -------------------------------------------------------------------------------- /lts-example-jobclient/lts-example-jobclient-spring-xml/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | lts-example-jobclient 7 | com.github.ltsopensource 8 | 1.7.2-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | lts-example-jobclient-spring-xml 13 | 14 | 15 | 16 | org.springframework 17 | spring-core 18 | ${springframework.version} 19 | 20 | 21 | org.springframework 22 | spring-beans 23 | ${springframework.version} 24 | 25 | 26 | org.springframework 27 | spring-context 28 | ${springframework.version} 29 | 30 | 31 | org.springframework 32 | spring-context-support 33 | ${springframework.version} 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /lts-example-jobclient/lts-example-jobclient-spring-xml/src/main/java/com/github/ltsopensource/example/spring/JobCompletedHandlerImpl.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example.spring; 2 | 3 | import com.github.ltsopensource.core.commons.utils.CollectionUtils; 4 | import com.github.ltsopensource.core.domain.JobResult; 5 | import com.github.ltsopensource.jobclient.support.JobCompletedHandler; 6 | 7 | import java.text.SimpleDateFormat; 8 | import java.util.Date; 9 | import java.util.List; 10 | 11 | /** 12 | * @author Robert HG (254963746@qq.com) on 4/17/16. 13 | */ 14 | public class JobCompletedHandlerImpl implements JobCompletedHandler { 15 | 16 | @Override 17 | public void onComplete(List jobResults) { 18 | // 任务执行反馈结果处理 19 | if (CollectionUtils.isNotEmpty(jobResults)) { 20 | for (JobResult jobResult : jobResults) { 21 | System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + " 任务执行完成:" + jobResult); 22 | } 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /lts-example-jobclient/lts-example-jobclient-spring-xml/src/main/java/com/github/ltsopensource/example/spring/Main.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example.spring; 2 | 3 | import com.github.ltsopensource.core.domain.Job; 4 | import com.github.ltsopensource.jobclient.JobClient; 5 | import com.github.ltsopensource.jobclient.domain.Response; 6 | import org.springframework.context.ApplicationContext; 7 | import org.springframework.context.support.ClassPathXmlApplicationContext; 8 | 9 | /** 10 | * @author Robert HG (254963746@qq.com) on 4/18/16. 11 | */ 12 | public class Main { 13 | 14 | public static void main(String[] args) { 15 | ApplicationContext context = new ClassPathXmlApplicationContext("/lts-jobclient.xml"); 16 | 17 | JobClient jobClient = (JobClient) context.getBean("jobClient"); 18 | 19 | Job job = new Job(); 20 | job.setTaskId("t_realtime_5556666"); 21 | job.setParam("shopId", "1122222221"); 22 | job.setTaskTrackerNodeGroup("test_trade_TaskTracker"); 23 | job.setNeedFeedback(true); 24 | job.setReplaceOnExist(true); // 当任务队列中存在这个任务的时候,是否替换更新 25 | Response response = jobClient.submitJob(job); 26 | System.out.println(response); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /lts-example-jobclient/lts-example-jobclient-spring-xml/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | 2 | log4j.rootLogger=INFO,stdout 3 | 4 | log4j.appender.stdout.Threshold=INFO 5 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 6 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 7 | log4j.appender.stdout.layout.ConversionPattern=%d [%t] (%F:%L) %-5p %c %x - %m%n -------------------------------------------------------------------------------- /lts-example-jobclient/lts-example-jobclient-spring-xml/src/main/resources/lts-jobclient.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /lts-example-jobclient/lts-example-jobclient-spring-xml/src/main/resources/lts.properties: -------------------------------------------------------------------------------- 1 | lts.jobclient.cluster-name=test_cluster 2 | lts.jobclient.registry-address=zookeeper://127.0.0.1:2181 3 | lts.jobclient.node-group=test_jobClient 4 | lts.jobclient.use-retry-client=true 5 | lts.jobclient.configs.job.fail.store=mapdb 6 | 7 | 8 | #LTS.JOBCLIENT.CLUSTER-NAME=test_cluster 9 | #LTS.JOBCLIENT.REGISTRY-ADDRESS=zookeeper://127.0.0.1:2181 10 | #LTS.JOBCLIENT.NODE-GROUP=test_jobClient 11 | #LTS.JOBCLIENT.USE-RETRY-CLIENT=true 12 | #LTS.JOBCLIENT.CONFIGS.job.fail.store=mapdb 13 | -------------------------------------------------------------------------------- /lts-example-jobclient/lts-example-jobclient-springboot/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | lts-example-jobclient 7 | com.github.ltsopensource 8 | 1.7.2-SNAPSHOT 9 | 10 | 4.0.0 11 | lts-example-jobclient-springboot 12 | 13 | 14 | 15 | org.springframework.boot 16 | spring-boot 17 | 18 | 19 | org.springframework.boot 20 | spring-boot-autoconfigure 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /lts-example-jobclient/lts-example-jobclient-springboot/src/main/java/com/github/ltsopensource/example/springboot/Application.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example.springboot; 2 | 3 | import com.github.ltsopensource.spring.boot.annotation.EnableJobClient; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | import org.springframework.context.annotation.ComponentScan; 7 | 8 | /** 9 | * @author Robert HG (254963746@qq.com) on 4/9/16. 10 | */ 11 | @SpringBootApplication 12 | @EnableJobClient 13 | @ComponentScan("com.github.ltsopensource.example") 14 | public class Application { 15 | 16 | public static void main(String[] args) { 17 | SpringApplication.run(Application.class, args); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /lts-example-jobclient/lts-example-jobclient-springboot/src/main/java/com/github/ltsopensource/example/springboot/JobClientReferenceBean.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example.springboot; 2 | 3 | import com.github.ltsopensource.core.domain.Job; 4 | import com.github.ltsopensource.jobclient.JobClient; 5 | import com.github.ltsopensource.jobclient.domain.Response; 6 | import org.springframework.beans.factory.InitializingBean; 7 | import org.springframework.beans.factory.annotation.Autowired; 8 | import org.springframework.stereotype.Component; 9 | 10 | /** 11 | * @author Robert HG (254963746@qq.com) on 4/9/16. 12 | */ 13 | @Component 14 | public class JobClientReferenceBean implements InitializingBean { 15 | 16 | /** 17 | * 自己的业务类,就可以这样引用了 18 | */ 19 | @Autowired 20 | private JobClient jobClient; 21 | 22 | @Override 23 | public void afterPropertiesSet() throws Exception { 24 | 25 | // 这里模拟提交任务 26 | 27 | Job job = new Job(); 28 | job.setTaskId("t_555"); 29 | job.setParam("shopId", "1122222221"); 30 | job.setTaskTrackerNodeGroup("test_trade_TaskTracker"); 31 | job.setNeedFeedback(true); 32 | job.setReplaceOnExist(true); // 当任务队列中存在这个任务的时候,是否替换更新 33 | // job.setCronExpression("0 0/1 * * * ?"); 34 | // job.setTriggerTime(DateUtils.addDay(new Date(), 1)); 35 | Response response = jobClient.submitJob(job); 36 | System.out.println(response); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /lts-example-jobclient/lts-example-jobclient-springboot/src/main/java/com/github/ltsopensource/example/springboot/JobCompletedHandlerImpl.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example.springboot; 2 | 3 | import com.github.ltsopensource.core.commons.utils.CollectionUtils; 4 | import com.github.ltsopensource.core.domain.JobResult; 5 | import com.github.ltsopensource.jobclient.support.JobCompletedHandler; 6 | import com.github.ltsopensource.spring.boot.annotation.JobCompletedHandler4JobClient; 7 | 8 | import java.text.SimpleDateFormat; 9 | import java.util.Date; 10 | import java.util.List; 11 | 12 | /** 13 | * @author Robert HG (254963746@qq.com) on 4/9/16. 14 | */ 15 | // 增加这个注解, 即可作为任务执行结果反馈回调接口(也可以不使用) 16 | @JobCompletedHandler4JobClient 17 | public class JobCompletedHandlerImpl implements JobCompletedHandler { 18 | @Override 19 | public void onComplete(List jobResults) { 20 | // 任务执行反馈结果处理 21 | if (CollectionUtils.isNotEmpty(jobResults)) { 22 | for (JobResult jobResult : jobResults) { 23 | System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + " 任务执行完成:" + jobResult); 24 | } 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /lts-example-jobclient/lts-example-jobclient-springboot/src/main/java/com/github/ltsopensource/example/springboot/MasterNodeChangeListener.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example.springboot; 2 | 3 | import com.github.ltsopensource.core.cluster.Node; 4 | import com.github.ltsopensource.core.commons.utils.StringUtils; 5 | import com.github.ltsopensource.core.listener.MasterChangeListener; 6 | import com.github.ltsopensource.core.logger.Logger; 7 | import com.github.ltsopensource.core.logger.LoggerFactory; 8 | import com.github.ltsopensource.spring.boot.annotation.MasterNodeListener; 9 | 10 | /** 11 | * @author Robert HG (254963746@qq.com) on 4/9/16. 12 | */ 13 | @MasterNodeListener 14 | public class MasterNodeChangeListener implements MasterChangeListener { 15 | 16 | private static final Logger LOGGER = LoggerFactory.getLogger(MasterNodeChangeListener.class); 17 | 18 | /** 19 | * @param master master节点 20 | * @param isMaster 表示当前节点是不是master节点 21 | */ 22 | @Override 23 | public void change(Node master, boolean isMaster) { 24 | // 一个节点组master节点变化后的处理 , 譬如我多个JobClient, 但是有些事情只想只有一个节点能做。 25 | if (isMaster) { 26 | LOGGER.info("我变成了节点组中的master节点了, 恭喜, 我要放大招了"); 27 | } else { 28 | LOGGER.info(StringUtils.format("master节点变成了{},不是我,我不能放大招,要猥琐", master)); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /lts-example-jobclient/lts-example-jobclient-springboot/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | lts.jobclient.cluster-name=test_cluster 2 | lts.jobclient.registry-address=zookeeper://127.0.0.1:2181 3 | lts.jobclient.node-group=test_jobClient 4 | lts.jobclient.use-retry-client=true 5 | lts.jobclient.configs.job.fail.store=mapdb -------------------------------------------------------------------------------- /lts-example-jobclient/lts-example-jobclient-springboot/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | 2 | log4j.rootLogger=INFO,stdout 3 | 4 | log4j.appender.stdout.Threshold=INFO 5 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 6 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 7 | log4j.appender.stdout.layout.ConversionPattern=%d [%t] (%F:%L) %-5p %c %x - %m%n -------------------------------------------------------------------------------- /lts-example-jobclient/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | lts-examples 7 | com.github.ltsopensource 8 | 1.7.2-SNAPSHOT 9 | 10 | 4.0.0 11 | pom 12 | 13 | lts-example-jobclient-springboot 14 | lts-example-jobclient-spring-xml 15 | lts-example-jobclient-java 16 | lts-example-jobclient-spring-annotation 17 | 18 | lts-example-jobclient 19 | 20 | 21 | 22 | com.github.ltsopensource 23 | lts 24 | 25 | 26 | org.javassist 27 | javassist 28 | 29 | 30 | log4j 31 | log4j 32 | 33 | 34 | com.github.sgroschupf 35 | zkclient 36 | 37 | 38 | io.netty 39 | netty-all 40 | 41 | 42 | com.alibaba 43 | fastjson 44 | 45 | 46 | org.mapdb 47 | mapdb 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /lts-example-jobtracker/lts-example-jobtracker-java/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | lts-example-jobtracker 7 | com.github.ltsopensource 8 | 1.7.2-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | lts-example-jobtracker-java 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /lts-example-jobtracker/lts-example-jobtracker-java/src/main/java/com/github/ltsopensource/example/java/Main.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example.java; 2 | 3 | import com.github.ltsopensource.jobtracker.JobTracker; 4 | import com.github.ltsopensource.jobtracker.JobTrackerBuilder; 5 | 6 | /** 7 | * @author Robert HG (254963746@qq.com) on 4/17/16. 8 | */ 9 | public class Main { 10 | 11 | public static void main(String[] args) { 12 | // final JobTracker jobTracker = new JobTracker(); 13 | // // 节点信息配置 14 | // jobTracker.setRegistryAddress("zookeeper://127.0.0.1:2181"); 15 | //// jobTracker.setRegistryAddress("redis://127.0.0.1:6379"); 16 | // jobTracker.setListenPort(35001); // 默认 35001 17 | // jobTracker.setClusterName("test_cluster"); 18 | // 19 | //// // 设置业务日志记录 mysql 20 | //// jobTracker.addConfig("job.logger", "mysql"); 21 | //// // 任务队列用mysql 22 | //// jobTracker.addConfig("job.queue", "mysql"); 23 | // // mysql 配置 24 | // jobTracker.addConfig("jdbc.url", "jdbc:mysql://127.0.0.1:3306/lts"); 25 | // jobTracker.addConfig("jdbc.username", "root"); 26 | // jobTracker.addConfig("jdbc.password", "root"); 27 | 28 | final JobTracker jobTracker = new JobTrackerBuilder() 29 | .setPropertiesConfigure("lts.properties") 30 | .build(); 31 | 32 | // 启动节点 33 | jobTracker.start(); 34 | 35 | Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { 36 | @Override 37 | public void run() { 38 | jobTracker.stop(); 39 | } 40 | })); 41 | } 42 | 43 | } 44 | -------------------------------------------------------------------------------- /lts-example-jobtracker/lts-example-jobtracker-java/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | 2 | log4j.rootLogger=INFO,stdout 3 | 4 | log4j.appender.stdout.Threshold=INFO 5 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 6 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 7 | log4j.appender.stdout.layout.ConversionPattern=%d [%t] (%F:%L) %-5p %c %x - %m%n -------------------------------------------------------------------------------- /lts-example-jobtracker/lts-example-jobtracker-java/src/main/resources/lts.properties: -------------------------------------------------------------------------------- 1 | lts.jobtracker.cluster-name=test_cluster 2 | lts.jobtracker.listen-port=35001 3 | lts.jobtracker.registry-address=zookeeper://127.0.0.1:2181 4 | lts.jobtracker.configs.job.logger=mysql 5 | lts.jobtracker.configs.job.queue=mysql 6 | lts.jobtracker.configs.jdbc.url=jdbc:mysql://127.0.0.1:3306/lts 7 | lts.jobtracker.configs.jdbc.username=root 8 | lts.jobtracker.configs.jdbc.password=root 9 | -------------------------------------------------------------------------------- /lts-example-jobtracker/lts-example-jobtracker-spring-annotaion/lts-example-jobtracker-spring-annotaion.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /lts-example-jobtracker/lts-example-jobtracker-spring-annotaion/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | lts-example-jobtracker 7 | com.github.ltsopensource 8 | 1.7.2-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | lts-example-jobtracker-spring-annotaion 13 | 14 | 15 | 16 | org.springframework 17 | spring-core 18 | ${springframework.version} 19 | 20 | 21 | org.springframework 22 | spring-beans 23 | ${springframework.version} 24 | 25 | 26 | org.springframework 27 | spring-context 28 | ${springframework.version} 29 | 30 | 31 | org.springframework 32 | spring-context-support 33 | ${springframework.version} 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /lts-example-jobtracker/lts-example-jobtracker-spring-annotaion/src/main/java/com/github/ltsopensource/example/JobTrackerConfig.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example; 2 | 3 | import com.github.ltsopensource.jobtracker.JobTracker; 4 | import com.github.ltsopensource.spring.JobTrackerFactoryBean; 5 | import org.springframework.context.annotation.Bean; 6 | import org.springframework.context.annotation.Configuration; 7 | 8 | /** 9 | * @author Robert HG (254963746@qq.com) on 4/22/16. 10 | */ 11 | @Configuration 12 | public class JobTrackerConfig { 13 | 14 | @Bean(name = "jobTracker") 15 | public JobTracker getJobTracker() throws Exception { 16 | JobTrackerFactoryBean factoryBean = new JobTrackerFactoryBean(); 17 | factoryBean.setLocations("lts.properties"); 18 | factoryBean.afterPropertiesSet(); 19 | factoryBean.start(); 20 | return factoryBean.getObject(); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /lts-example-jobtracker/lts-example-jobtracker-spring-annotaion/src/main/java/com/github/ltsopensource/example/Main.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example; 2 | 3 | import org.springframework.context.ApplicationContext; 4 | import org.springframework.context.support.ClassPathXmlApplicationContext; 5 | 6 | /** 7 | * @author Robert HG (254963746@qq.com) on 4/22/16. 8 | */ 9 | public class Main { 10 | 11 | public static void main(String[] args) { 12 | ApplicationContext context = new ClassPathXmlApplicationContext("/lts-jobtracker.xml"); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /lts-example-jobtracker/lts-example-jobtracker-spring-annotaion/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | 2 | log4j.rootLogger=INFO,stdout 3 | 4 | log4j.appender.stdout.Threshold=INFO 5 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 6 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 7 | log4j.appender.stdout.layout.ConversionPattern=%d [%t] (%F:%L) %-5p %c %x - %m%n -------------------------------------------------------------------------------- /lts-example-jobtracker/lts-example-jobtracker-spring-annotaion/src/main/resources/lts-jobtracker.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /lts-example-jobtracker/lts-example-jobtracker-spring-annotaion/src/main/resources/lts.properties: -------------------------------------------------------------------------------- 1 | lts.jobtracker.cluster-name=test_cluster 2 | lts.jobtracker.listen-port=35001 3 | lts.jobtracker.registry-address=zookeeper://127.0.0.1:2181 4 | lts.jobtracker.configs.job.logger=mysql 5 | lts.jobtracker.configs.job.queue=mysql 6 | lts.jobtracker.configs.jdbc.url=jdbc:mysql://127.0.0.1:3306/lts 7 | lts.jobtracker.configs.jdbc.username=root 8 | lts.jobtracker.configs.jdbc.password=root 9 | -------------------------------------------------------------------------------- /lts-example-jobtracker/lts-example-jobtracker-spring-xml/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | lts-example-jobtracker 7 | com.github.ltsopensource 8 | 1.7.2-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | lts-example-jobtracker-spring-xml 13 | 14 | 15 | org.springframework 16 | spring-core 17 | ${springframework.version} 18 | 19 | 20 | org.springframework 21 | spring-beans 22 | ${springframework.version} 23 | 24 | 25 | org.springframework 26 | spring-context 27 | ${springframework.version} 28 | 29 | 30 | org.springframework 31 | spring-context-support 32 | ${springframework.version} 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /lts-example-jobtracker/lts-example-jobtracker-spring-xml/src/main/java/com/github/ltsopensource/example/spring/Main.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example.spring; 2 | 3 | import org.springframework.context.ApplicationContext; 4 | import org.springframework.context.support.ClassPathXmlApplicationContext; 5 | 6 | /** 7 | * @author Robert HG (254963746@qq.com) on 4/18/16. 8 | */ 9 | public class Main { 10 | 11 | public static void main(String[] args) { 12 | ApplicationContext context = new ClassPathXmlApplicationContext("/lts-jobtracker.xml"); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /lts-example-jobtracker/lts-example-jobtracker-spring-xml/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | 2 | log4j.rootLogger=INFO,stdout 3 | 4 | log4j.appender.stdout.Threshold=INFO 5 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 6 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 7 | log4j.appender.stdout.layout.ConversionPattern=%d [%t] (%F:%L) %-5p %c %x - %m%n -------------------------------------------------------------------------------- /lts-example-jobtracker/lts-example-jobtracker-spring-xml/src/main/resources/lts-jobtracker.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | mysql 18 | mysql 19 | jdbc:mysql://127.0.0.1:3306/lts 20 | root 21 | root 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /lts-example-jobtracker/lts-example-jobtracker-springboot/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | lts-example-jobtracker 7 | com.github.ltsopensource 8 | 1.7.2-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | lts-example-jobtracker-springboot 13 | 14 | 15 | 16 | org.springframework.boot 17 | spring-boot 18 | 19 | 20 | org.springframework.boot 21 | spring-boot-autoconfigure 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /lts-example-jobtracker/lts-example-jobtracker-springboot/src/main/java/com/github/ltsopensource/example/springboot/Application.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example.springboot; 2 | 3 | import com.github.ltsopensource.spring.boot.annotation.EnableJobTracker; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | import org.springframework.context.annotation.ComponentScan; 7 | 8 | /** 9 | * @author Robert HG (254963746@qq.com) on 4/9/16. 10 | */ 11 | @SpringBootApplication 12 | @EnableJobTracker 13 | @ComponentScan("com.github.ltsopensource.example") 14 | public class Application { 15 | 16 | public static void main(String[] args) { 17 | SpringApplication.run(Application.class, args); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /lts-example-jobtracker/lts-example-jobtracker-springboot/src/main/java/com/github/ltsopensource/example/springboot/MasterNodeChangeListener.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example.springboot; 2 | 3 | import com.github.ltsopensource.core.cluster.Node; 4 | import com.github.ltsopensource.core.commons.utils.StringUtils; 5 | import com.github.ltsopensource.core.listener.MasterChangeListener; 6 | import com.github.ltsopensource.core.logger.Logger; 7 | import com.github.ltsopensource.core.logger.LoggerFactory; 8 | import com.github.ltsopensource.spring.boot.annotation.MasterNodeListener; 9 | 10 | /** 11 | * @author Robert HG (254963746@qq.com) on 4/9/16. 12 | */ 13 | @MasterNodeListener 14 | public class MasterNodeChangeListener implements MasterChangeListener { 15 | 16 | private static final Logger LOGGER = LoggerFactory.getLogger(MasterNodeChangeListener.class); 17 | 18 | /** 19 | * @param master master节点 20 | * @param isMaster 表示当前节点是不是master节点 21 | */ 22 | @Override 23 | public void change(Node master, boolean isMaster) { 24 | // 一个节点组master节点变化后的处理 , 譬如我多个JobClient, 但是有些事情只想只有一个节点能做。 25 | if (isMaster) { 26 | LOGGER.info("我变成了节点组中的master节点了, 恭喜, 我要放大招了"); 27 | } else { 28 | LOGGER.info(StringUtils.format("master节点变成了{},不是我,我不能放大招,要猥琐", master)); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /lts-example-jobtracker/lts-example-jobtracker-springboot/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | lts.jobtracker.cluster-name=test_cluster 2 | lts.jobtracker.listen-port=35001 3 | lts.jobtracker.registry-address=zookeeper://127.0.0.1:2181 4 | lts.jobtracker.configs.job.logger=mysql 5 | lts.jobtracker.configs.job.queue=mysql 6 | lts.jobtracker.configs.jdbc.url=jdbc:mysql://127.0.0.1:3306/lts 7 | lts.jobtracker.configs.jdbc.username=root 8 | lts.jobtracker.configs.jdbc.password=root 9 | -------------------------------------------------------------------------------- /lts-example-jobtracker/lts-example-jobtracker-springboot/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | 2 | log4j.rootLogger=INFO,stdout 3 | 4 | log4j.appender.stdout.Threshold=INFO 5 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 6 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 7 | log4j.appender.stdout.layout.ConversionPattern=%d [%t] (%F:%L) %-5p %c %x - %m%n -------------------------------------------------------------------------------- /lts-example-jobtracker/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | lts-examples 7 | com.github.ltsopensource 8 | 1.7.2-SNAPSHOT 9 | 10 | 4.0.0 11 | lts-example-jobtracker 12 | pom 13 | 14 | lts-example-jobtracker-springboot 15 | lts-example-jobtracker-java 16 | lts-example-jobtracker-spring-xml 17 | lts-example-jobtracker-spring-annotaion 18 | 19 | 20 | 21 | 22 | com.github.ltsopensource 23 | lts 24 | 25 | 26 | org.javassist 27 | javassist 28 | 29 | 30 | log4j 31 | log4j 32 | 33 | 34 | com.github.sgroschupf 35 | zkclient 36 | 37 | 38 | io.netty 39 | netty-all 40 | 41 | 42 | mysql 43 | mysql-connector-java 44 | 45 | 46 | com.alibaba 47 | druid 48 | 49 | 50 | com.alibaba 51 | fastjson 52 | 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /lts-example-monitor/lts-example-monitor-springboot/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | lts-example-monitor 7 | com.github.ltsopensource 8 | 1.7.2-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | lts-example-monitor-springboot 13 | 14 | 15 | 16 | 17 | org.springframework.boot 18 | spring-boot 19 | 20 | 21 | org.springframework.boot 22 | spring-boot-autoconfigure 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /lts-example-monitor/lts-example-monitor-springboot/src/main/java/com/github/ltsopensource/example/springboot/Application.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example.springboot; 2 | 3 | import com.github.ltsopensource.spring.boot.annotation.EnableMonitor; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | import org.springframework.context.annotation.ComponentScan; 7 | 8 | /** 9 | * @author Robert HG (254963746@qq.com) on 4/9/16. 10 | */ 11 | @SpringBootApplication 12 | @EnableMonitor 13 | @ComponentScan("com.github.ltsopensource.example") 14 | public class Application { 15 | 16 | public static void main(String[] args) { 17 | SpringApplication.run(Application.class, args); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /lts-example-monitor/lts-example-monitor-springboot/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | lts.monitor.cluster-name=test_cluster 2 | lts.monitor.registry-address=zookeeper://127.0.0.1:2181 3 | lts.monitor.configs.job.logger=mysql 4 | lts.monitor.configs.job.queue=mysql 5 | lts.monitor.configs.jdbc.url=jdbc:mysql://127.0.0.1:3306/lts 6 | lts.monitor.configs.jdbc.username=root 7 | lts.monitor.configs.jdbc.password=root -------------------------------------------------------------------------------- /lts-example-monitor/lts-example-monitor-springboot/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | 2 | log4j.rootLogger=INFO,stdout 3 | 4 | log4j.appender.stdout.Threshold=INFO 5 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 6 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 7 | log4j.appender.stdout.layout.ConversionPattern=%d [%t] (%F:%L) %-5p %c %x - %m%n -------------------------------------------------------------------------------- /lts-example-monitor/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | lts-examples 7 | com.github.ltsopensource 8 | 1.7.2-SNAPSHOT 9 | 10 | 4.0.0 11 | pom 12 | 13 | lts-example-monitor-springboot 14 | 15 | lts-example-monitor 16 | 17 | 18 | 19 | com.github.ltsopensource 20 | lts 21 | 22 | 23 | log4j 24 | log4j 25 | 26 | 27 | com.github.sgroschupf 28 | zkclient 29 | 30 | 31 | mysql 32 | mysql-connector-java 33 | 34 | 35 | com.alibaba 36 | druid 37 | 38 | 39 | com.alibaba 40 | fastjson 41 | 42 | 43 | org.javassist 44 | javassist 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /lts-example-quartz/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | lts-examples 7 | com.github.ltsopensource 8 | 1.7.2-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | lts-example-quartz 13 | 14 | 15 | 16 | com.github.ltsopensource 17 | lts 18 | 19 | 20 | com.github.sgroschupf 21 | zkclient 22 | 23 | 24 | io.netty 25 | netty-all 26 | 27 | 28 | com.alibaba 29 | fastjson 30 | 31 | 32 | org.mapdb 33 | mapdb 34 | 35 | 36 | org.javassist 37 | javassist 38 | 39 | 40 | org.springframework 41 | spring-core 42 | 43 | 44 | org.springframework 45 | spring-beans 46 | 47 | 48 | org.springframework 49 | spring-context 50 | 51 | 52 | org.springframework 53 | spring-context-support 54 | 55 | 56 | org.springframework 57 | spring-tx 58 | 59 | 60 | 61 | org.quartz-scheduler 62 | quartz 63 | 2.2.2 64 | 65 | 66 | c3p0 67 | c3p0 68 | 69 | 70 | org.slf4j 71 | slf4j-api 72 | 73 | 74 | 75 | 76 | org.slf4j 77 | slf4j-api 78 | ${slf4j.version} 79 | 80 | 81 | org.slf4j 82 | slf4j-log4j12 83 | ${slf4j.version} 84 | 85 | 86 | org.fusesource.leveldbjni 87 | leveldbjni-all 88 | ${leveldbjni.version} 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /lts-example-quartz/src/main/java/com/github/ltsopensource/example/Main.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example; 2 | 3 | import org.springframework.context.ApplicationContext; 4 | import org.springframework.context.support.ClassPathXmlApplicationContext; 5 | 6 | /** 7 | * @author Robert HG (254963746@qq.com) on 3/16/16. 8 | */ 9 | public class Main { 10 | 11 | public static void main(String[] args) { 12 | 13 | ApplicationContext context = new ClassPathXmlApplicationContext("/lts-quartz.xml"); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /lts-example-quartz/src/main/java/com/github/ltsopensource/example/QuartzTest.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example; 2 | 3 | import com.github.ltsopensource.core.commons.utils.DateUtils; 4 | 5 | import java.util.Date; 6 | 7 | /** 8 | * @author Robert HG (254963746@qq.com) on 3/16/16. 9 | */ 10 | public class QuartzTest { 11 | 12 | public void autoRun() throws InterruptedException { 13 | System.out.println(DateUtils.formatYMD_HMS(new Date()) + " 我执行了..."); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /lts-example-quartz/src/main/java/com/github/ltsopensource/example/QuartzTestJob.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example; 2 | 3 | import com.github.ltsopensource.core.commons.utils.DateUtils; 4 | import org.quartz.JobExecutionContext; 5 | import org.quartz.JobExecutionException; 6 | import org.springframework.scheduling.quartz.QuartzJobBean; 7 | 8 | import java.util.Date; 9 | import java.util.Map; 10 | 11 | /** 12 | * @author Robert HG (254963746@qq.com) on 3/16/16. 13 | */ 14 | public class QuartzTestJob extends QuartzJobBean { 15 | 16 | @Override 17 | protected void executeInternal(JobExecutionContext context) throws JobExecutionException { 18 | 19 | for (Map.Entry entry : context.getMergedJobDataMap().entrySet()) { 20 | System.out.println(entry.getKey() + ":" + entry.getValue()); 21 | } 22 | System.out.println(DateUtils.formatYMD_HMS(new Date()) + " 我开始执行了..."); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /lts-example-quartz/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | 2 | log4j.rootLogger=INFO,stdout 3 | 4 | log4j.appender.stdout.Threshold=INFO 5 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 6 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 7 | log4j.appender.stdout.layout.ConversionPattern=%d [%t] (%F:%L) %-5p %c %x - %m%n -------------------------------------------------------------------------------- /lts-example-quartz/src/main/resources/lts-quartz.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /lts-example-quartz/src/main/resources/lts.properties: -------------------------------------------------------------------------------- 1 | 2 | lts.jobclient.cluster-name=test_cluster 3 | lts.jobclient.registry-address=zookeeper://127.0.0.1:2181 4 | lts.jobclient.node-group=test_jobClient 5 | lts.jobclient.use-retry-client=true 6 | lts.jobclient.configs.job.fail.store=mapdb 7 | 8 | lts.tasktracker.cluster-name=test_cluster 9 | lts.tasktracker.registry-address=zookeeper://127.0.0.1:2181 10 | #lts.tasktracker.work-threads=64 11 | lts.tasktracker.node-group=test_trade_TaskTracker 12 | #lts.tasktracker.dispatch-runner.enable=true 13 | #lts.tasktracker.dispatch-runner.shard-value=taskId 14 | lts.tasktracker.configs.job.fail.store=mapdb -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktarcker-springboot/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | lts-example-tasktracker 7 | com.github.ltsopensource 8 | 1.7.2-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | lts-example-tasktarcker-springboot 13 | 14 | 15 | 16 | org.springframework.boot 17 | spring-boot 18 | 19 | 20 | org.springframework.boot 21 | spring-boot-autoconfigure 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktarcker-springboot/src/main/java/com/github/ltsopensource/example/springboot/Application.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example.springboot; 2 | 3 | import com.github.ltsopensource.spring.boot.annotation.EnableTaskTracker; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | import org.springframework.context.annotation.ComponentScan; 7 | 8 | /** 9 | * @author Robert HG (254963746@qq.com) on 4/9/16. 10 | */ 11 | @SpringBootApplication 12 | @EnableTaskTracker 13 | @ComponentScan("com.github.ltsopensource.example") 14 | public class Application { 15 | 16 | public static void main(String[] args) { 17 | SpringApplication.run(Application.class, args); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktarcker-springboot/src/main/java/com/github/ltsopensource/example/springboot/JobRunnerImpl.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example.springboot; 2 | 3 | import com.github.ltsopensource.core.domain.Action; 4 | import com.github.ltsopensource.core.logger.Logger; 5 | import com.github.ltsopensource.core.logger.LoggerFactory; 6 | import com.github.ltsopensource.spring.boot.annotation.JobRunner4TaskTracker; 7 | import com.github.ltsopensource.tasktracker.Result; 8 | import com.github.ltsopensource.tasktracker.logger.BizLogger; 9 | import com.github.ltsopensource.tasktracker.runner.JobContext; 10 | import com.github.ltsopensource.tasktracker.runner.JobRunner; 11 | 12 | /** 13 | * @author Robert HG (254963746@qq.com) on 4/9/16. 14 | */ 15 | @JobRunner4TaskTracker 16 | public class JobRunnerImpl implements JobRunner { 17 | private static final Logger LOGGER = LoggerFactory.getLogger(JobRunnerImpl.class); 18 | 19 | @Override 20 | public Result run(JobContext jobContext) throws Throwable { 21 | try { 22 | BizLogger bizLogger = jobContext.getBizLogger(); 23 | 24 | // TODO 业务逻辑 25 | LOGGER.info("我要执行:" + jobContext); 26 | // 会发送到 LTS (JobTracker上) 27 | bizLogger.info("测试,业务日志啊啊啊啊啊"); 28 | 29 | } catch (Exception e) { 30 | LOGGER.info("Run job failed!", e); 31 | return new Result(Action.EXECUTE_FAILED, e.getMessage()); 32 | } 33 | return new Result(Action.EXECUTE_SUCCESS, "执行成功了,哈哈"); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktarcker-springboot/src/main/java/com/github/ltsopensource/example/springboot/MasterNodeChangeListener.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example.springboot; 2 | 3 | import com.github.ltsopensource.core.cluster.Node; 4 | import com.github.ltsopensource.core.commons.utils.StringUtils; 5 | import com.github.ltsopensource.core.listener.MasterChangeListener; 6 | import com.github.ltsopensource.core.logger.Logger; 7 | import com.github.ltsopensource.core.logger.LoggerFactory; 8 | import com.github.ltsopensource.spring.boot.annotation.MasterNodeListener; 9 | 10 | /** 11 | * @author Robert HG (254963746@qq.com) on 4/9/16. 12 | */ 13 | @MasterNodeListener 14 | public class MasterNodeChangeListener implements MasterChangeListener { 15 | 16 | private static final Logger LOGGER = LoggerFactory.getLogger(MasterNodeChangeListener.class); 17 | 18 | /** 19 | * @param master master节点 20 | * @param isMaster 表示当前节点是不是master节点 21 | */ 22 | @Override 23 | public void change(Node master, boolean isMaster) { 24 | // 一个节点组master节点变化后的处理 , 譬如我多个JobClient, 但是有些事情只想只有一个节点能做。 25 | if (isMaster) { 26 | LOGGER.info("我变成了节点组中的master节点了, 恭喜, 我要放大招了"); 27 | } else { 28 | LOGGER.info(StringUtils.format("master节点变成了{},不是我,我不能放大招,要猥琐", master)); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktarcker-springboot/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | lts.tasktracker.cluster-name=test_cluster 2 | lts.tasktracker.registry-address=zookeeper://127.0.0.1:2181 3 | #lts.tasktracker.work-threads=64 4 | lts.tasktracker.node-group=test_trade_TaskTracker 5 | #lts.tasktracker.dispatch-runner.enable=true 6 | #lts.tasktracker.dispatch-runner.shard-value=taskId 7 | lts.tasktracker.configs.job.fail.store=mapdb -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktarcker-springboot/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | 2 | log4j.rootLogger=INFO,stdout 3 | 4 | log4j.appender.stdout.Threshold=INFO 5 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 6 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 7 | log4j.appender.stdout.layout.ConversionPattern=%d [%t] (%F:%L) %-5p %c %x - %m%n -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-java/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | lts-example-tasktracker 7 | com.github.ltsopensource 8 | 1.7.2-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | lts-example-tasktracker-java 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-java/src/main/java/com/github/ltsopensource/example/java/Main.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example.java; 2 | 3 | import com.github.ltsopensource.tasktracker.TaskTracker; 4 | import com.github.ltsopensource.tasktracker.TaskTrackerBuilder; 5 | 6 | /** 7 | * @author Robert HG (254963746@qq.com) on 4/17/16. 8 | */ 9 | public class Main { 10 | 11 | public static void main(String[] args) { 12 | 13 | // final TaskTracker taskTracker = new TaskTracker(); 14 | // // 任务执行类,实现JobRunner 接口 15 | // taskTracker.setJobRunnerClass(TestJobRunner.class); 16 | // taskTracker.setRegistryAddress("zookeeper://127.0.0.1:2181"); 17 | // taskTracker.setNodeGroup("test_trade_TaskTracker"); // 同一个TaskTracker集群这个名字相同 18 | // taskTracker.setClusterName("test_cluster"); 19 | // taskTracker.setWorkThreads(64); 20 | // taskTracker.addConfig("job.fail.store", "mapdb"); 21 | 22 | final TaskTracker taskTracker = new TaskTrackerBuilder() 23 | .setPropertiesConfigure("lts.properties") 24 | .build(); 25 | 26 | taskTracker.start(); 27 | 28 | Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { 29 | @Override 30 | public void run() { 31 | taskTracker.stop(); 32 | } 33 | })); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-java/src/main/java/com/github/ltsopensource/example/java/TestJobRunner.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example.java; 2 | 3 | import com.github.ltsopensource.core.domain.Action; 4 | import com.github.ltsopensource.core.logger.Logger; 5 | import com.github.ltsopensource.core.logger.LoggerFactory; 6 | import com.github.ltsopensource.tasktracker.Result; 7 | import com.github.ltsopensource.tasktracker.logger.BizLogger; 8 | import com.github.ltsopensource.tasktracker.runner.JobContext; 9 | import com.github.ltsopensource.tasktracker.runner.JobRunner; 10 | 11 | /** 12 | * @author Robert HG (254963746@qq.com) on 4/17/16. 13 | */ 14 | public class TestJobRunner implements JobRunner { 15 | 16 | private static final Logger LOGGER = LoggerFactory.getLogger(TestJobRunner.class); 17 | 18 | @Override 19 | public Result run(JobContext jobContext) throws Throwable { 20 | try { 21 | // BizLogger bizLogger = LtsLoggerFactory.getBizLogger(); 22 | BizLogger bizLogger = jobContext.getBizLogger(); 23 | 24 | // TODO 业务逻辑 25 | LOGGER.info("我要执行:" + jobContext); 26 | // 会发送到 LTS (JobTracker上) 27 | bizLogger.info("测试,业务日志啊啊啊啊啊"); 28 | 29 | } catch (Exception e) { 30 | LOGGER.info("Run job failed!", e); 31 | return new Result(Action.EXECUTE_FAILED, e.getMessage()); 32 | } 33 | return new Result(Action.EXECUTE_SUCCESS, "执行成功了,哈哈"); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-java/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | 2 | log4j.rootLogger=INFO,stdout 3 | 4 | log4j.appender.stdout.Threshold=INFO 5 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 6 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 7 | log4j.appender.stdout.layout.ConversionPattern=%d [%t] (%F:%L) %-5p %c %x - %m%n -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-java/src/main/resources/lts.properties: -------------------------------------------------------------------------------- 1 | lts.tasktracker.cluster-name=test_cluster 2 | lts.tasktracker.registry-address=zookeeper://127.0.0.1:2181 3 | #lts.tasktracker.work-threads=64 4 | lts.tasktracker.node-group=test_trade_TaskTracker 5 | #lts.tasktracker.dispatch-runner.enable=true 6 | #lts.tasktracker.dispatch-runner.shard-value=taskId 7 | lts.tasktracker.configs.job.fail.store=mapdb 8 | lts.tasktracker.job-runner-class=com.github.ltsopensource.example.java.TestJobRunner -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-spring-annotation-shard/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | lts-example-tasktracker 7 | com.github.ltsopensource 8 | 1.7.2-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | lts-example-tasktracker-spring-annotation-shard 13 | 14 | 15 | 16 | org.springframework 17 | spring-core 18 | ${springframework.version} 19 | 20 | 21 | org.springframework 22 | spring-beans 23 | ${springframework.version} 24 | 25 | 26 | org.springframework 27 | spring-context 28 | ${springframework.version} 29 | 30 | 31 | org.springframework 32 | spring-context-support 33 | ${springframework.version} 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-spring-annotation-shard/src/main/java/com/github/ltsopensource/example/JobScheduler.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example; 2 | 3 | import com.github.ltsopensource.core.domain.Action; 4 | import com.github.ltsopensource.core.logger.Logger; 5 | import com.github.ltsopensource.core.logger.LoggerFactory; 6 | import com.github.ltsopensource.spring.tasktracker.JobRunnerItem; 7 | import com.github.ltsopensource.spring.tasktracker.LTS; 8 | import com.github.ltsopensource.tasktracker.Result; 9 | import com.github.ltsopensource.tasktracker.logger.BizLogger; 10 | import com.github.ltsopensource.tasktracker.runner.JobContext; 11 | import org.springframework.beans.factory.annotation.Autowired; 12 | 13 | /** 14 | * @author Robert HG (254963746@qq.com) on 10/20/15. 15 | */ 16 | @LTS 17 | public class JobScheduler { 18 | 19 | private static final Logger LOGGER = LoggerFactory.getLogger(JobScheduler.class); 20 | 21 | @Autowired 22 | SpringBean springBean; 23 | 24 | @JobRunnerItem(shardValue = "111") 25 | public Result runJob1(JobContext jobContext) throws Throwable { 26 | try { 27 | Thread.sleep(1000L); 28 | 29 | springBean.hello(); 30 | 31 | LOGGER.info("runJob1 我要执行:" + jobContext.getJob()); 32 | BizLogger bizLogger = jobContext.getBizLogger(); 33 | // 会发送到 LTS (JobTracker上) 34 | bizLogger.info("测试,业务日志啊啊啊啊啊"); 35 | 36 | } catch (Exception e) { 37 | LOGGER.info("Run job failed!", e); 38 | return new Result(Action.EXECUTE_LATER, e.getMessage()); 39 | } 40 | return new Result(Action.EXECUTE_SUCCESS, "执行成功了,哈哈"); 41 | } 42 | 43 | @JobRunnerItem(shardValue = "222") 44 | public void runJob2(JobContext jobContext) throws Throwable { 45 | try { 46 | springBean.hello(); 47 | 48 | LOGGER.info("runJob2 我要执行"); 49 | BizLogger bizLogger = jobContext.getBizLogger(); 50 | // 会发送到 LTS (JobTracker上) 51 | bizLogger.info("测试,业务日志啊啊啊啊啊"); 52 | } catch (Exception e) { 53 | LOGGER.info("Run job failed!", e); 54 | } 55 | } 56 | 57 | } 58 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-spring-annotation-shard/src/main/java/com/github/ltsopensource/example/JobScheduler2.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example; 2 | 3 | import com.github.ltsopensource.core.domain.Action; 4 | import com.github.ltsopensource.core.logger.Logger; 5 | import com.github.ltsopensource.core.logger.LoggerFactory; 6 | import com.github.ltsopensource.spring.tasktracker.JobRunnerItem; 7 | import com.github.ltsopensource.spring.tasktracker.LTS; 8 | import com.github.ltsopensource.tasktracker.Result; 9 | import com.github.ltsopensource.tasktracker.logger.BizLogger; 10 | import com.github.ltsopensource.tasktracker.runner.JobContext; 11 | import org.springframework.beans.factory.annotation.Autowired; 12 | 13 | /** 14 | * @author Robert HG (254963746@qq.com) on 10/20/15. 15 | */ 16 | @LTS 17 | public class JobScheduler2 { 18 | 19 | private static final Logger LOGGER = LoggerFactory.getLogger(JobScheduler.class); 20 | 21 | @Autowired 22 | SpringBean springBean; 23 | 24 | @JobRunnerItem(shardValue = "333") 25 | public Result runJob1(JobContext jobContext) throws Throwable { 26 | try { 27 | Thread.sleep(1000L); 28 | 29 | springBean.hello(); 30 | 31 | LOGGER.info("runJob3 我要执行:" + jobContext.getJob()); 32 | BizLogger bizLogger = jobContext.getBizLogger(); 33 | // 会发送到 LTS (JobTracker上) 34 | bizLogger.info("测试,业务日志啊啊啊啊啊"); 35 | 36 | } catch (Exception e) { 37 | LOGGER.info("Run job failed!", e); 38 | return new Result(Action.EXECUTE_LATER, e.getMessage()); 39 | } 40 | return new Result(Action.EXECUTE_SUCCESS, "执行成功了,哈哈"); 41 | } 42 | 43 | @JobRunnerItem(shardValue = "444") 44 | public void runJob2(JobContext jobContext) throws Throwable { 45 | try { 46 | springBean.hello(); 47 | 48 | LOGGER.info("runJob4 我要执行"); 49 | BizLogger bizLogger = jobContext.getBizLogger(); 50 | // 会发送到 LTS (JobTracker上) 51 | bizLogger.info("测试,业务日志啊啊啊啊啊"); 52 | } catch (Exception e) { 53 | LOGGER.info("Run job failed!", e); 54 | } 55 | } 56 | 57 | } 58 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-spring-annotation-shard/src/main/java/com/github/ltsopensource/example/Main.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example; 2 | 3 | import org.springframework.context.support.ClassPathXmlApplicationContext; 4 | 5 | /** 6 | * @author Robert HG (254963746@qq.com) on 4/18/16. 7 | */ 8 | public class Main { 9 | 10 | public static void main(String[] args) { 11 | new ClassPathXmlApplicationContext("/lts-tasktracker-shard-annotaion.xml"); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-spring-annotation-shard/src/main/java/com/github/ltsopensource/example/SpringBean.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example; 2 | 3 | import org.springframework.stereotype.Component; 4 | 5 | /** 6 | * 测试bean 注入 7 | * @author Robert HG (254963746@qq.com) on 8/4/15. 8 | */ 9 | @Component 10 | public class SpringBean { 11 | 12 | public void hello(){ 13 | System.out.println("我是SpringBean,我执行了"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-spring-annotation-shard/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | 2 | log4j.rootLogger=INFO,stdout 3 | 4 | log4j.appender.stdout.Threshold=INFO 5 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 6 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 7 | log4j.appender.stdout.layout.ConversionPattern=%d [%t] (%F:%L) %-5p %c %x - %m%n -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-spring-annotation-shard/src/main/resources/lts-tasktracker-shard-annotaion.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | mapdb 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-spring-annotation/lts-example-tasktracker-spring-annotation.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-spring-annotation/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | lts-example-tasktracker 7 | com.github.ltsopensource 8 | 1.7.2-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | lts-example-tasktracker-spring-annotation 13 | 14 | 15 | 16 | org.springframework 17 | spring-core 18 | ${springframework.version} 19 | 20 | 21 | org.springframework 22 | spring-beans 23 | ${springframework.version} 24 | 25 | 26 | org.springframework 27 | spring-context 28 | ${springframework.version} 29 | 30 | 31 | org.springframework 32 | spring-context-support 33 | ${springframework.version} 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-spring-annotation/src/main/java/com/github/ltsopensource/example/Main.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example; 2 | 3 | import org.springframework.context.ApplicationContext; 4 | import org.springframework.context.support.ClassPathXmlApplicationContext; 5 | 6 | /** 7 | * @author Robert HG (254963746@qq.com) on 4/22/16. 8 | */ 9 | public class Main { 10 | 11 | public static void main(String[] args) { 12 | ApplicationContext context = new ClassPathXmlApplicationContext("/lts-tasktracker.xml"); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-spring-annotation/src/main/java/com/github/ltsopensource/example/SpringAnnotationJobRunner.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example; 2 | 3 | import com.github.ltsopensource.core.domain.Action; 4 | import com.github.ltsopensource.core.logger.Logger; 5 | import com.github.ltsopensource.core.logger.LoggerFactory; 6 | import com.github.ltsopensource.tasktracker.Result; 7 | import com.github.ltsopensource.tasktracker.logger.BizLogger; 8 | import com.github.ltsopensource.tasktracker.runner.JobContext; 9 | import com.github.ltsopensource.tasktracker.runner.JobRunner; 10 | import org.springframework.beans.factory.annotation.Autowired; 11 | 12 | /** 13 | * @author Robert HG (254963746@qq.com) on 8/19/14. 14 | */ 15 | public class SpringAnnotationJobRunner implements JobRunner { 16 | 17 | private static final Logger LOGGER = LoggerFactory.getLogger(SpringAnnotationJobRunner.class); 18 | 19 | @Autowired 20 | SpringBean springBean; 21 | 22 | @Override 23 | public Result run(JobContext jobContext) throws Throwable { 24 | try { 25 | Thread.sleep(1000L); 26 | 27 | springBean.hello(); 28 | 29 | // TODO 业务逻辑 30 | LOGGER.info("我要执行:" + jobContext.getJob()); 31 | BizLogger bizLogger = jobContext.getBizLogger(); 32 | // 会发送到 LTS (JobTracker上) 33 | bizLogger.info("测试,业务日志啊啊啊啊啊"); 34 | 35 | } catch (Exception e) { 36 | LOGGER.info("Run job failed!", e); 37 | return new Result(Action.EXECUTE_LATER, e.getMessage()); 38 | } 39 | return new Result(Action.EXECUTE_SUCCESS, "执行成功了,哈哈"); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-spring-annotation/src/main/java/com/github/ltsopensource/example/SpringBean.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example; 2 | 3 | import org.springframework.stereotype.Component; 4 | 5 | /** 6 | * 测试bean 注入 7 | * @author Robert HG (254963746@qq.com) on 8/4/15. 8 | */ 9 | @Component 10 | public class SpringBean { 11 | 12 | public void hello(){ 13 | System.out.println("我是SpringBean,我执行了"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-spring-annotation/src/main/java/com/github/ltsopensource/example/TaskTrackerConfig.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example; 2 | 3 | import com.github.ltsopensource.spring.TaskTrackerAnnotationFactoryBean; 4 | import com.github.ltsopensource.tasktracker.TaskTracker; 5 | import org.springframework.beans.BeansException; 6 | import org.springframework.context.ApplicationContext; 7 | import org.springframework.context.ApplicationContextAware; 8 | import org.springframework.context.annotation.Bean; 9 | import org.springframework.context.annotation.Configuration; 10 | 11 | /** 12 | * @author Robert HG (254963746@qq.com) on 4/22/16. 13 | */ 14 | @Configuration 15 | public class TaskTrackerConfig implements ApplicationContextAware { 16 | 17 | private ApplicationContext applicationContext; 18 | 19 | @Override 20 | public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { 21 | this.applicationContext = applicationContext; 22 | } 23 | 24 | @Bean(name = "taskTracker") 25 | public TaskTracker getTaskTracker() throws Exception { 26 | TaskTrackerAnnotationFactoryBean factoryBean = new TaskTrackerAnnotationFactoryBean(); 27 | factoryBean.setApplicationContext(applicationContext); 28 | factoryBean.setJobRunnerClass(SpringAnnotationJobRunner.class); 29 | factoryBean.setLocations("lts.properties"); 30 | factoryBean.afterPropertiesSet(); 31 | factoryBean.start(); 32 | return factoryBean.getObject(); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-spring-annotation/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | 2 | log4j.rootLogger=INFO,stdout 3 | 4 | log4j.appender.stdout.Threshold=INFO 5 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 6 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 7 | log4j.appender.stdout.layout.ConversionPattern=%d [%t] (%F:%L) %-5p %c %x - %m%n -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-spring-annotation/src/main/resources/lts-tasktracker.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-spring-annotation/src/main/resources/lts.properties: -------------------------------------------------------------------------------- 1 | lts.tasktracker.cluster-name=test_cluster 2 | lts.tasktracker.registry-address=zookeeper://127.0.0.1:2181 3 | #lts.tasktracker.work-threads=64 4 | lts.tasktracker.node-group=test_trade_TaskTracker 5 | #lts.tasktracker.dispatch-runner.enable=true 6 | #lts.tasktracker.dispatch-runner.shard-value=taskId 7 | lts.tasktracker.configs.job.fail.store=mapdb -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-spring-xml-shard/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | lts-example-tasktracker 7 | com.github.ltsopensource 8 | 1.7.2-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | lts-example-tasktracker-spring-xml-shard 13 | 14 | 15 | 16 | org.springframework 17 | spring-core 18 | ${springframework.version} 19 | 20 | 21 | org.springframework 22 | spring-beans 23 | ${springframework.version} 24 | 25 | 26 | org.springframework 27 | spring-context 28 | ${springframework.version} 29 | 30 | 31 | org.springframework 32 | spring-context-support 33 | ${springframework.version} 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-spring-xml-shard/src/main/java/com/github/ltsopensource/example/Main.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example; 2 | 3 | import org.springframework.context.support.ClassPathXmlApplicationContext; 4 | 5 | /** 6 | * @author Robert HG (254963746@qq.com) on 4/18/16. 7 | */ 8 | public class Main { 9 | 10 | public static void main(String[] args) { 11 | new ClassPathXmlApplicationContext("/lts-tasktracker-shard-xml.xml"); 12 | 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-spring-xml-shard/src/main/java/com/github/ltsopensource/example/SpringBean.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example; 2 | 3 | import org.springframework.stereotype.Component; 4 | 5 | /** 6 | * 测试bean 注入 7 | * @author Robert HG (254963746@qq.com) on 8/4/15. 8 | */ 9 | @Component 10 | public class SpringBean { 11 | 12 | public void hello(){ 13 | System.out.println("我是SpringBean,我执行了"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-spring-xml-shard/src/main/java/com/github/ltsopensource/example/XmlJobScheduler.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example; 2 | 3 | import com.github.ltsopensource.core.domain.Action; 4 | import com.github.ltsopensource.core.logger.Logger; 5 | import com.github.ltsopensource.core.logger.LoggerFactory; 6 | import com.github.ltsopensource.tasktracker.Result; 7 | import com.github.ltsopensource.tasktracker.logger.BizLogger; 8 | import com.github.ltsopensource.tasktracker.runner.JobContext; 9 | import org.springframework.beans.factory.annotation.Autowired; 10 | 11 | /** 12 | * @author Robert HG (254963746@qq.com)on 12/21/15. 13 | */ 14 | public class XmlJobScheduler { 15 | 16 | private static final Logger LOGGER = LoggerFactory.getLogger(XmlJobScheduler.class); 17 | 18 | @Autowired 19 | SpringBean springBean; 20 | 21 | public Result runJob1(JobContext jobContext) throws Throwable { 22 | try { 23 | Thread.sleep(1000L); 24 | 25 | springBean.hello(); 26 | 27 | LOGGER.info("runJob1 我要执行:" + jobContext.getJob()); 28 | BizLogger bizLogger = jobContext.getBizLogger(); 29 | // 会发送到 LTS (JobTracker上) 30 | bizLogger.info("测试,业务日志啊啊啊啊啊"); 31 | 32 | } catch (Exception e) { 33 | LOGGER.info("Run job failed!", e); 34 | return new Result(Action.EXECUTE_LATER, e.getMessage()); 35 | } 36 | return new Result(Action.EXECUTE_SUCCESS, "执行成功了,哈哈"); 37 | } 38 | 39 | public Result runJob2(JobContext jobContext) throws Throwable { 40 | try { 41 | springBean.hello(); 42 | 43 | LOGGER.info("runJob2 我要执行"); 44 | BizLogger bizLogger = jobContext.getBizLogger(); 45 | // 会发送到 LTS (JobTracker上) 46 | bizLogger.info("测试,业务日志啊啊啊啊啊"); 47 | } catch (Exception e) { 48 | LOGGER.info("Run job failed!", e); 49 | return new Result(Action.EXECUTE_LATER, e.getMessage()); 50 | } 51 | return new Result(Action.EXECUTE_SUCCESS, "执行成功了,哈哈"); 52 | } 53 | 54 | } 55 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-spring-xml-shard/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | 2 | log4j.rootLogger=INFO,stdout 3 | 4 | log4j.appender.stdout.Threshold=INFO 5 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 6 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 7 | log4j.appender.stdout.layout.ConversionPattern=%d [%t] (%F:%L) %-5p %c %x - %m%n -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-spring-xml-shard/src/main/resources/lts-tasktracker-shard-xml.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | mapdb 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-spring-xml/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | lts-example-tasktracker 7 | com.github.ltsopensource 8 | 1.7.2-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | lts-example-tasktracker-spring-xml 13 | 14 | 15 | 16 | org.springframework 17 | spring-core 18 | ${springframework.version} 19 | 20 | 21 | org.springframework 22 | spring-beans 23 | ${springframework.version} 24 | 25 | 26 | org.springframework 27 | spring-context 28 | ${springframework.version} 29 | 30 | 31 | org.springframework 32 | spring-context-support 33 | ${springframework.version} 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-spring-xml/src/main/java/com/github/ltsopensource/example/spring/Main.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example.spring; 2 | 3 | import org.springframework.context.ApplicationContext; 4 | import org.springframework.context.support.ClassPathXmlApplicationContext; 5 | 6 | /** 7 | * @author Robert HG (254963746@qq.com) on 4/18/16. 8 | */ 9 | public class Main { 10 | 11 | public static void main(String[] args) { 12 | ApplicationContext context = new ClassPathXmlApplicationContext("/lts-tasktracker.xml"); 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-spring-xml/src/main/java/com/github/ltsopensource/example/spring/SpringAnnotationJobRunner.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example.spring; 2 | 3 | import com.github.ltsopensource.core.domain.Action; 4 | import com.github.ltsopensource.core.logger.Logger; 5 | import com.github.ltsopensource.core.logger.LoggerFactory; 6 | import com.github.ltsopensource.tasktracker.Result; 7 | import com.github.ltsopensource.tasktracker.logger.BizLogger; 8 | import com.github.ltsopensource.tasktracker.runner.JobContext; 9 | import com.github.ltsopensource.tasktracker.runner.JobRunner; 10 | import org.springframework.beans.factory.annotation.Autowired; 11 | 12 | /** 13 | * @author Robert HG (254963746@qq.com) on 8/19/14. 14 | */ 15 | public class SpringAnnotationJobRunner implements JobRunner { 16 | 17 | private static final Logger LOGGER = LoggerFactory.getLogger(SpringAnnotationJobRunner.class); 18 | 19 | @Autowired 20 | SpringBean springBean; 21 | 22 | @Override 23 | public Result run(JobContext jobContext) throws Throwable { 24 | try { 25 | Thread.sleep(1000L); 26 | 27 | springBean.hello(); 28 | 29 | // TODO 业务逻辑 30 | LOGGER.info("我要执行:" + jobContext.getJob()); 31 | BizLogger bizLogger = jobContext.getBizLogger(); 32 | // 会发送到 LTS (JobTracker上) 33 | bizLogger.info("测试,业务日志啊啊啊啊啊"); 34 | 35 | } catch (Exception e) { 36 | LOGGER.info("Run job failed!", e); 37 | return new Result(Action.EXECUTE_LATER, e.getMessage()); 38 | } 39 | return new Result(Action.EXECUTE_SUCCESS, "执行成功了,哈哈"); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-spring-xml/src/main/java/com/github/ltsopensource/example/spring/SpringBean.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example.spring; 2 | 3 | import org.springframework.stereotype.Component; 4 | 5 | /** 6 | * 测试bean 注入 7 | * @author Robert HG (254963746@qq.com) on 8/4/15. 8 | */ 9 | @Component 10 | public class SpringBean { 11 | 12 | public void hello(){ 13 | System.out.println("我是SpringBean,我执行了"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-spring-xml/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | 2 | log4j.rootLogger=INFO,stdout 3 | 4 | log4j.appender.stdout.Threshold=INFO 5 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 6 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 7 | log4j.appender.stdout.layout.ConversionPattern=%d [%t] (%F:%L) %-5p %c %x - %m%n -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-spring-xml/src/main/resources/lts-tasktracker.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | mapdb 26 | 27 | 28 | 29 | 30 | 31 | 32 | 50 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-springboot-shard/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | lts-example-tasktracker 7 | com.github.ltsopensource 8 | 1.7.2-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | lts-example-tasktracker-springboot-shard 13 | 14 | 15 | 16 | org.springframework.boot 17 | spring-boot 18 | 19 | 20 | org.springframework.boot 21 | spring-boot-autoconfigure 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-springboot-shard/src/main/java/com/github/ltsopensource/example/Application.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example; 2 | 3 | import com.github.ltsopensource.spring.boot.annotation.EnableTaskTracker; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | import org.springframework.context.annotation.ComponentScan; 7 | 8 | /** 9 | * @author Robert HG (254963746@qq.com) on 4/9/16. 10 | */ 11 | @SpringBootApplication 12 | @EnableTaskTracker 13 | @ComponentScan("com.github.ltsopensource.example") 14 | public class Application { 15 | 16 | public static void main(String[] args) { 17 | SpringApplication.run(Application.class, args); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-springboot-shard/src/main/java/com/github/ltsopensource/example/JobScheduler.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example; 2 | 3 | import com.github.ltsopensource.core.domain.Action; 4 | import com.github.ltsopensource.core.logger.Logger; 5 | import com.github.ltsopensource.core.logger.LoggerFactory; 6 | import com.github.ltsopensource.spring.tasktracker.JobRunnerItem; 7 | import com.github.ltsopensource.spring.tasktracker.LTS; 8 | import com.github.ltsopensource.tasktracker.Result; 9 | import com.github.ltsopensource.tasktracker.logger.BizLogger; 10 | import com.github.ltsopensource.tasktracker.runner.JobContext; 11 | import org.springframework.beans.factory.annotation.Autowired; 12 | 13 | /** 14 | * @author Robert HG (254963746@qq.com) on 10/20/15. 15 | */ 16 | @LTS 17 | public class JobScheduler { 18 | 19 | private static final Logger LOGGER = LoggerFactory.getLogger(JobScheduler.class); 20 | 21 | @Autowired 22 | SpringBean springBean; 23 | 24 | @JobRunnerItem(shardValue = "111") 25 | public Result runJob1(JobContext jobContext) throws Throwable { 26 | try { 27 | Thread.sleep(1000L); 28 | 29 | springBean.hello(); 30 | 31 | LOGGER.info("runJob1 我要执行:" + jobContext.getJob()); 32 | BizLogger bizLogger = jobContext.getBizLogger(); 33 | // 会发送到 LTS (JobTracker上) 34 | bizLogger.info("测试,业务日志啊啊啊啊啊"); 35 | 36 | } catch (Exception e) { 37 | LOGGER.info("Run job failed!", e); 38 | return new Result(Action.EXECUTE_LATER, e.getMessage()); 39 | } 40 | return new Result(Action.EXECUTE_SUCCESS, "执行成功了,哈哈"); 41 | } 42 | 43 | @JobRunnerItem(shardValue = "222") 44 | public void runJob2(JobContext jobContext) throws Throwable { 45 | try { 46 | springBean.hello(); 47 | 48 | LOGGER.info("runJob2 我要执行"); 49 | BizLogger bizLogger = jobContext.getBizLogger(); 50 | // 会发送到 LTS (JobTracker上) 51 | bizLogger.info("测试,业务日志啊啊啊啊啊"); 52 | } catch (Exception e) { 53 | LOGGER.info("Run job failed!", e); 54 | } 55 | } 56 | 57 | } 58 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-springboot-shard/src/main/java/com/github/ltsopensource/example/JobScheduler2.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example; 2 | 3 | import com.github.ltsopensource.core.domain.Action; 4 | import com.github.ltsopensource.core.logger.Logger; 5 | import com.github.ltsopensource.core.logger.LoggerFactory; 6 | import com.github.ltsopensource.spring.tasktracker.JobRunnerItem; 7 | import com.github.ltsopensource.spring.tasktracker.LTS; 8 | import com.github.ltsopensource.tasktracker.Result; 9 | import com.github.ltsopensource.tasktracker.logger.BizLogger; 10 | import com.github.ltsopensource.tasktracker.runner.JobContext; 11 | import org.springframework.beans.factory.annotation.Autowired; 12 | 13 | /** 14 | * @author Robert HG (254963746@qq.com) on 10/20/15. 15 | */ 16 | @LTS 17 | public class JobScheduler2 { 18 | 19 | private static final Logger LOGGER = LoggerFactory.getLogger(JobScheduler.class); 20 | 21 | @Autowired 22 | SpringBean springBean; 23 | 24 | @JobRunnerItem(shardValue = "333") 25 | public Result runJob1(JobContext jobContext) throws Throwable { 26 | try { 27 | Thread.sleep(1000L); 28 | 29 | springBean.hello(); 30 | 31 | LOGGER.info("runJob3 我要执行:" + jobContext.getJob()); 32 | BizLogger bizLogger = jobContext.getBizLogger(); 33 | // 会发送到 LTS (JobTracker上) 34 | bizLogger.info("测试,业务日志啊啊啊啊啊"); 35 | 36 | } catch (Exception e) { 37 | LOGGER.info("Run job failed!", e); 38 | return new Result(Action.EXECUTE_LATER, e.getMessage()); 39 | } 40 | return new Result(Action.EXECUTE_SUCCESS, "执行成功了,哈哈"); 41 | } 42 | 43 | @JobRunnerItem(shardValue = "444") 44 | public void runJob2(JobContext jobContext) throws Throwable { 45 | try { 46 | springBean.hello(); 47 | 48 | LOGGER.info("runJob4 我要执行"); 49 | BizLogger bizLogger = jobContext.getBizLogger(); 50 | // 会发送到 LTS (JobTracker上) 51 | bizLogger.info("测试,业务日志啊啊啊啊啊"); 52 | } catch (Exception e) { 53 | LOGGER.info("Run job failed!", e); 54 | } 55 | } 56 | 57 | } 58 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-springboot-shard/src/main/java/com/github/ltsopensource/example/SpringBean.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example; 2 | 3 | import org.springframework.stereotype.Component; 4 | 5 | /** 6 | * 测试bean 注入 7 | * @author Robert HG (254963746@qq.com) on 8/4/15. 8 | */ 9 | @Component 10 | public class SpringBean { 11 | 12 | public void hello(){ 13 | System.out.println("我是SpringBean,我执行了"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-springboot-shard/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | lts.tasktracker.cluster-name=test_cluster 2 | lts.tasktracker.registry-address=zookeeper://127.0.0.1:2181 3 | #lts.tasktracker.work-threads=64 4 | lts.tasktracker.node-group=test_trade_TaskTracker 5 | #lts.tasktracker.dispatch-runner.enable=true 6 | #lts.tasktracker.dispatch-runner.shard-value=taskId 7 | lts.tasktracker.configs.job.fail.store=mapdb -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-springboot-shard/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | 2 | log4j.rootLogger=INFO,stdout 3 | 4 | log4j.appender.stdout.Threshold=INFO 5 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 6 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 7 | log4j.appender.stdout.layout.ConversionPattern=%d [%t] (%F:%L) %-5p %c %x - %m%n -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-tester/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | lts-example-tasktracker 7 | com.github.ltsopensource 8 | 1.7.2-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | lts-example-tasktracker-tester 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-tester/src/main/java/com/github/ltsopensource/example/TestJobRunner.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example; 2 | 3 | import com.github.ltsopensource.core.domain.Action; 4 | import com.github.ltsopensource.core.logger.Logger; 5 | import com.github.ltsopensource.core.logger.LoggerFactory; 6 | import com.github.ltsopensource.tasktracker.Result; 7 | import com.github.ltsopensource.tasktracker.logger.BizLogger; 8 | import com.github.ltsopensource.tasktracker.runner.JobContext; 9 | import com.github.ltsopensource.tasktracker.runner.JobRunner; 10 | 11 | /** 12 | * @author Robert HG (254963746@qq.com) on 8/19/14. 13 | */ 14 | public class TestJobRunner implements JobRunner { 15 | 16 | private static final Logger LOGGER = LoggerFactory.getLogger(TestJobRunner.class); 17 | 18 | @Override 19 | public Result run(JobContext jobContext) throws Throwable { 20 | try { 21 | BizLogger bizLogger = jobContext.getBizLogger(); 22 | 23 | // TODO 业务逻辑 24 | LOGGER.info("我要执行:" + jobContext); 25 | // 会发送到 LTS (JobTracker上) 26 | bizLogger.info("测试,业务日志啊啊啊啊啊"); 27 | 28 | } catch (Exception e) { 29 | LOGGER.info("Run job failed!", e); 30 | return new Result(Action.EXECUTE_FAILED, e.getMessage()); 31 | } 32 | return new Result(Action.EXECUTE_SUCCESS, "执行成功了,哈哈"); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /lts-example-tasktracker/lts-example-tasktracker-tester/src/main/java/com/github/ltsopensource/example/TestJobRunnerTester.java: -------------------------------------------------------------------------------- 1 | package com.github.ltsopensource.example; 2 | 3 | import com.github.ltsopensource.core.domain.Job; 4 | import com.github.ltsopensource.core.json.JSON; 5 | import com.github.ltsopensource.tasktracker.Result; 6 | import com.github.ltsopensource.tasktracker.runner.JobContext; 7 | import com.github.ltsopensource.tasktracker.runner.JobExtInfo; 8 | import com.github.ltsopensource.tasktracker.runner.JobRunner; 9 | import com.github.ltsopensource.tasktracker.runner.JobRunnerTester; 10 | 11 | /** 12 | * @author Robert HG (254963746@qq.com) on 9/13/15. 13 | */ 14 | public class TestJobRunnerTester extends JobRunnerTester { 15 | 16 | public static void main(String[] args) throws Throwable { 17 | // Mock Job 数据 18 | Job job = new Job(); 19 | job.setTaskId("2313213"); 20 | 21 | JobContext jobContext = new JobContext(); 22 | jobContext.setJob(job); 23 | 24 | JobExtInfo jobExtInfo = new JobExtInfo(); 25 | jobExtInfo.setRetry(false); 26 | 27 | jobContext.setJobExtInfo(jobExtInfo); 28 | 29 | // 运行测试 30 | TestJobRunnerTester tester = new TestJobRunnerTester(); 31 | Result result = tester.run(jobContext); 32 | System.out.println(JSON.toJSONString(result)); 33 | } 34 | 35 | @Override 36 | protected void initContext() { 37 | // TODO 初始化Spring容器 38 | } 39 | 40 | @Override 41 | protected JobRunner newJobRunner() { 42 | return new TestJobRunner(); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /lts-example-tasktracker/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | lts-examples 7 | com.github.ltsopensource 8 | 1.7.2-SNAPSHOT 9 | 10 | 4.0.0 11 | pom 12 | 13 | lts-example-tasktarcker-springboot 14 | lts-example-tasktracker-java 15 | lts-example-tasktracker-spring-xml 16 | lts-example-tasktracker-spring-annotation-shard 17 | lts-example-tasktracker-spring-xml-shard 18 | lts-example-tasktracker-spring-annotation 19 | lts-example-tasktracker-springboot-shard 20 | lts-example-tasktracker-tester 21 | 22 | lts-example-tasktracker 23 | 24 | 25 | 26 | com.github.ltsopensource 27 | lts 28 | 29 | 30 | log4j 31 | log4j 32 | 33 | 34 | com.github.sgroschupf 35 | zkclient 36 | 37 | 38 | io.netty 39 | netty-all 40 | 41 | 42 | com.alibaba 43 | fastjson 44 | 45 | 46 | org.mapdb 47 | mapdb 48 | 49 | 50 | org.javassist 51 | javassist 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | com.github.ltsopensource 7 | lts-examples 8 | 1.7.2-SNAPSHOT 9 | 10 | lts-example-jobtracker 11 | lts-example-tasktracker 12 | lts-example-jobclient 13 | lts-example-monitor 14 | lts-example-quartz 15 | 16 | 17 | 18 | 2.7.3 19 | 1.2.7 20 | 1.8 21 | 2.9.1 22 | 0.1 23 | 3.4.5 24 | 3.0.2 25 | 1.0.0-rc1 26 | 4.11 27 | 4.0.20.Final 28 | 1.7.5 29 | 1.2.16 30 | 1.6 31 | 1.0.14 32 | 5.1.26 33 | 5.0.73 34 | 3.10.1 35 | 1.4.189 36 | 4.2.5.RELEASE 37 | 2.0.9 38 | 4.0.38 39 | 2.0-beta10 40 | 2.4.5 41 | 2.6.3 42 | 1.7.2 43 | 1.5.4 44 | 1.3.3.RELEASE 45 | 1.7.2-SNAPSHOT 46 | 2.2.2 47 | 3.20.0-GA 48 | 49 | 50 | pom 51 | 52 | 53 | 54 | com.github.ltsopensource 55 | lts 56 | ${lts.version} 57 | 58 | 59 | log4j 60 | log4j 61 | ${log4j.version} 62 | 63 | 64 | com.github.sgroschupf 65 | zkclient 66 | ${zkclient.version} 67 | 68 | 69 | log4j 70 | log4j 71 | 72 | 73 | 74 | 75 | org.apache.curator 76 | curator-recipes 77 | ${curator.version} 78 | 79 | 80 | redis.clients 81 | jedis 82 | ${jedis.version} 83 | 84 | 85 | com.sleepycat 86 | je 87 | ${sleepycat.version} 88 | 89 | 90 | org.rocksdb 91 | rocksdbjni 92 | ${rocksdbjni.version} 93 | 94 | 95 | org.fusesource.leveldbjni 96 | leveldbjni-all 97 | ${leveldbjni.version} 98 | 99 | 100 | org.springframework 101 | spring-core 102 | ${springframework.version} 103 | 104 | 105 | org.springframework 106 | spring-beans 107 | ${springframework.version} 108 | 109 | 110 | org.springframework 111 | spring-context 112 | ${springframework.version} 113 | 114 | 115 | org.springframework 116 | spring-context-support 117 | ${springframework.version} 118 | 119 | 120 | org.springframework 121 | spring-tx 122 | ${springframework.version} 123 | 124 | 125 | org.apache.mina 126 | mina-core 127 | ${mina.version} 128 | 129 | 130 | io.netty 131 | netty-all 132 | ${netty.version} 133 | 134 | 135 | com.caucho 136 | hessian 137 | ${hessian.version} 138 | 139 | 140 | org.mapdb 141 | mapdb 142 | ${mapdb.version} 143 | 144 | 145 | com.alibaba 146 | fastjson 147 | ${fastjson.version} 148 | 149 | 150 | com.fasterxml.jackson.core 151 | jackson-core 152 | ${jackson.version} 153 | 154 | 155 | com.fasterxml.jackson.core 156 | jackson-databind 157 | ${jackson.version} 158 | 159 | 160 | org.mongodb.morphia 161 | morphia 162 | ${morphia.version} 163 | 164 | 165 | org.mongodb 166 | mongo-java-driver 167 | ${mongo.driver.version} 168 | 169 | 170 | mysql 171 | mysql-connector-java 172 | ${mysql.version} 173 | 174 | 175 | com.alibaba 176 | druid 177 | ${druid.version} 178 | 179 | 180 | org.quartz-scheduler 181 | quartz 182 | ${quartz.version} 183 | 184 | 185 | org.springframework.boot 186 | spring-boot 187 | ${spring.boot.version} 188 | 189 | 190 | org.springframework.boot 191 | spring-boot-autoconfigure 192 | ${spring.boot.version} 193 | 194 | 195 | org.javassist 196 | javassist 197 | ${javassist.version} 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | maven-compiler-plugin 206 | 207 | 1.6 208 | 1.6 209 | UTF-8 210 | 211 | 212 | 213 | maven-source-plugin 214 | 2.2.1 215 | 216 | true 217 | 218 | 219 | 220 | compile 221 | 222 | jar 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | --------------------------------------------------------------------------------