Spring Batch:ItemProcessor查询数据库?

4
我有一个场景,需要解析平面文件并将这些记录处理为mysql数据库插入(模式已经存在)。
我使用FlatFileItemReader解析文件,并使用JdbcCursorItemWriter将其插入到数据库中。
我还使用ItemProcessor转换任何列值或跳过我不想要的记录。
我的问题是,其中一些插入需要有一个外键指向其他已经有数据的表。
因此,我考虑在ItemProcessor逻辑中执行选择以检索ID并更新pojo。
这是最好的方法吗?由于我刚开始编写所有内容,所以我可以考虑其他替代方案。
谢谢!
2个回答

4
在Spring Batch步骤中,ItemProcessor通常用于数据增强和查询数据库等操作。值得注意的是,另一种选择是在插入语句中使用子查询来获取外键值作为记录被插入时的值。这样做可能更具性能,因为它避免了额外的数据库访问。

谢谢Michael。我想像这样做是很常见的。没有想到在插入中使用子查询,这是个不错的性能提示,谢谢。 - hell--raiser

0

对于批处理 - 如果您需要在批处理中的任何位置调用,请使用以下方法

我编写的下面的代码对我有效--

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

如果您不使用基于XML的方法 - 然后通过自动装配获取数据源,然后可以使用以下代码 -

 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();
    }


}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接