0

我创建了一个StoredProcedureItemReader,我想StoredProcedureItemReader @Bean从我的ItemProcessor. 这是我的存储过程项阅读器 bean

@Bean
public StoredProcedureItemReader<User> jdbcClusterObjectReader(JdbcTemplate jdbcTemplate) throws Exception {
    StoredProcedureItemReader<User> storedProcedureItemReader = new StoredProcedureItemReader<>();
    storedProcedureItemReader.setFunction(true);
    storedProcedureItemReader.setDataSource(Objects.requireNonNull(jdbcTemplate.getDataSource()));
    storedProcedureItemReader.setProcedureName("function2");
    storedProcedureItemReader.setParameters(
            new SqlParameter[] {
                    new SqlParameter("_id", Types.VARCHAR)
            });
    storedProcedureItemReader.setCurrentItemCount(0);
    storedProcedureItemReader.setConnectionAutoCommit(false);
    storedProcedureItemReader.setRowMapper(new UserRowMapper());
    storedProcedureItemReader.afterPropertiesSet();
    System.out.println(storedProcedureItemReader.getSql());
    storedProcedureItemReader.setVerifyCursorPosition(false);
    return storedProcedureItemReader;
}

这是我的实现ItemProcessor

@StepScope
public class UserDataProcessor implements ItemProcessor<User, User> {
@Autowired
private ApplicationContext appContext;

@Override
public User process(User item) throws Exception {
    StoredProcedureItemReader<User> clusterDetailStoredProcedureItemReader = (StoredProcedureItemReader<User>) appContext.getBean("jdbcClusterObjectReader");
    clusterDetailStoredProcedureItemReader.open(new ExecutionContext());
    clusterDetailStoredProcedureItemReader.setParameters(new SqlParameter[]{});
    ClusterDetail clusterDetail = clusterDetailStoredProcedureItemReader.read();
    return clusterDetail;
}

}

这是我的 postgres 函数

CREATE OR REPLACE FUNCTION function2(_clusterid varchar) AS $$
....
END;$$ LANGUAGE plpgsql;

我不知道如何将当前用户 ID 传递给我创建的这个程序,请帮助,谢谢

4

0 回答 0