Skip to content

Commit 11d0d95

Browse files
committed
Guard JdbcSqlServerDialect against absence of SQL Server JDBC driver.
Check for presence of microsoft.sql.DateTimeOffset class before returning it as type and associated converters. Closes #2153
1 parent ad2e177 commit 11d0d95

File tree

1 file changed

+18
-3
lines changed

1 file changed

+18
-3
lines changed

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/dialect/JdbcSqlServerDialect.java

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
import org.springframework.core.convert.converter.Converter;
2828
import org.springframework.data.convert.ReadingConverter;
2929
import org.springframework.data.relational.core.dialect.SqlServerDialect;
30+
import org.springframework.data.util.ClassUtils;
31+
import org.springframework.lang.Nullable;
3032

3133
/**
3234
* {@link SqlServerDialect} that registers JDBC specific converters.
@@ -41,7 +43,21 @@ public class JdbcSqlServerDialect extends SqlServerDialect implements JdbcDialec
4143

4244
public static final JdbcSqlServerDialect INSTANCE = new JdbcSqlServerDialect();
4345

44-
private static final Set<Class<?>> SIMPLE_TYPES = Set.of(DateTimeOffset.class);
46+
private static final @Nullable Class<?> DATE_TIME_OFFSET_CLASS = ClassUtils
47+
.loadIfPresent("microsoft.sql.DateTimeOffset", JdbcSqlServerDialect.class.getClassLoader());
48+
private static final Set<Class<?>> SIMPLE_TYPES;
49+
private static final List<Object> CONVERTERS;
50+
51+
static {
52+
53+
if (DATE_TIME_OFFSET_CLASS != null) {
54+
SIMPLE_TYPES = Set.of(DATE_TIME_OFFSET_CLASS);
55+
CONVERTERS = List.of(DateTimeOffsetToOffsetDateTimeConverter.INSTANCE, DateTimeOffsetToInstantConverter.INSTANCE);
56+
} else {
57+
SIMPLE_TYPES = Set.of();
58+
CONVERTERS = List.of();
59+
}
60+
}
4561

4662
@Override
4763
public Set<Class<?>> simpleTypes() {
@@ -52,8 +68,7 @@ public Set<Class<?>> simpleTypes() {
5268
public Collection<Object> getConverters() {
5369

5470
List<Object> converters = new ArrayList<>(super.getConverters());
55-
converters.add(DateTimeOffsetToOffsetDateTimeConverter.INSTANCE);
56-
converters.add(DateTimeOffsetToInstantConverter.INSTANCE);
71+
converters.addAll(CONVERTERS);
5772
return converters;
5873
}
5974

0 commit comments

Comments
 (0)