| /* |
| * Copyright 1999-2015 dangdang.com. |
| * <p> |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * </p> |
| */ |
| |
| package io.elasticjob.lite.example; |
| |
| import io.elasticjob.lite.config.JobCoreConfiguration; |
| import io.elasticjob.lite.config.dataflow.DataflowJobConfiguration; |
| import io.elasticjob.lite.config.script.ScriptJobConfiguration; |
| import io.elasticjob.lite.config.simple.SimpleJobConfiguration; |
| import io.elasticjob.lite.event.JobEventConfiguration; |
| import io.elasticjob.lite.event.rdb.JobEventRdbConfiguration; |
| import io.elasticjob.example.job.dataflow.JavaDataflowJob; |
| import io.elasticjob.example.job.simple.JavaSimpleJob; |
| import io.elasticjob.lite.api.JobScheduler; |
| import io.elasticjob.lite.config.LiteJobConfiguration; |
| import io.elasticjob.lite.reg.base.CoordinatorRegistryCenter; |
| import io.elasticjob.lite.reg.zookeeper.ZookeeperConfiguration; |
| import io.elasticjob.lite.reg.zookeeper.ZookeeperRegistryCenter; |
| import org.apache.commons.dbcp.BasicDataSource; |
| |
| import javax.sql.DataSource; |
| import java.io.IOException; |
| import java.nio.file.Files; |
| import java.nio.file.Path; |
| import java.nio.file.Paths; |
| import java.nio.file.attribute.PosixFilePermissions; |
| |
| public final class JavaMain { |
| |
| private static final int EMBED_ZOOKEEPER_PORT = 4181; |
| |
| private static final String ZOOKEEPER_CONNECTION_STRING = "localhost:" + EMBED_ZOOKEEPER_PORT; |
| |
| private static final String JOB_NAMESPACE = "elastic-job-example-lite-java"; |
| |
| // switch to MySQL by yourself |
| // private static final String EVENT_RDB_STORAGE_DRIVER = "com.mysql.jdbc.Driver"; |
| // private static final String EVENT_RDB_STORAGE_URL = "jdbc:mysql://localhost:3306/elastic_job_log"; |
| |
| private static final String EVENT_RDB_STORAGE_DRIVER = "org.h2.Driver"; |
| |
| private static final String EVENT_RDB_STORAGE_URL = "jdbc:h2:mem:job_event_storage"; |
| |
| private static final String EVENT_RDB_STORAGE_USERNAME = "sa"; |
| |
| private static final String EVENT_RDB_STORAGE_PASSWORD = ""; |
| |
| // CHECKSTYLE:OFF |
| public static void main(final String[] args) throws IOException { |
| // CHECKSTYLE:ON |
| EmbedZookeeperServer.start(EMBED_ZOOKEEPER_PORT); |
| CoordinatorRegistryCenter regCenter = setUpRegistryCenter(); |
| JobEventConfiguration jobEventConfig = new JobEventRdbConfiguration(setUpEventTraceDataSource()); |
| setUpSimpleJob(regCenter, jobEventConfig); |
| setUpDataflowJob(regCenter, jobEventConfig); |
| setUpScriptJob(regCenter, jobEventConfig); |
| } |
| |
| private static CoordinatorRegistryCenter setUpRegistryCenter() { |
| ZookeeperConfiguration zkConfig = new ZookeeperConfiguration(ZOOKEEPER_CONNECTION_STRING, JOB_NAMESPACE); |
| CoordinatorRegistryCenter result = new ZookeeperRegistryCenter(zkConfig); |
| result.init(); |
| return result; |
| } |
| |
| private static DataSource setUpEventTraceDataSource() { |
| BasicDataSource result = new BasicDataSource(); |
| result.setDriverClassName(EVENT_RDB_STORAGE_DRIVER); |
| result.setUrl(EVENT_RDB_STORAGE_URL); |
| result.setUsername(EVENT_RDB_STORAGE_USERNAME); |
| result.setPassword(EVENT_RDB_STORAGE_PASSWORD); |
| return result; |
| } |
| |
| private static void setUpSimpleJob(final CoordinatorRegistryCenter regCenter, final JobEventConfiguration jobEventConfig) { |
| JobCoreConfiguration coreConfig = JobCoreConfiguration.newBuilder("javaSimpleJob", "0/5 * * * * ?", 3).shardingItemParameters("0=Beijing,1=Shanghai,2=Guangzhou").build(); |
| SimpleJobConfiguration simpleJobConfig = new SimpleJobConfiguration(coreConfig, JavaSimpleJob.class.getCanonicalName()); |
| new JobScheduler(regCenter, LiteJobConfiguration.newBuilder(simpleJobConfig).build(), jobEventConfig).init(); |
| } |
| |
| private static void setUpDataflowJob(final CoordinatorRegistryCenter regCenter, final JobEventConfiguration jobEventConfig) { |
| JobCoreConfiguration coreConfig = JobCoreConfiguration.newBuilder("javaDataflowElasticJob", "0/5 * * * * ?", 3).shardingItemParameters("0=Beijing,1=Shanghai,2=Guangzhou").build(); |
| DataflowJobConfiguration dataflowJobConfig = new DataflowJobConfiguration(coreConfig, JavaDataflowJob.class.getCanonicalName(), true); |
| new JobScheduler(regCenter, LiteJobConfiguration.newBuilder(dataflowJobConfig).build(), jobEventConfig).init(); |
| } |
| |
| private static void setUpScriptJob(final CoordinatorRegistryCenter regCenter, final JobEventConfiguration jobEventConfig) throws IOException { |
| JobCoreConfiguration coreConfig = JobCoreConfiguration.newBuilder("scriptElasticJob", "0/5 * * * * ?", 3).build(); |
| ScriptJobConfiguration scriptJobConfig = new ScriptJobConfiguration(coreConfig, buildScriptCommandLine()); |
| new JobScheduler(regCenter, LiteJobConfiguration.newBuilder(scriptJobConfig).build(), jobEventConfig).init(); |
| } |
| |
| private static String buildScriptCommandLine() throws IOException { |
| if (System.getProperties().getProperty("os.name").contains("Windows")) { |
| return Paths.get(JavaMain.class.getResource("/script/demo.bat").getPath().substring(1)).toString(); |
| } |
| Path result = Paths.get(JavaMain.class.getResource("/script/demo.sh").getPath()); |
| Files.setPosixFilePermissions(result, PosixFilePermissions.fromString("rwxr-xr-x")); |
| return result.toString(); |
| } |
| } |