Browse Source

Revise documentation notes on getParameterType performance issues

See gh-25679
pull/25798/head
Juergen Hoeller 5 years ago
parent
commit
939c76c4a5
  1. 13
      spring-jdbc/src/main/java/org/springframework/jdbc/core/StatementCreatorUtils.java
  2. 2
      src/docs/asciidoc/data-access.adoc

13
spring-jdbc/src/main/java/org/springframework/jdbc/core/StatementCreatorUtils.java

@ -66,12 +66,11 @@ public abstract class StatementCreatorUtils { @@ -66,12 +66,11 @@ public abstract class StatementCreatorUtils {
* completely, i.e. to never even attempt to retrieve {@link PreparedStatement#getParameterMetaData()}
* for {@link StatementCreatorUtils#setNull} calls.
* <p>The default is "false", trying {@code getParameterType} calls first and falling back to
* {@link PreparedStatement#setNull} / {@link PreparedStatement#setObject} calls based on well-known
* behavior of common databases. Spring records JDBC drivers with non-working {@code getParameterType}
* implementations and won't attempt to call that method for that driver again, always falling back.
* <p>Consider switching this flag to "true" if you experience misbehavior at runtime, e.g. with
* a connection pool setting back the {@link PreparedStatement} instance in case of an exception
* thrown from {@code getParameterType} (as reported on JBoss AS 7).
* {@link PreparedStatement#setNull} / {@link PreparedStatement#setObject} calls based on
* well-known behavior of common databases.
* <p>Consider switching this flag to "true" if you experience misbehavior at runtime,
* e.g. with connection pool issues in case of an exception thrown from {@code getParameterType}
* (as reported on JBoss AS 7) or in case of performance problems (as reported on PostgreSQL).
*/
public static final String IGNORE_GETPARAMETERTYPE_PROPERTY_NAME = "spring.jdbc.getParameterType.ignore";
@ -266,7 +265,7 @@ public abstract class StatementCreatorUtils { @@ -266,7 +265,7 @@ public abstract class StatementCreatorUtils {
}
else if (databaseProductName.startsWith("DB2") ||
jdbcDriverName.startsWith("jConnect") ||
jdbcDriverName.startsWith("SQLServer")||
jdbcDriverName.startsWith("SQLServer") ||
jdbcDriverName.startsWith("Apache Derby")) {
sqlTypeToUse = Types.VARCHAR;
}

2
src/docs/asciidoc/data-access.adoc

@ -4449,7 +4449,7 @@ While this usually works well, there is a potential for issues (for example, wit @@ -4449,7 +4449,7 @@ While this usually works well, there is a potential for issues (for example, wit
case, which can be expensive with your JDBC driver. You should use a recent driver
version and consider setting the `spring.jdbc.getParameterType.ignore` property to `true`
(as a JVM system property or in a `spring.properties` file in the root of your classpath)
if you encounter a performance issue -- for example, as reported on Oracle 12c (SPR-16139).
if you encounter a performance issue (as reported on Oracle 12c, JBoss and PostgreSQL).
Alternatively, you might consider specifying the corresponding JDBC types explicitly,
either through a 'BatchPreparedStatementSetter' (as shown earlier), through an explicit type

Loading…
Cancel
Save