Java tutorial
/* * Copyright 2012-2013 the original author or authors. * * 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. */ package jp.yustam.batch; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; import org.springframework.batch.core.StepContribution; import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; import org.springframework.batch.core.scope.context.ChunkContext; import org.springframework.batch.core.step.tasklet.Tasklet; import org.springframework.batch.repeat.RepeatStatus; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration @EnableAutoConfiguration @ComponentScan @EnableBatchProcessing public class SampleBatchApplication { @Autowired private BatchConfig config; @Autowired private JobBuilderFactory jobs; @Autowired private StepBuilderFactory steps; @Bean protected Tasklet tasklet() { return new Tasklet() { @Override public RepeatStatus execute(StepContribution contribution, ChunkContext context) throws SQLException { System.out.println("Hello, world!"); System.out.println(config.getHost()); System.out.println(config.getPort()); String url = String.format("jdbc:postgresql://%s:%d/", config.getHost(), config.getPort()); Properties props = new Properties(); props.setProperty("user", "postgres"); // props.setProperty("password", "secret"); // props.setProperty("ssl", "true"); Connection conn = DriverManager.getConnection(url, props); Statement statement = conn.createStatement(); ResultSet rs = statement.executeQuery("SELECT * FROM company;"); while (rs.next()) { System.out.printf("%d %d %s\n", rs.getInt("id"), rs.getInt("code"), rs.getString("name")); } return RepeatStatus.FINISHED; } }; } @Bean public Job job() throws Exception { return this.jobs.get("job").start(step1()).build(); } @Bean protected Step step1() throws Exception { return this.steps.get("step1").tasklet(tasklet()).build(); } public static void main(String[] args) throws Exception { // System.exit is common for Batch applications since the exit code can be used to // drive a workflow System.exit(SpringApplication.exit(SpringApplication.run(SampleBatchApplication.class, args))); } }