tohnamanブログ

東村山に生息するWindows好きな太っちょオヤジプログラマのブログ

Spring Batch その3

前回から時間が経過していますが、Spring Batch の続きです。


今回から実際にSpring BatchのJobを作成します。
完成したモノをGitHubここ に置いています。

今回は、Jobを起動するために必要な共通設定を説明します。

POM

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <name>spring-batch-sample</name>
  <description>Spring Batch Sample</description>
  <groupId>jp.tokyo.higashimurayama.tohnaman</groupId>
  <artifactId>spring-batch-sample</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.1.RELEASE</version>
    <relativePath/>
  </parent>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
  </properties>

  <dependencies>

    <!-- Spring Batch -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-batch</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.batch</groupId>
      <artifactId>spring-batch-test</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-configuration-processor</artifactId>
      <optional>true</optional>
    </dependency>

    <!-- SQLite -->
    <dependency>
      <groupId>org.xerial</groupId>
      <artifactId>sqlite-jdbc</artifactId>
    </dependency>

    <!-- Mybatis -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.1</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.0</version>
    </dependency>

    <!-- Apache Commons -->
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.4</version>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.5</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <!-- MyBatis Generator -->
      <plugin>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-maven-plugin</artifactId>
        <version>1.3.2</version>
      </plugin>

      <!-- Executable Jar -->
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>repackage</goal>
            </goals>
            <configuration>
              <mainClass>org.springframework.batch.core.launch.support.CommandLineJobRunner</mainClass>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

Spring BootのSpring Batchを使用し、実行可能jarを作成するように設定しています。

ディレクトリ、パッケージ構成

├─src/main/java
│   ├─jp.tokyo.higashimurayama.tohnaman.batch.core
│   │   └ BatchContext.java
│   │
│   ├─jp.tokyo.higashimurayama.tohnaman.batch.core.config
│   │   ├  DataSourceConfig.java
│   │   └  MyBatisConfig.java
│   │
│   ├─jp.tokyo.higashimurayama.tohnaman.batch.jobs.csv2db
│   │   ├ AddressDto.java
│   │   ├ Csv2dbJob01Config.java
│   │   └ CsvToModelItemProcessor.java
│   │
│   ├─jp.tokyo.higashimurayama.tohnaman.batch.mybatis.mapper
│   │   └ MstAddressMapper.java
│   │
│   └─jp.tokyo.higashimurayama.tohnaman.batch.mybatis.model
│        ├ MstAddress.java
│        └ MstAddressExample.java
│
├─src/main/resources
│   │   └ application.properties
│   │
│   └─jp.tokyo.higashimurayama.tohnaman.batch.mybatis.mapper
│          └ MstAddressMapper.xml
│
├─ main.sqlite
│
└─ pom.xml

DataSource設定

@Configuration
public class DataSourceConfig {

    @Bean
    public DataSource repoDataSource(JdbcConfig jdbcConfig) throws SQLException {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(jdbcConfig.getDriver());
        dataSource.setUrl(jdbcConfig.getUrl());
        dataSource.setUsername(jdbcConfig.getUsername());
        dataSource.setPassword(jdbcConfig.getPassword());
        return dataSource;
    }

    @Bean
    @ConfigurationProperties(prefix = "batch.database")
    public JdbcConfig repoJdbcConfig() {
        return new JdbcConfig();
    }

    private static class JdbcConfig {
        private String driver = "driver";
        private String url = "url";
        private String username = "username";
        private String password = "password";

        public String getDriver() {
            return driver;
        }

        @SuppressWarnings("unused")
        public void setDriver(String driver) {
            this.driver = driver;
        }

        public String getUrl() {
            return url;
        }

        @SuppressWarnings("unused")
        public void setUrl(String url) {
            this.url = url;
        }

        public String getUsername() {
            return username;
        }

        @SuppressWarnings("unused")
        public void setUsername(String username) {
            this.username = username;
        }

        public String getPassword() {
            return password;
        }

        @SuppressWarnings("unused")
        public void setPassword(String password) {
            this.password = password;
        }
    }
}

ネットにあったSpringのDataSource設定を流用しています。

DB接続情報

# DB接続設定 
batch.database.driver=org.sqlite.JDBC
batch.database.url=jdbc:sqlite:main.sqlite
batch.database.user=
batch.database.password=

SQLiteを使用する設定を定義しています。

MyBatis設定

@Configuration
@MapperScan(basePackages = "jp.tokyo.higashimurayama.tohnaman.batch.mybatis.mapper")
public class MyBatisConfig {

    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        sqlSessionFactoryBean.setTypeAliasesPackage("jp.tokyo.higashimurayama.tohnaman.batch.mybatis.model");
        return sqlSessionFactoryBean.getObject();
    }
}

MyBatis Generatorで作成したクラス、xmlの場所を定義します。

Batch用のApplicationContext

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@PropertySource("classpath:/application.properties")
@Import({ DataSourceConfig.class, MyBatisConfig.class })
public class BatchContext {
}

各JobでBatchContextをImportすることで、DataSource設定、MyBatis設定を利用します。


次回は、Job作成を行います。