我有一个场景,我需要解析平面文件并将这些记录处理成mysql数据库插入(架构已经存在)。
我正在使用FlatFileItemReader来解析文件,并使用JdbcCursorItemWriter插入数据库。
我也使用ItemProcessor来转换任何列值或跳过我不想要的记录。
我的问题是,其中一些插件需要有一个外键到其他已经包含数据的表。
所以我想在selectProcessor逻辑中做一个select来检索ID并更新pojo。
这是最好的方法吗?我可以考虑替代方案,因为我刚刚开始写这一切。
谢谢!
答案 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();
}
}