spring批处理调用存储过程

时间:2018-02-09 10:50:38

标签: java spring stored-procedures spring-batch spring-jdbc

我正在编写Spring批处理应用程序:

  1. read多个csv文件数据
  2. 对数据执行process
  3. 然后write到sql server数据库
  4. 我有一个存储过程,它接受输入数据,价格,营业日期和安全ID的关闭。如果记录已存在,则过程UPDATE如果不存在INSERT

    我想在我的insert()方法中调用此存储过程,如下所示:

    @Slf4j
    public class PriceWriter implements ItemWriter<Price> {
    
    
        private final PriceDAO pd;
    
        public PriceDAO(PriceDAO pd) {
            this.pd = pd;
        }
    
        @Override
        public void write(List<? extends Price> items) throws Exception {
            log.info("Ready to write {} items " + items.size());
            pd.insert(items);
        }
    }
    
    
    
    @Repository
    public class PriceDAOImpl implements PriceDAO {
    
        @Autowired
        private JdbcTemplate jdbcTemplate;
    
        @Override
        public void insert(List<? extends Price> prices) {
            prices.forEach(e -> {
                System.out.println("Calling Stored Procedure For Records:  " + e.toString());
            });
        }
    }
    

    我见过的所有INSERT语句都没有遇到ItemWriter write()上下文中调用存储过程的任何内容。

    我应该如何在insert()方法中调用我的存储过程,还是应该在Spring批处理应用程序中调用存储过程?有人可以用一个例子来证明吗?

1 个答案:

答案 0 :(得分:0)

您可以执行任何操作来调用存储过程来存储数据。没有ItemWriter可以做到这一点但是,你可以采用两种方法:

  • Direclty在作家中调用您的SP
  • 实施服务,制作SP的映射并调用它。