如何在Spring Batch中执行多个查询(特别是使用LAST_INSERT_ID())

时间:2018-02-17 01:25:03

标签: mysql spring csv spring-batch

我正在尝试编写一个Spring Batch Starter作业,该作业读取CSV文件并将记录插入MySQL DB。当它开始时我希望将开始时间保存在跟踪表中,并在结束时将结束时间保存在同一个表中。表结构如下:

1 1 2 3 5 8
1 1 2 3 5 8

我无法找到执行此类操作的示例项目。我相信这需要是一个可以处理多个查询的Spring Batch Starter项目。即。

//插入开始时间

TRACKING : id, start_time, end_time

DATA: id, product, version, server, fk_trk_id

//获取外键的最后插入ID

1. INSERT INTO tracking (start_time) VALUES (NOW(6));

//从CSV中读取数据并将数据插入数据'数据库表

2. SET @last_id_in_tracking = LAST_INSERT_ID();

//插入结束时间

3. INSERT INTO data (product, version, server, fk_trk_id) VALUES (mysql, 5.1.42, Server1, @last_id_in_tracking);
4. INSERT INTO data (product, version, server, fk_trk_id) VALUES (linux, 7.0, Server2, @last_id_in_tracking);
5. INSERT INTO data (product, version, server, fk_trk_id) VALUES (java, 8.0, Server3, @last_id_in_tracking);

我想了解如何在同一个Spring Batch Starter作业中将这些查询用于多个表的示例代码和说明。

编辑部分的开头 - 附加问题

我还有一个问题。在我的实体中,我将它们设置为表示与注释的关系(即@ManyToOne,@ JoinColumn)......

在您的代码中,我如何从引用的对象中获取trackingId?让我解释一下:

我的代码(Data.java):

6. UPDATE tracking SET end_time = NOW(6) WHERE fk_trk_id = @last_id_in_table1;

您的代码(Data.java):

@JsonManagedReference
@ManyToOne
@JoinColumn(name = "id")
private Tracking tracking;

您的代码(JobConfig.java):

@Column(name = "fk_trk_id")
private Long fkTrkId;

如何使用" setFkTrkId"设置ID?当我的实体中的关系是一个对象?

编辑部分结束 - 附加问题

1 个答案:

答案 0 :(得分:2)

这是一个示例应用程序,可以满足您的要求。有关详细信息,请参阅自述文件。

https://github.com/joechev/examples/tree/master/csv-reader-db-writer