diff --git a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/repository/database/support/SqlPagingQueryProviderFactoryBean.java b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/repository/database/support/SqlPagingQueryProviderFactoryBean.java index 6ec2d206..b9282dc9 100755 --- a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/repository/database/support/SqlPagingQueryProviderFactoryBean.java +++ b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/repository/database/support/SqlPagingQueryProviderFactoryBean.java @@ -17,6 +17,9 @@ package org.springframework.cloud.task.repository.database.support; import static org.springframework.cloud.task.repository.support.DatabaseType.DB2; +import static org.springframework.cloud.task.repository.support.DatabaseType.DB2AS400; +import static org.springframework.cloud.task.repository.support.DatabaseType.DB2VSE; +import static org.springframework.cloud.task.repository.support.DatabaseType.DB2ZOS; import static org.springframework.cloud.task.repository.support.DatabaseType.HSQL; import static org.springframework.cloud.task.repository.support.DatabaseType.H2; import static org.springframework.cloud.task.repository.support.DatabaseType.MYSQL; @@ -69,6 +72,9 @@ public class SqlPagingQueryProviderFactoryBean implements FactoryBean dbNameMap; @@ -71,9 +74,16 @@ public enum DatabaseType { if (StringUtils.hasText(databaseProductName) && !databaseProductName.equals("DB2/Linux") && databaseProductName.startsWith("DB2")) { String databaseProductVersion = JdbcUtils.extractDatabaseMetaData(dataSource, "getDatabaseProductVersion").toString(); - if (!databaseProductVersion.startsWith("SQL")) { + if (databaseProductVersion.startsWith("ARI")) { + databaseProductName = "DB2VSE"; + } + else if (databaseProductVersion.startsWith("DSN")) { databaseProductName = "DB2ZOS"; } + else if (databaseProductName.indexOf("AS") != -1 && (databaseProductVersion.startsWith("QSQ") || + databaseProductVersion.substring(databaseProductVersion.indexOf('V')).matches("V\\dR\\d[mM]\\d"))) { + databaseProductName = "DB2AS400"; + } else { databaseProductName = JdbcUtils.commonDatabaseName(databaseProductName); } diff --git a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/repository/support/TaskRepositoryInitializer.java b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/repository/support/TaskRepositoryInitializer.java index d4ff9ad3..7ba21bb4 100644 --- a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/repository/support/TaskRepositoryInitializer.java +++ b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/repository/support/TaskRepositoryInitializer.java @@ -27,6 +27,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.ResourceLoader; import org.springframework.jdbc.datasource.init.DatabasePopulatorUtils; import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; +import org.springframework.jdbc.support.JdbcUtils; import org.springframework.jdbc.support.MetaDataAccessException; /** @@ -76,7 +77,7 @@ public final class TaskRepositoryInitializer implements InitializingBean { private String getDatabaseType(DataSource dataSource) { try { - return DatabaseType.fromMetaData(dataSource).toString().toLowerCase(); + return JdbcUtils.commonDatabaseName(DatabaseType.fromMetaData(dataSource).toString()).toLowerCase(); } catch (MetaDataAccessException ex) { throw new IllegalStateException("Unable to detect database type", ex);