JAVA-19547 Move articles from spring-core-2 module to spring-boot modules (#13730)
This commit is contained in:
@@ -7,3 +7,4 @@ This module contains articles about configuring the Spring Boot `Environment`
|
||||
- [Spring Properties File Outside jar](https://www.baeldung.com/spring-properties-file-outside-jar)
|
||||
- [Get the Running Port in Spring Boot](https://www.baeldung.com/spring-boot-running-port)
|
||||
- [Environment Variable Prefixes in Spring Boot 2.5](https://www.baeldung.com/spring-boot-env-variable-prefixes)
|
||||
- [Spring Profiles](http://www.baeldung.com/spring-profiles)
|
||||
|
||||
@@ -133,8 +133,23 @@
|
||||
</plugins>
|
||||
</build>
|
||||
</profile>
|
||||
<profile>
|
||||
<id>dev</id>
|
||||
<activation>
|
||||
<activeByDefault>true</activeByDefault>
|
||||
</activation>
|
||||
<properties>
|
||||
<spring.profiles.active>dev</spring.profiles.active>
|
||||
</properties>
|
||||
</profile>
|
||||
<profile>
|
||||
<id>prod</id>
|
||||
<properties>
|
||||
<spring.profiles.active>prod</spring.profiles.active>
|
||||
</properties>
|
||||
</profile>
|
||||
</profiles>
|
||||
|
||||
|
||||
<properties>
|
||||
<jpa.version>2.2</jpa.version>
|
||||
<subethasmtp.version>3.1.7</subethasmtp.version>
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.baeldung.profiles;
|
||||
|
||||
public interface DatasourceConfig {
|
||||
void setup();
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.baeldung.profiles;
|
||||
|
||||
import org.springframework.context.annotation.Profile;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
@Profile("dev")
|
||||
public class DevDatasourceConfig implements DatasourceConfig {
|
||||
|
||||
@Override
|
||||
public void setup() {
|
||||
System.out.println("Setting up datasource for DEV environment. ");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.baeldung.profiles;
|
||||
|
||||
import org.springframework.context.annotation.Profile;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
@Profile("production")
|
||||
public class ProductionDatasourceConfig implements DatasourceConfig {
|
||||
|
||||
@Override
|
||||
public void setup() {
|
||||
System.out.println("Setting up datasource for PRODUCTION environment. ");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.baeldung.profiles;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class ProfileManager {
|
||||
|
||||
@Autowired
|
||||
private Environment environment;
|
||||
|
||||
public void getActiveProfiles() {
|
||||
for (final String profileName : environment.getActiveProfiles()) {
|
||||
System.out.println("Currently active profile - " + profileName);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.baeldung.profiles;
|
||||
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.PropertySource;
|
||||
|
||||
@Configuration
|
||||
@ComponentScan("com.baeldung.profiles")
|
||||
@PropertySource(value = "classpath:application.properties")
|
||||
public class SpringProfilesConfig {
|
||||
|
||||
}
|
||||
@@ -4,4 +4,34 @@ management.metrics.enable.jvm=true
|
||||
management.endpoint.restart.enabled=true
|
||||
spring.datasource.tomcat.jmx-enabled=false
|
||||
management.endpoint.shutdown.enabled=true
|
||||
spring.config.import=file:./additional.properties,optional:file:/Users/home/config/jdbc.properties
|
||||
spring.config.import=file:./additional.properties,optional:file:/Users/home/config/jdbc.properties
|
||||
|
||||
#---
|
||||
spring.profiles.active=@spring.profiles.active@
|
||||
|
||||
my.prop=used-always-in-all-profiles
|
||||
|
||||
#---
|
||||
spring.config.activate.on-profile=dev
|
||||
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
|
||||
#spring.datasource.url=jdbc:mysql://localhost:3306/db
|
||||
#spring.datasource.username=root
|
||||
#spring.datasource.password=root
|
||||
|
||||
#---
|
||||
spring.config.activate.on-profile=production
|
||||
#spring.datasource.driver-class-name=org.h2.Driver
|
||||
#spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1
|
||||
#spring.datasource.username=sa
|
||||
#spring.datasource.password=sa
|
||||
|
||||
#---
|
||||
spring.profiles.group.production=proddb,prodquartz
|
||||
|
||||
#---
|
||||
spring.config.activate.on-profile=proddb
|
||||
db=url_to_production_db
|
||||
|
||||
#---
|
||||
spring.config.activate.on-profile=prodquartz
|
||||
quartz=url_to_quartz_scheduler
|
||||
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:context="http://www.springframework.org/schema/context"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
|
||||
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"
|
||||
>
|
||||
|
||||
<beans profile="dev">
|
||||
<bean id="devDatasourceConfig" class="com.baeldung.profiles.DevDatasourceConfig"/>
|
||||
</beans>
|
||||
|
||||
<beans profile="production">
|
||||
<bean id="productionDatasourceConfig" class="com.baeldung.profiles.ProductionDatasourceConfig"/>
|
||||
</beans>
|
||||
</beans>
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.baeldung.profiles;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.test.context.ActiveProfiles;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
import org.springframework.test.context.support.AnnotationConfigContextLoader;
|
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@ActiveProfiles("dev")
|
||||
@ContextConfiguration(classes = { SpringProfilesConfig.class }, loader = AnnotationConfigContextLoader.class)
|
||||
public class DevProfileWithAnnotationIntegrationTest {
|
||||
@Autowired
|
||||
DatasourceConfig datasourceConfig;
|
||||
|
||||
@Test
|
||||
public void testSpringProfiles() {
|
||||
Assert.assertTrue(datasourceConfig instanceof DevDatasourceConfig);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package com.baeldung.profiles;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.test.context.ActiveProfiles;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
import org.springframework.test.context.support.AnnotationConfigContextLoader;
|
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@ActiveProfiles("production")
|
||||
@ContextConfiguration(classes = { SpringProfilesConfig.class }, loader = AnnotationConfigContextLoader.class)
|
||||
public class ProductionProfileWithAnnotationIntegrationTest {
|
||||
|
||||
@Autowired
|
||||
DatasourceConfig datasourceConfig;
|
||||
|
||||
@Autowired
|
||||
Environment environment;
|
||||
|
||||
@Test
|
||||
public void testSpringProfiles() {
|
||||
for (final String profileName : environment.getActiveProfiles()) {
|
||||
System.out.println("Currently active profile - " + profileName);
|
||||
}
|
||||
Assert.assertEquals("production", environment.getActiveProfiles()[0]);
|
||||
Assert.assertTrue(datasourceConfig instanceof ProductionDatasourceConfig);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.baeldung.profiles;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
import org.springframework.test.context.support.AnnotationConfigContextLoader;
|
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@ContextConfiguration(classes = { SpringProfilesConfig.class }, loader = AnnotationConfigContextLoader.class)
|
||||
public class SpringProfilesWithMavenPropertiesIntegrationTest {
|
||||
|
||||
@Autowired
|
||||
DatasourceConfig datasourceConfig;
|
||||
|
||||
@Test
|
||||
public void setupDatasource() {
|
||||
Assert.assertTrue(datasourceConfig instanceof DevDatasourceConfig);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.baeldung.profiles;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||
import org.springframework.core.env.ConfigurableEnvironment;
|
||||
|
||||
public class SpringProfilesWithXMLIntegrationTest {
|
||||
|
||||
private ClassPathXmlApplicationContext classPathXmlApplicationContext;
|
||||
|
||||
@Test
|
||||
public void testSpringProfilesForDevEnvironment() {
|
||||
classPathXmlApplicationContext = new ClassPathXmlApplicationContext("classpath:springProfiles-config.xml");
|
||||
final ConfigurableEnvironment configurableEnvironment = classPathXmlApplicationContext.getEnvironment();
|
||||
configurableEnvironment.setActiveProfiles("dev");
|
||||
classPathXmlApplicationContext.refresh();
|
||||
final DatasourceConfig datasourceConfig = classPathXmlApplicationContext.getBean("devDatasourceConfig", DatasourceConfig.class);
|
||||
|
||||
Assert.assertTrue(datasourceConfig instanceof DevDatasourceConfig);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSpringProfilesForProdEnvironment() {
|
||||
classPathXmlApplicationContext = new ClassPathXmlApplicationContext("classpath:springProfiles-config.xml");
|
||||
final ConfigurableEnvironment configurableEnvironment = classPathXmlApplicationContext.getEnvironment();
|
||||
configurableEnvironment.setActiveProfiles("production");
|
||||
classPathXmlApplicationContext.refresh();
|
||||
final DatasourceConfig datasourceConfig = classPathXmlApplicationContext.getBean("productionDatasourceConfig", DatasourceConfig.class);
|
||||
|
||||
Assert.assertTrue(datasourceConfig instanceof ProductionDatasourceConfig);
|
||||
}
|
||||
}
|
||||
@@ -2,3 +2,4 @@
|
||||
|
||||
- [Spring Validation in the Service Layer](https://www.baeldung.com/spring-service-layer-validation)
|
||||
- [Validation in Spring Boot](https://www.baeldung.com/spring-boot-bean-validation)
|
||||
- [Spring Null-Safety Annotations](https://www.baeldung.com/spring-null-safety-annotations)
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.baeldung.nullibility;
|
||||
|
||||
import org.springframework.lang.NonNull;
|
||||
import org.springframework.lang.Nullable;
|
||||
|
||||
public class Person {
|
||||
@NonNull
|
||||
private String fullName;
|
||||
@Nullable
|
||||
private String nickName;
|
||||
|
||||
void setFullName(String fullName) {
|
||||
if (fullName != null && fullName.isEmpty()) {
|
||||
fullName = null;
|
||||
}
|
||||
this.fullName = fullName;
|
||||
}
|
||||
|
||||
void setNickName(String nickName) {
|
||||
if (nickName != null && nickName.isEmpty()) {
|
||||
nickName = null;
|
||||
}
|
||||
this.nickName = nickName;
|
||||
}
|
||||
|
||||
String getFullName() {
|
||||
return fullName;
|
||||
}
|
||||
|
||||
String getNickName() {
|
||||
return nickName;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
@NonNullApi
|
||||
@NonNullFields
|
||||
package com.baeldung.nullibility;
|
||||
|
||||
import org.springframework.lang.NonNullApi;
|
||||
import org.springframework.lang.NonNullFields;
|
||||
Reference in New Issue
Block a user