diff --git a/generators/server/templates/src/main/java/package/config/cassandra/CassandraConfiguration.java.ejs b/generators/server/templates/src/main/java/package/config/cassandra/CassandraConfiguration.java.ejs index 312d5cd9088..0ee92895dd4 100644 --- a/generators/server/templates/src/main/java/package/config/cassandra/CassandraConfiguration.java.ejs +++ b/generators/server/templates/src/main/java/package/config/cassandra/CassandraConfiguration.java.ejs @@ -35,6 +35,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; <%_ } _%> import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Profile; import org.springframework.core.convert.converter.Converter; import org.springframework.data.cassandra.core.convert.CassandraCustomConversions; @@ -51,14 +52,14 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; -@Configuration<% if (applicationType === 'gateway' && databaseType !== 'cassandra') { %> -@ConditionalOnProperty("jhipster.gateway.rate-limiting.enabled")<% } %> +@Configuration +<%_ if (applicationType === 'gateway' && databaseType !== 'cassandra') { %> +@ConditionalOnProperty("jhipster.gateway.rate-limiting.enabled") +<%_ } %> @Profile({JHipsterConstants.SPRING_PROFILE_DEVELOPMENT, JHipsterConstants.SPRING_PROFILE_PRODUCTION}) +@Import(CassandraConfiguration.ClusterBuilderCustomizerConfiguration.class) public class CassandraConfiguration { - @Value("${spring.data.cassandra.protocolVersion:V4}") - private ProtocolVersion protocolVersion; - @Autowired(required = false) MetricRegistry metricRegistry; @@ -81,7 +82,7 @@ public class CassandraConfiguration { } @Bean - public CassandraCustomConversions cassandraCustomConversions(Cluster cluster) { + public CassandraCustomConversions cassandraCustomConversions(@Value("${spring.data.cassandra.protocolVersion:V4}") ProtocolVersion protocolVersion) { List> converters = new ArrayList<>(); converters.add(TupleToZonedDateTimeConverter.INSTANCE); converters.add(new ZonedDateTimeToTupleConverter(protocolVersion, cluster.getConfiguration().getCodecRegistry())); @@ -118,22 +119,19 @@ public class CassandraConfiguration { } } - @Bean - ClusterBuilderCustomizer clusterBuilderCustomizer(CassandraProperties properties) { - return builder -> builder - .withProtocolVersion(protocolVersion) - .withPort(getPort(properties)) - .withoutJMXReporting() - .withoutMetrics(); - } - - protected int getPort(CassandraProperties properties) { - return properties.getPort(); - } - @Bean(destroyMethod = "close") - public Session session(CassandraProperties properties, Cluster cluster) { + public Session session(CassandraProperties properties) { log.debug("Configuring Cassandra session"); return StringUtils.hasText(properties.getKeyspaceName()) ? cluster.connect(properties.getKeyspaceName()) : cluster.connect(); } + + public static class ClusterBuilderCustomizerConfiguration { + @Bean + ClusterBuilderCustomizer clusterBuilderCustomizer(@Value("${spring.data.cassandra.protocolVersion:V4}") ProtocolVersion protocolVersion) { + return builder -> builder + .withProtocolVersion(protocolVersion) + .withoutJMXReporting() + .withoutMetrics(); + } + } } diff --git a/generators/server/templates/src/test/java/package/AbstractCassandraTest.java.ejs b/generators/server/templates/src/test/java/package/AbstractCassandraTest.java.ejs index 45e2596f4de..f424b6d359f 100644 --- a/generators/server/templates/src/test/java/package/AbstractCassandraTest.java.ejs +++ b/generators/server/templates/src/test/java/package/AbstractCassandraTest.java.ejs @@ -27,7 +27,11 @@ import org.apache.thrift.transport.TTransportException; import org.cassandraunit.CQLDataLoader; import org.cassandraunit.dataset.cql.ClassPathCQLDataSet; import org.junit.jupiter.api.BeforeAll; +import org.springframework.context.ApplicationContextInitializer; +import org.springframework.context.ConfigurableApplicationContext; import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.support.TestPropertySourceUtils; import org.testcontainers.containers.BindMode; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.wait.strategy.Wait; @@ -48,13 +52,21 @@ import java.util.List; * Base class for starting/stopping Cassandra during tests. */ @ActiveProfiles(JHipsterConstants.SPRING_PROFILE_TEST) +@ContextConfiguration(initializers = AbstractCassandraTest.CassandraPortInitializer.class) public class AbstractCassandraTest { public static final String CASSANDRA_UNIT_KEYSPACE = "cassandra_unit_keyspace"; - public static GenericContainer CASSANDRA_CONTAINER = null; + public static final GenericContainer CASSANDRA_CONTAINER; public static final int CASSANDRA_TEST_PORT = 9042; private static boolean started = false; + static { + CASSANDRA_CONTAINER = + new GenericContainer("<%= DOCKER_CASSANDRA %>") + .waitingFor(Wait.forListeningPort().withStartupTimeout(Duration.ofSeconds(30))) + .withExposedPorts(CASSANDRA_TEST_PORT); + } + @BeforeAll public static void startServer() throws TTransportException, ConfigurationException, IOException, URISyntaxException { if (!started) { @@ -75,11 +87,6 @@ public class AbstractCassandraTest { } private static void startTestcontainer() throws TTransportException, IOException { - CASSANDRA_CONTAINER = - new GenericContainer("<%= DOCKER_CASSANDRA %>") - .waitingFor(Wait.forListeningPort().withStartupTimeout(Duration.ofSeconds(30))) - .withExposedPorts(CASSANDRA_TEST_PORT); - CASSANDRA_CONTAINER.start(); } @@ -108,4 +115,13 @@ public class AbstractCassandraTest { dataLoader.load(new ClassPathCQLDataSet(cqlDir + fileName, false, false, CASSANDRA_UNIT_KEYSPACE)); } } + + public static class CassandraPortInitializer implements ApplicationContextInitializer { + @Override + public void initialize(ConfigurableApplicationContext applicationContext) { + TestPropertySourceUtils.addInlinedPropertiesToEnvironment(applicationContext, + "spring.data.cassandra.port=" + AbstractCassandraTest.CASSANDRA_CONTAINER.getMappedPort(AbstractCassandraTest.CASSANDRA_TEST_PORT) + ); + } + } } diff --git a/generators/server/templates/src/test/java/package/config/CassandraConfigurationIT.java.ejs b/generators/server/templates/src/test/java/package/config/CassandraConfigurationIT.java.ejs index 8246dfbc46f..652b34d8396 100644 --- a/generators/server/templates/src/test/java/package/config/CassandraConfigurationIT.java.ejs +++ b/generators/server/templates/src/test/java/package/config/CassandraConfigurationIT.java.ejs @@ -18,26 +18,14 @@ -%> package <%= packageName %>.config; -import <%= packageName %>.AbstractCassandraTest; import <%= packageName %>.config.cassandra.CassandraConfiguration; import io.github.jhipster.config.JHipsterConstants; -import org.springframework.boot.autoconfigure.cassandra.CassandraProperties; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; @Configuration @Profile(JHipsterConstants.SPRING_PROFILE_TEST) public class CassandraConfigurationIT extends CassandraConfiguration { - - /** - * Override how to get the port to connect to the Cassandra cluster. - *

- * This uses the TestContainers API to get the mapped port in Docker. - */ - @Override - protected int getPort(CassandraProperties properties) { - return AbstractCassandraTest.CASSANDRA_CONTAINER.getMappedPort(AbstractCassandraTest.CASSANDRA_TEST_PORT); - } }