BAEL-4530: A Guide to @DynamicPropertySource in Spring (#9877)
* A Guide to @DynamicPropertySource in Spring * Moving to a new module * Reverting the Changes in the original module
This commit is contained in:
+50
@@ -0,0 +1,50 @@
|
||||
package com.baeldung.dynamicproperties;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.ActiveProfiles;
|
||||
import org.springframework.test.context.DynamicPropertyRegistry;
|
||||
import org.springframework.test.context.DynamicPropertySource;
|
||||
import org.testcontainers.containers.PostgreSQLContainer;
|
||||
import org.testcontainers.junit.jupiter.Container;
|
||||
import org.testcontainers.junit.jupiter.Testcontainers;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@SpringBootTest
|
||||
@Testcontainers
|
||||
@ActiveProfiles("pg")
|
||||
public class ArticleLiveTest {
|
||||
|
||||
@Container
|
||||
static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:11")
|
||||
.withDatabaseName("prop")
|
||||
.withUsername("postgres")
|
||||
.withPassword("pass")
|
||||
.withExposedPorts(5432);
|
||||
|
||||
@Autowired
|
||||
private ArticleRepository articleRepository;
|
||||
|
||||
@DynamicPropertySource
|
||||
static void registerPgProperties(DynamicPropertyRegistry registry) {
|
||||
registry.add("spring.datasource.url",
|
||||
() -> String.format("jdbc:postgresql://localhost:%d/prop", postgres.getFirstMappedPort()));
|
||||
registry.add("spring.datasource.username", () -> "postgres");
|
||||
registry.add("spring.datasource.password", () -> "pass");
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenAnArticle_whenPersisted_thenCanBeFoundInTheDb() {
|
||||
Article article = new Article();
|
||||
article.setTitle("A Guide to @DynamicPropertySource in Spring");
|
||||
article.setContent("Today's applications...");
|
||||
|
||||
articleRepository.save(article);
|
||||
Article persisted = articleRepository.findAll().get(0);
|
||||
assertThat(persisted.getId()).isNotNull();
|
||||
assertThat(persisted.getTitle()).isEqualTo("A Guide to @DynamicPropertySource in Spring");
|
||||
assertThat(persisted.getContent()).isEqualTo("Today's applications...");
|
||||
}
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
package com.baeldung.dynamicproperties;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.ActiveProfiles;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@SpringBootTest
|
||||
@ActiveProfiles("pg")
|
||||
@ExtendWith(PostgreSQLExtension.class)
|
||||
public class ArticleTestFixtureLiveTest {
|
||||
|
||||
@Autowired
|
||||
private ArticleRepository articleRepository;
|
||||
|
||||
@Test
|
||||
void givenAnArticle_whenPersisted_thenShouldBeAbleToReadIt() {
|
||||
Article article = new Article();
|
||||
article.setTitle("A Guide to @DynamicPropertySource in Spring");
|
||||
article.setContent("Today's applications...");
|
||||
|
||||
articleRepository.save(article);
|
||||
Article persisted = articleRepository.findAll().get(0);
|
||||
assertThat(persisted.getId()).isNotNull();
|
||||
assertThat(persisted.getTitle()).isEqualTo("A Guide to @DynamicPropertySource in Spring");
|
||||
assertThat(persisted.getContent()).isEqualTo("Today's applications...");
|
||||
}
|
||||
}
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
package com.baeldung.dynamicproperties;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.util.TestPropertyValues;
|
||||
import org.springframework.context.ApplicationContextInitializer;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.test.context.ActiveProfiles;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.testcontainers.containers.PostgreSQLContainer;
|
||||
import org.testcontainers.junit.jupiter.Container;
|
||||
import org.testcontainers.junit.jupiter.Testcontainers;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@SpringBootTest
|
||||
@Testcontainers
|
||||
@ActiveProfiles("pg")
|
||||
@ContextConfiguration(initializers = ArticleTraditionalLiveTest.EnvInitializer.class)
|
||||
class ArticleTraditionalLiveTest {
|
||||
|
||||
@Container
|
||||
static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:11")
|
||||
.withDatabaseName("prop")
|
||||
.withUsername("postgres")
|
||||
.withPassword("pass")
|
||||
.withExposedPorts(5432);
|
||||
|
||||
static class EnvInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
|
||||
|
||||
@Override
|
||||
public void initialize(ConfigurableApplicationContext applicationContext) {
|
||||
TestPropertyValues.of(
|
||||
String.format("spring.datasource.url=jdbc:postgresql://localhost:%d/prop", postgres.getFirstMappedPort()),
|
||||
"spring.datasource.username=postgres",
|
||||
"spring.datasource.password=pass"
|
||||
).applyTo(applicationContext);
|
||||
}
|
||||
}
|
||||
|
||||
@Autowired
|
||||
private ArticleRepository articleRepository;
|
||||
|
||||
@Test
|
||||
void givenAnArticle_whenPersisted_thenShouldBeAbleToReadIt() {
|
||||
Article article = new Article();
|
||||
article.setTitle("A Guide to @DynamicPropertySource in Spring");
|
||||
article.setContent("Today's applications...");
|
||||
|
||||
articleRepository.save(article);
|
||||
Article persisted = articleRepository.findAll().get(0);
|
||||
assertThat(persisted.getId()).isNotNull();
|
||||
assertThat(persisted.getTitle()).isEqualTo("A Guide to @DynamicPropertySource in Spring");
|
||||
assertThat(persisted.getContent()).isEqualTo("Today's applications...");
|
||||
}
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
package com.baeldung.dynamicproperties;
|
||||
|
||||
import org.junit.jupiter.api.extension.AfterAllCallback;
|
||||
import org.junit.jupiter.api.extension.BeforeAllCallback;
|
||||
import org.junit.jupiter.api.extension.ExtensionContext;
|
||||
import org.testcontainers.containers.PostgreSQLContainer;
|
||||
|
||||
public class PostgreSQLExtension implements BeforeAllCallback, AfterAllCallback {
|
||||
|
||||
private PostgreSQLContainer<?> postgres;
|
||||
|
||||
@Override
|
||||
public void beforeAll(ExtensionContext context) {
|
||||
postgres = new PostgreSQLContainer<>("postgres:11")
|
||||
.withDatabaseName("prop")
|
||||
.withUsername("postgres")
|
||||
.withPassword("pass")
|
||||
.withExposedPorts(5432);
|
||||
|
||||
postgres.start();
|
||||
String jdbcUrl = String.format("jdbc:postgresql://localhost:%d/prop", postgres.getFirstMappedPort());
|
||||
System.setProperty("spring.datasource.url", jdbcUrl);
|
||||
System.setProperty("spring.datasource.username", "postgres");
|
||||
System.setProperty("spring.datasource.password", "pass");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterAll(ExtensionContext context) {
|
||||
postgres.stop();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user