From f0c38e10852957f64b938225e7a2090a766664d9 Mon Sep 17 00:00:00 2001 From: Oliver Drotbohm Date: Mon, 1 May 2023 21:55:30 +0200 Subject: [PATCH] GH-194 - Fix combined condition to enable JDBC database initialization. --- ...JdbcEventPublicationAutoConfiguration.java | 38 +++++++++++++------ ...baseSchemaInitializerIntegrationTests.java | 4 +- 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/spring-modulith-events/spring-modulith-events-jdbc/src/main/java/org/springframework/modulith/events/jdbc/JdbcEventPublicationAutoConfiguration.java b/spring-modulith-events/spring-modulith-events-jdbc/src/main/java/org/springframework/modulith/events/jdbc/JdbcEventPublicationAutoConfiguration.java index 862ea673..0329d240 100644 --- a/spring-modulith-events/spring-modulith-events-jdbc/src/main/java/org/springframework/modulith/events/jdbc/JdbcEventPublicationAutoConfiguration.java +++ b/spring-modulith-events/spring-modulith-events-jdbc/src/main/java/org/springframework/modulith/events/jdbc/JdbcEventPublicationAutoConfiguration.java @@ -15,15 +15,20 @@ */ package org.springframework.modulith.events.jdbc; +import java.util.List; + import javax.sql.DataSource; -import org.springframework.boot.autoconfigure.condition.AnyNestedCondition; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.autoconfigure.condition.ConditionOutcome; +import org.springframework.boot.autoconfigure.condition.SpringBootCondition; import org.springframework.boot.jdbc.DatabaseDriver; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ConditionContext; import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; import org.springframework.core.io.ResourceLoader; +import org.springframework.core.type.AnnotatedTypeMetadata; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.modulith.events.EventSerializer; import org.springframework.modulith.events.config.EventPublicationConfigurationExtension; @@ -61,16 +66,27 @@ class JdbcEventPublicationAutoConfiguration implements EventPublicationConfigura * * @author Oliver Drotbohm */ - static class SchemaInitializationEnabled extends AnyNestedCondition { + static class SchemaInitializationEnabled extends SpringBootCondition { - public SchemaInitializationEnabled() { - super(ConfigurationPhase.PARSE_CONFIGURATION); + private static final String LEGACY = "spring.modulith.events.jdbc-schema-initialization.enabled"; + private static final String CURRENT = "spring.modulith.events.jdbc.schema-initialization.enabled"; + + /* + * (non-Javadoc) + * @see org.springframework.boot.autoconfigure.condition.SpringBootCondition#getMatchOutcome(org.springframework.context.annotation.ConditionContext, org.springframework.core.type.AnnotatedTypeMetadata) + */ + @Override + public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata) { + + Environment environment = context.getEnvironment(); + + var enabled = List.of(CURRENT, LEGACY).stream() + .map(it -> environment.getProperty(it, Boolean.class)) + .anyMatch(Boolean.TRUE::equals); + + return enabled // + ? ConditionOutcome.match("Schema initialization explicitly enabled.") // + : ConditionOutcome.noMatch("Schema initialization disabled by default."); } - - @ConditionalOnProperty(name = "spring.modulith.events.jdbc-schema-initialization.enabled", havingValue = "true") - static class LegacyPropertyEnabled {} - - @ConditionalOnProperty(name = "spring.modulith.events.jdbc.schema-initialization.enabled", havingValue = "true") - static class NewPropertyEnabled {} } } diff --git a/spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/DatabaseSchemaInitializerIntegrationTests.java b/spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/DatabaseSchemaInitializerIntegrationTests.java index 674f8b3c..5dbfff3f 100644 --- a/spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/DatabaseSchemaInitializerIntegrationTests.java +++ b/spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/DatabaseSchemaInitializerIntegrationTests.java @@ -52,7 +52,7 @@ class DatabaseSchemaInitializerIntegrationTests { } @Nested - @JdbcTest(properties = "spring.modulith.events.jdbc-schema-initialization.enabled=true") + @JdbcTest(properties = "spring.modulith.events.jdbc.schema-initialization.enabled=true") static class WithInitEnabled extends TestBase { @Autowired JdbcOperations operations; @@ -70,7 +70,7 @@ class DatabaseSchemaInitializerIntegrationTests { } @Nested - @JdbcTest(properties = "spring.modulith.events.jdbc-schema-initialization.enabled=false") + @JdbcTest(properties = "spring.modulith.events.jdbc.schema-initialization.enabled=false") static class WithInitDisabled extends TestBase { @SpyBean JdbcOperations operations;