diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orm/jpa/HibernateProperties.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orm/jpa/HibernateProperties.java index d4100bcc350..de2e24293b9 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orm/jpa/HibernateProperties.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orm/jpa/HibernateProperties.java @@ -27,6 +27,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy; import org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy; import org.springframework.util.Assert; +import org.springframework.util.ClassUtils; import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; @@ -40,6 +41,8 @@ import org.springframework.util.StringUtils; @ConfigurationProperties("spring.jpa.hibernate") public class HibernateProperties { + private static final String DISABLED_SCANNER_CLASS = "org.hibernate.boot.archive.scan.internal.DisabledScanner"; + private final Naming naming = new Naming(); /** @@ -95,6 +98,7 @@ public class HibernateProperties { HibernateSettings settings) { Map result = new HashMap<>(existing); applyNewIdGeneratorMappings(result); + applyScanner(result); getNaming().applyNamingStrategies(result); String ddlAuto = determineDdlAuto(existing, settings::getDdlAuto); if (StringUtils.hasText(ddlAuto) && !"none".equals(ddlAuto)) { @@ -121,6 +125,13 @@ public class HibernateProperties { } } + private void applyScanner(Map result) { + if (!result.containsKey(AvailableSettings.SCANNER) + && ClassUtils.isPresent(DISABLED_SCANNER_CLASS, null)) { + result.put(AvailableSettings.SCANNER, DISABLED_SCANNER_CLASS); + } + } + private String determineDdlAuto(Map existing, Supplier defaultDdlAuto) { String ddlAuto = existing.get(AvailableSettings.HBM2DDL_AUTO); diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/orm/jpa/HibernatePropertiesTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/orm/jpa/HibernatePropertiesTests.java index 869769d7473..1340a3627f2 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/orm/jpa/HibernatePropertiesTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/orm/jpa/HibernatePropertiesTests.java @@ -43,6 +43,7 @@ import static org.mockito.Mockito.verify; * Tests for {@link HibernateProperties}. * * @author Stephane Nicoll + * @author Artsiom Yudovin */ public class HibernatePropertiesTests { @@ -123,6 +124,23 @@ public class HibernatePropertiesTests { "false"))); } + @Test + public void scannerUsesDisabledScannerByDefault() { + this.contextRunner.run(assertHibernateProperties( + (hibernateProperties) -> assertThat(hibernateProperties).containsEntry( + AvailableSettings.SCANNER, + "org.hibernate.boot.archive.scan.internal.DisabledScanner"))); + } + + @Test + public void scannerCanBeCustomized() { + this.contextRunner.withPropertyValues( + "spring.jpa.properties.hibernate.archive.scanner:org.hibernate.boot.archive.scan.internal.StandardScanner") + .run(assertHibernateProperties((hibernateProperties) -> assertThat( + hibernateProperties).containsEntry(AvailableSettings.SCANNER, + "org.hibernate.boot.archive.scan.internal.StandardScanner"))); + } + @Test public void defaultDdlAutoIsNotInvokedIfPropertyIsSet() { this.contextRunner.withPropertyValues("spring.jpa.hibernate.ddl-auto=validate")