Revise documentation notes on getParameterType performance issues

See gh-25679

(cherry picked from commit 939c76c4a5)
This commit is contained in:
Juergen Hoeller
2020-09-05 13:00:06 +02:00
parent c5d3bcfb14
commit 400b39da3f
2 changed files with 7 additions and 8 deletions

View File

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

View File

@@ -3498,7 +3498,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 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` 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) (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, Alternatively, you might consider specifying the corresponding JDBC types explicitly,
either through a 'BatchPreparedStatementSetter' (as shown earlier), through an explicit type either through a 'BatchPreparedStatementSetter' (as shown earlier), through an explicit type