From 148c5e8ed5d0f14fdc25dd5879e22d973e6dc0a4 Mon Sep 17 00:00:00 2001 From: Moritz Halbritter Date: Fri, 15 Mar 2024 11:47:35 +0100 Subject: [PATCH] Polish "Add property spring.data.jdbc.dialect" See gh-39941 --- .../data/jdbc/JdbcDataProperties.java | 5 +++-- .../jdbc/JdbcRepositoriesAutoConfiguration.java | 15 +++------------ .../JdbcRepositoriesAutoConfigurationTests.java | 12 +++++------- 3 files changed, 11 insertions(+), 21 deletions(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/jdbc/JdbcDataProperties.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/jdbc/JdbcDataProperties.java index 568265f784e..25b93c73685 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/jdbc/JdbcDataProperties.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/jdbc/JdbcDataProperties.java @@ -23,13 +23,14 @@ import org.springframework.data.relational.core.dialect.Dialect; * Configuration properties for Spring Data JDBC. * * @author Jens Schauder - * @since 3.3 + * @since 3.3.0 */ @ConfigurationProperties(prefix = "spring.data.jdbc") public class JdbcDataProperties { /** - * Dialect to use. By default, the dialect is determined by inspecting the database connection. + * Dialect to use. By default, the dialect is determined by inspecting the database + * connection. */ private Class dialect; diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/jdbc/JdbcRepositoriesAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/jdbc/JdbcRepositoriesAutoConfiguration.java index 8d11e3d2bb5..760d338b17e 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/jdbc/JdbcRepositoriesAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/jdbc/JdbcRepositoriesAutoConfiguration.java @@ -16,11 +16,10 @@ package org.springframework.boot.autoconfigure.data.jdbc; -import java.lang.reflect.InvocationTargetException; import java.util.Optional; import java.util.Set; -import org.springframework.beans.factory.BeanCreationException; +import org.springframework.beans.BeanUtils; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; @@ -149,16 +148,8 @@ public class JdbcRepositoriesAutoConfiguration { @Bean @ConditionalOnMissingBean public Dialect jdbcDialect(NamedParameterJdbcOperations operations) { - if (this.properties.getDialect() != null - ) { - Class dialectType = this.properties.getDialect(); - try { - return (Dialect)dialectType.getDeclaredConstructor().newInstance(); - } - catch (InstantiationException | IllegalAccessException | - InvocationTargetException | NoSuchMethodException e) { - throw new BeanCreationException("Couldn't create instance of type " + dialectType, e); - } + if (this.properties.getDialect() != null) { + return BeanUtils.instantiateClass(this.properties.getDialect(), Dialect.class); } return super.jdbcDialect(operations); } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/jdbc/JdbcRepositoriesAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/jdbc/JdbcRepositoriesAutoConfigurationTests.java index b798f3421a6..ad37e9df5fa 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/jdbc/JdbcRepositoriesAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/jdbc/JdbcRepositoriesAutoConfigurationTests.java @@ -186,13 +186,11 @@ class JdbcRepositoriesAutoConfigurationTests { @Test void allowsConfigurationOfDialectByProperty() { this.contextRunner.with(database()) - .withPropertyValues("spring.data.jdbc.dialect:" + JdbcPostgresDialect.class.getName()) - .withConfiguration(AutoConfigurations.of(JdbcTemplateAutoConfiguration.class, - DataSourceTransactionManagerAutoConfiguration.class)) - .withUserConfiguration(TestConfiguration.class) - .run((context) -> { - assertThat(context).hasSingleBean(JdbcPostgresDialect.class); - }); + .withPropertyValues("spring.data.jdbc.dialect:" + JdbcPostgresDialect.class.getName()) + .withConfiguration(AutoConfigurations.of(JdbcTemplateAutoConfiguration.class, + DataSourceTransactionManagerAutoConfiguration.class)) + .withUserConfiguration(TestConfiguration.class) + .run((context) -> assertThat(context).hasSingleBean(JdbcPostgresDialect.class)); } private void allowsUserToDefineCustomBean(Class configuration, Class beanType, String beanName) {