From 65e259454bba4c4738602a12ab04202c7eed4af5 Mon Sep 17 00:00:00 2001 From: Andrey Litvitski Date: Sun, 6 Apr 2025 00:49:01 +0300 Subject: [PATCH] add cloud config sample Signed-off-by: Andrey Litvitski --- samples/cloud-config/build.gradle | 26 ++++++++++++++ .../example/cloud/config/CloudConfigMain.java | 11 ++++++ .../src/main/resources/application.yml | 0 .../resources/config-native/application.yml | 2 ++ .../cloud/config/CloudConfigMainTest.java | 26 ++++++++++++++ .../cloud/config/TestCloudConfigMain.java | 36 +++++++++++++++++++ .../testjars/configServer/application.yml | 8 +++++ settings.gradle | 2 ++ 8 files changed, 111 insertions(+) create mode 100644 samples/cloud-config/build.gradle create mode 100644 samples/cloud-config/src/main/java/example/cloud/config/CloudConfigMain.java create mode 100644 samples/cloud-config/src/main/resources/application.yml create mode 100644 samples/cloud-config/src/main/resources/config-native/application.yml create mode 100644 samples/cloud-config/src/test/java/example/cloud/config/CloudConfigMainTest.java create mode 100644 samples/cloud-config/src/test/java/example/cloud/config/TestCloudConfigMain.java create mode 100644 samples/cloud-config/src/test/resources/testjars/configServer/application.yml diff --git a/samples/cloud-config/build.gradle b/samples/cloud-config/build.gradle new file mode 100644 index 0000000..49fcffa --- /dev/null +++ b/samples/cloud-config/build.gradle @@ -0,0 +1,26 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '3.4.0' + id 'io.spring.dependency-management' version '1.1.2' +} + +group = 'com.example' + +java { + sourceCompatibility = '17' +} + +repositories { + mavenCentral() +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-web' + testImplementation project(':spring-boot-testjars') + testImplementation project(':spring-boot-testjars-maven') + testImplementation 'org.springframework.boot:spring-boot-starter-test' +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/samples/cloud-config/src/main/java/example/cloud/config/CloudConfigMain.java b/samples/cloud-config/src/main/java/example/cloud/config/CloudConfigMain.java new file mode 100644 index 0000000..bbdfc09 --- /dev/null +++ b/samples/cloud-config/src/main/java/example/cloud/config/CloudConfigMain.java @@ -0,0 +1,11 @@ +package example.cloud.config; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class CloudConfigMain { + public static void main(String[] args) { + SpringApplication.run(CloudConfigMain.class, args); + } +} diff --git a/samples/cloud-config/src/main/resources/application.yml b/samples/cloud-config/src/main/resources/application.yml new file mode 100644 index 0000000..e69de29 diff --git a/samples/cloud-config/src/main/resources/config-native/application.yml b/samples/cloud-config/src/main/resources/config-native/application.yml new file mode 100644 index 0000000..287845c --- /dev/null +++ b/samples/cloud-config/src/main/resources/config-native/application.yml @@ -0,0 +1,2 @@ +some: + value: Hello! diff --git a/samples/cloud-config/src/test/java/example/cloud/config/CloudConfigMainTest.java b/samples/cloud-config/src/test/java/example/cloud/config/CloudConfigMainTest.java new file mode 100644 index 0000000..3cf35cb --- /dev/null +++ b/samples/cloud-config/src/test/java/example/cloud/config/CloudConfigMainTest.java @@ -0,0 +1,26 @@ +package example.cloud.config; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestClient; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertTrue; + +@SpringBootTest(classes = TestCloudConfigMain.class) +public class CloudConfigMainTest { + @Test + void configServerPropertyTest(@Value("${spring.cloud.config.uri}") String configUri) { + String url = configUri + "/application/default"; + RestClient restClient = RestClient.create(); + ResponseEntity result = restClient.get() + .uri(url) + .retrieve() + .toEntity(String.class); + assertThat(result.getStatusCode()).isEqualTo(HttpStatus.OK); + assertTrue(result.getBody().contains("Hello!")); + } +} diff --git a/samples/cloud-config/src/test/java/example/cloud/config/TestCloudConfigMain.java b/samples/cloud-config/src/test/java/example/cloud/config/TestCloudConfigMain.java new file mode 100644 index 0000000..e4cda1b --- /dev/null +++ b/samples/cloud-config/src/test/java/example/cloud/config/TestCloudConfigMain.java @@ -0,0 +1,36 @@ +package example.cloud.config; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.experimental.boot.server.exec.CommonsExecWebServerFactoryBean; +import org.springframework.experimental.boot.server.exec.MavenClasspathEntry; +import org.springframework.experimental.boot.server.exec.ResourceClasspathEntry; +import org.springframework.experimental.boot.test.context.CloudConfigUri; + +@TestConfiguration(proxyBeanMethods = false) +public class TestCloudConfigMain { + @Bean + @CloudConfigUri + static CommonsExecWebServerFactoryBean configServer() { + // @formatter:off + return CommonsExecWebServerFactoryBean.builder() + .useGenericSpringBootMain() + .setAdditionalBeanClassNames("org.springframework.cloud.config.server.config.ConfigServerConfiguration") + .systemProperties(props -> { + props.put("spring.config.location", "classpath:/application.yml"); + }) + .classpath((classpath) -> classpath + .entries(new MavenClasspathEntry("org.springframework.cloud:spring-cloud-config-server:4.2.1")) + .entries(new ResourceClasspathEntry("config-native/application.yml", "config-native/application.yml")) + .entries(new ResourceClasspathEntry("testjars/configServer/application.yml", "application.yml")) + ); + // @formatter:on + } + + public static void main(String[] args) throws Exception { + SpringApplication.from(CloudConfigMain::main) + .with(TestCloudConfigMain.class) + .run(args); + } +} diff --git a/samples/cloud-config/src/test/resources/testjars/configServer/application.yml b/samples/cloud-config/src/test/resources/testjars/configServer/application.yml new file mode 100644 index 0000000..d750aac --- /dev/null +++ b/samples/cloud-config/src/test/resources/testjars/configServer/application.yml @@ -0,0 +1,8 @@ +spring: + profiles: + active: native + cloud: + config: + server: + native: + search-locations: classpath:/config-native \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 23de062..5fea0a3 100644 --- a/settings.gradle +++ b/settings.gradle @@ -14,3 +14,5 @@ include ':spring-boot-testjars' include ':spring-boot-testjars-maven' include ':samples:oauth2-login' include ':samples:oauth2-login-custom-config' +include 'samples:cloud-config' +