From ac46a475248282689bdbc81b8b2e9ce215e43342 Mon Sep 17 00:00:00 2001 From: "thibault.faure" Date: Sun, 24 Jul 2022 17:12:14 +0200 Subject: [PATCH] BAEL-5664 code for the using environment varibales in application.properties article --- spring-core-6/pom.xml | 29 ++++++--- .../envvariables/BaeldungProperties.java | 20 +++++++ .../baeldung/envvariables/MyController.java | 60 +++++++++++++++++++ .../src/main/resources/application.properties | 4 ++ .../MyControllerIntegrationTest.java | 36 +++++++++++ 5 files changed, 141 insertions(+), 8 deletions(-) create mode 100644 spring-core-6/src/main/java/com/baeldung/envvariables/BaeldungProperties.java create mode 100644 spring-core-6/src/main/java/com/baeldung/envvariables/MyController.java create mode 100644 spring-core-6/src/main/resources/application.properties create mode 100644 spring-core-6/src/test/java/com/baeldung/envvariables/MyControllerIntegrationTest.java diff --git a/spring-core-6/pom.xml b/spring-core-6/pom.xml index 92cd343234..af6fb50e1d 100644 --- a/spring-core-6/pom.xml +++ b/spring-core-6/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.baeldung @@ -10,23 +10,36 @@ spring-core-6 http://www.baeldung.com + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + + UTF-8 11 11 + 2.7.2 - junit - junit - 4.11 - test + org.springframework.boot + spring-boot-starter-web + ${spring.boot.version} org.springframework.boot - spring-boot-starter-web - 2.0.0.RELEASE + spring-boot-starter-test + ${spring.boot.version} + test + + + org.junit.jupiter + junit-jupiter-api + ${junit-jupiter.version} + test diff --git a/spring-core-6/src/main/java/com/baeldung/envvariables/BaeldungProperties.java b/spring-core-6/src/main/java/com/baeldung/envvariables/BaeldungProperties.java new file mode 100644 index 0000000000..a41ac7a509 --- /dev/null +++ b/spring-core-6/src/main/java/com/baeldung/envvariables/BaeldungProperties.java @@ -0,0 +1,20 @@ +package com.baeldung.envvariables.valueinjection; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Component +@ConfigurationProperties(prefix = "baeldung") +public class BaeldungProperties { + + private String presentation; + + public String getPresentation() { + return presentation; + } + + public void setPresentation(String presentation) { + this.presentation = presentation; + } + +} diff --git a/spring-core-6/src/main/java/com/baeldung/envvariables/MyController.java b/spring-core-6/src/main/java/com/baeldung/envvariables/MyController.java new file mode 100644 index 0000000000..503ee47157 --- /dev/null +++ b/spring-core-6/src/main/java/com/baeldung/envvariables/MyController.java @@ -0,0 +1,60 @@ +package com.baeldung.envvariables.valueinjection; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.env.Environment; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class MyController { + + @Value("${environment.name}") + private String environmentName; + + @Value("${java.home.and.environment}") + private String javaHomeAndEnvironmentName; + + @Value("${thispropertydoesnotexist}") + private String nonExistentProperty; + + @Value("${baeldung.presentation}") + private String baeldungPresentation; + + @Autowired + private Environment environment; + + @Autowired + private BaeldungProperties baeldungProperties; + + @GetMapping("/environment_name") + String getEnvironmentName_FromEnvironmentVariables() { + return environmentName; + } + + @GetMapping("/java_home_and_environment") + String getJavaHomeAndEnvironmentName_FromEnvironmentVariables() { + return javaHomeAndEnvironmentName; + } + + @GetMapping("non_existent_property") + String getNonexistentProperty_FromEnvironmentVariables() { + return nonExistentProperty; + } + + @GetMapping("baeldung_presentation_from_value") + String getBaeldungPresentation_FromValue() { + return baeldungPresentation; + } + + @GetMapping("baeldung_presentation_from_environment") + String getBaeldungPresentation_FromEnvironment() { + return environment.getProperty("baeldung.presentation"); + } + + @GetMapping("baeldung_configuration_properties") + String getBaeldungPresentation_FromConfigurationProperties() { + return baeldungProperties.getPresentation(); + } + +} diff --git a/spring-core-6/src/main/resources/application.properties b/spring-core-6/src/main/resources/application.properties new file mode 100644 index 0000000000..d0029f363c --- /dev/null +++ b/spring-core-6/src/main/resources/application.properties @@ -0,0 +1,4 @@ +environment.name=${OS} +java.home.and.environment=${JAVA_HOME}+${OS} +not.existing.system.property=${thispropertydoesnotexist} +baeldung.presentation=${HELLO_BAELDUNG}. Java is installed in the folder: ${JAVA_HOME} \ No newline at end of file diff --git a/spring-core-6/src/test/java/com/baeldung/envvariables/MyControllerIntegrationTest.java b/spring-core-6/src/test/java/com/baeldung/envvariables/MyControllerIntegrationTest.java new file mode 100644 index 0000000000..b3ee2c7c46 --- /dev/null +++ b/spring-core-6/src/test/java/com/baeldung/envvariables/MyControllerIntegrationTest.java @@ -0,0 +1,36 @@ +package com.baeldung.envvariables.valueinjection; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.web.servlet.MockMvc; + +@SpringBootTest(classes = MyController.class) +@AutoConfigureMockMvc +public class MyControllerIntegrationTest { + + @Autowired + private MockMvc mockMvc; + + /** NB : these tests are commented out because they are environment dependent + * If you want to run one of them on your machine, follow the instruction above it + * + * expects the value of your system environment property 'OS' (it is already defined at least in Windows_NT) + @Test void givenExistingSystemProperty_whenInjected_thenHasSystemPropertyValue() throws Exception { + mockMvc.perform(get("/environment_name")) + .andExpect(content().string(equalTo("Windows_NT"))); + } + + * expects the value of the JAVA_HOME environment variable (you need to define it if you haven't yet), with a + and the 'OS' environment property in the end + @Test void givenCombinationOfSystemPropertyAndEnvironmentVariable_whenInjected_thenHasExpectedValue() throws Exception { + mockMvc.perform(get("/java_home_and_environment")) + .andExpect(content().string(equalTo("C:\\Program Files\\Java\\jdk-11.0.14+Windows_NT"))); + } + + * expects the content to be ${thispropertydoesnotexist} ; if you have defined an environment property called thispropertydoesnotexist, it would fail + @Test void givenNonExistentProperty_whenInjected_thenKeepsTheStringValue() throws Exception { + mockMvc.perform(get("/non_existent_property")) + .andExpect(content().string(equalTo("${thispropertydoesnotexist}"))); + } + */ +}