このトピックでは、SpringBatch 接続の例を示します。
環境構成
JDK 1.8
OceanBase Database V3.x (MySQL モード)
SpringBoot に基づいて統合された SpringBatch
依存関係の構成
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<!--データベース ドライバー-->
<dependency>
<groupId>com.oceanbase</groupId>
<artifactId>oceanbase-client</artifactId>
<version>2.4.0</version>
</dependency>
<!--エンティティ クラスに基づくテーブルの自動作成-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--その他の SpringBoot コア依存関係はここでは省略されています。-->構成ファイル
# yml ファイル:
spring:
datasource:
url: jdbc:oceanbase://xxx.xxx.xxx.xxx:3306/test
driver-class-name: com.oceanbase.jdbc.Driver
username: a****
password: ******
jpa:
hibernate:
ddl-auto: updateサンプル コード
次の手順を実行して、データベース書き込みクラスのメソッドを呼び出してデータを書き込みます。
必要なクラスを作成します。
エンティティ クラス:
PeopleおよびPeopleDESC//基本 people クラス @Entity @Table(name = "PEOPLE") public class People { @Id @GeneratedValue private int id; private String lastName; private String firstName; //省略 }//データ処理後の peopledesc クラス。desc 属性が追加されています。 @Entity @Table(name = "OK_PEOPLE") public class PeopleDESC { @Id @GeneratedValue //strategy = AUTO / IDENTITY / SEQUENCE 3 つの主キー生成戦略はいずれもサポートされていません。 private int id; private String lastName; private String firstName; private String desc1; //省略 }バッチ処理クラス:
AddPeopleDescProcessorおよびAddDescPeopleWriter//people クラスに desc 属性を追加し、peopledesc クラスを返すプロセッサ。 public class AddPeopleDescProcessor implements ItemProcessor<People, PeopleDESC> { public PeopleDESC process(People item) throws Exception { return new PeopleDESC(item.getId() , item.getLastName(), item.getFirstName(), Thread.currentThread().getName()); } }peopledesc をデータベースのクラスに書き込みます。
//peopledesc をデータベースのクラスに書き込みます。 public class AddDescPeopleWriter implements ItemWriter<PeopleDESC> { private JdbcTemplate jdbcTemplate; public void setDataSource(DataSource dataSource) { this.jdbcTemplate = new JdbcTemplate(dataSource); } public JdbcTemplate getJdbcTemplate() { return jdbcTemplate; } public void write(List<? extends PeopleDESC> items) throws Exception { for (PeopleDESC peopleDESC : items) { this.jdbcTemplate .update("insert into ok_people (id,first_name,last_name,desc1) values (?, ?, ?, ?)", peopleDESC.getId(), peopleDESC.getFirstName(), peopleDESC.getLastName(), peopleDESC.getDesc()); } } }spring-data-jpaプロジェクトを開始すると、エンティティ クラスPeopleおよびPeopleDESCに基づいてテーブルが自動的に作成されます。サンプル結果:
テスト データを
peopleにバッチで追加します。public void addData(){ jdbcTemplate = new JdbcTemplate(dataSource); StringBuilder stringBuilder = new StringBuilder(""); for (int i = 1 ; i<=100 ; i++){ stringBuilder.append("insert into people values ("+i+",'first_test"+i+"','last_test"+i+"');"); jdbcTemplate.execute(stringBuilder.toString()); stringBuilder.delete(0, stringBuilder.length()); } }テスト結果:

バッチ処理メソッドを実行します。
public void writerTest() throws Exception { //people テーブルの結果セットを取得します。 String sql = "select * from people;"; preparedStatement = dataSource.getConnection().prepareStatement(sql); ResultSet resultSet = preparedStatement.executeQuery(); List list = new ArrayList<PeopleDESC>(); //desc 属性を追加するプロセッサを使用して結果セットを処理し、データを List<PeopleDESC> にカプセル化します。 while (resultSet.next()){ People people = peopleRowMapper.mapRow(resultSet, resultSet.getRow()); PeopleDESC desc = addPeopleDescProcessor.process(people); list.add(desc); } //データベース書き込みクラスのメソッドを呼び出してデータを書き込みます。 addDescPeopleWriter.setDataSource(dataSource); addDescPeopleWriter.write(list); }