diff --git a/spring-integration-jdbc/src/main/java/org/springframework/integration/jdbc/StoredProcExecutor.java b/spring-integration-jdbc/src/main/java/org/springframework/integration/jdbc/StoredProcExecutor.java index 7f0b0e918b5..f9556e1514c 100644 --- a/spring-integration-jdbc/src/main/java/org/springframework/integration/jdbc/StoredProcExecutor.java +++ b/spring-integration-jdbc/src/main/java/org/springframework/integration/jdbc/StoredProcExecutor.java @@ -62,6 +62,8 @@ public class StoredProcExecutor implements BeanFactoryAware, InitializingBean { private final DataSource dataSource; + private final Object jdbcCallOperationsMapMonitor = new Object(); + private Map> returningResultSetRowMappers = new HashMap<>(0); private EvaluationContext evaluationContext; @@ -296,7 +298,14 @@ private Map executeStoredProcedureInternal(Object input, String } private SimpleJdbcCallOperations obtainSimpleJdbcCall(String storedProcedureName) { - return this.jdbcCallOperationsMap.computeIfAbsent(storedProcedureName, this::createSimpleJdbcCall); + SimpleJdbcCallOperations operations = this.jdbcCallOperationsMap.get(storedProcedureName); + if (operations == null) { + synchronized (this.jdbcCallOperationsMapMonitor) { + operations = + this.jdbcCallOperationsMap.computeIfAbsent(storedProcedureName, this::createSimpleJdbcCall); + } + } + return operations; } //~~~~~Setters for Properties~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~