我有这个方法
public void importarAdiantamento(ArrayList<LayoutArquivo> arquivos, Usuario usuario) throws Exception {
try {
for(LayoutArquivo arquivo : arquivos) {
DateFormat fmt = new SimpleDateFormat("dd/MM/yyyy");
SqlParameterSource in = new MapSqlParameterSource()
.addValue("DATAVCM", new java.sql.Date(fmt.parse(arquivo.getVencimento()).getTime()))
.addValue("VALOR", arquivo.getValor())
.addValue("MOTIVO", arquivo.getCodMotivo())
.addValue("EMPRESA", arquivo.getCodEmpresa())
.addValue("NPARCELA", 1)
.addValue("TOTALPARCELA", 1)
.addValue("DOCUMENTO", arquivo.getDocumento())
.addValue("FUNCIONARIO", arquivo.getCodFunc())
.addValue("HISTORICO", "VALE IMPORTADO")
.addValue("EXPORTAR", 0)
.addValue("USUARIO", usuario.getCodigousuario())
.addValue("DUPLIC", 0)
.addValue("PROTOCOLO", "0");
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate)
.withProcedureName(AdiantamentoQueries.importarAdiantamento())
.declareParameters(
new SqlParameter("DATAVCM", Types.DATE),
new SqlParameter("VALOR", Types.NUMERIC),
new SqlParameter("MOTIVO", Types.NUMERIC),
new SqlParameter("EMPRESA", Types.NUMERIC),
new SqlParameter("NPARCELA", Types.NUMERIC),
new SqlParameter("TOTALPARCELA", Types.NUMERIC),
new SqlParameter("DOCUMENTO", Types.VARCHAR),
new SqlParameter("FUNCIONARIO", Types.NUMERIC),
new SqlParameter("HISTORICO", Types.VARCHAR),
new SqlParameter("EXPORTAR", Types.NUMERIC),
new SqlParameter("USUARIO", Types.NUMERIC),
new SqlOutParameter("DUPLIC", Types.NUMERIC),
new SqlParameter("PROTOCOLO", Types.VARCHAR)
);
System.out.println("executando o documento " + arquivo.getDocumento());
jdbcCall.execute(in);
System.out.println("terminou de executar o documento" + arquivo.getDocumento());
}
}catch (Exception e) {
throw new Exception(e);
}
}
抵达jdbcCall.execute(in);
行时
执行挂起就像你在等待而不是继续。
不知道发生了什么
我在控制台中打印信息,只打印了
executando o documento 72527
由于我只能在成功完成所有for
条记录时提交,因此我放置了@Transactional
注释,但它不起作用
运行后这个方法是java,这是我数据库中的一个会话:
答案 0 :(得分:1)
1)如果您在for循环中运行jdbcCall,最好在jdbcCall
之外声明for loop
对象。您不需要在每次迭代中创建此对象。
2)当您使用@Transactional
时,该方法不应使用try-catch
块处理异常。因此,请删除try-catch块并注释下面提到的方法。
@Transactional(rollbackFor=Exception.class)
答案 1 :(得分:1)
希望我帮助过你。