Spring Batch:ItemProcessor查询数据库?

时间:2015-05-28 13:04:30

标签: mysql spring-batch batch-processing processor reader

我有一个场景,我需要解析平面文件并将这些记录处理成mysql数据库插入(架构已经存在)。

我正在使用FlatFileItemReader来解析文件,并使用JdbcCursorItemWriter插入数据库。

我也使用ItemProcessor来转换任何列值或跳过我不想要的记录。

我的问题是,其中一些插件需要有一个外键到其他已经包含数据的表。

所以我想在selectProcessor逻辑中做一个select来检索ID并更新pojo。

这是最好的方法吗?我可以考虑替代方案,因为我刚刚开始写这一切。

谢谢!

2 个答案:

答案 0 :(得分:2)

Spring Batch步骤中的ItemProcessor通常用于丰富数据,并查询数据库中的常见内容。

对于记录,另一个选项是在插入语句中使用子选择来获取插入记录时的外键值。这可能会更高效,因为它会删除额外的数据库命中。

答案 1 :(得分:0)

批处理过程 - 如果您需要使用批量监听器批量调用任何地方使用以下方法

以下我写的代码,为我工作 -

在您的主类中 - 将您的应用程序上下文加载到静态变量中 - APP_CONTEXT

如果您没有使用基于XML的方法 - 然后通过自动连接获取dataSource,然后您可以使用下面的代码 -

 Connection conn = null;
PreparedStatement pstmt= null;

try {


DataSource dataSource = (DataSource) Main.APP_CONTEXT
        .getBean("dataSource");

 conn = dataSource.getConnection();
 pstmt = conn.prepareStatement(" your SQL query to insert ");

pstmtMstr.executeQuery();

} catch (Exception e) {

}finally{

    if(pstmt!=null){
        pstmt.close();
    }if(conn!=null){
        conn.close();
    }


}