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作成を行います。