Skip to content

Commit ed7844c

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 fa14334 commit ed7844c

File tree

1 file changed

+19
-3
lines changed

1 file changed

+19
-3
lines changed

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

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,12 @@
2424
import java.util.List;
2525
import java.util.Set;
2626

27+
import org.jspecify.annotations.Nullable;
28+
2729
import org.springframework.core.convert.converter.Converter;
2830
import org.springframework.data.convert.ReadingConverter;
2931
import org.springframework.data.relational.core.dialect.SqlServerDialect;
32+
import org.springframework.data.util.ClassUtils;
3033

3134
/**
3235
* {@link SqlServerDialect} that registers JDBC specific converters.
@@ -41,7 +44,21 @@ public class JdbcSqlServerDialect extends SqlServerDialect implements JdbcDialec
4144

4245
public static final JdbcSqlServerDialect INSTANCE = new JdbcSqlServerDialect();
4346

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

4663
@Override
4764
public Set<Class<?>> simpleTypes() {
@@ -52,8 +69,7 @@ public Set<Class<?>> simpleTypes() {
5269
public Collection<Object> getConverters() {
5370

5471
List<Object> converters = new ArrayList<>(super.getConverters());
55-
converters.add(DateTimeOffsetToOffsetDateTimeConverter.INSTANCE);
56-
converters.add(DateTimeOffsetToInstantConverter.INSTANCE);
72+
converters.addAll(CONVERTERS);
5773
return converters;
5874
}
5975

0 commit comments

Comments
 (0)