diff --git a/spring-all/src/main/java/org/baeldung/profiles/DatasourceConfig.java b/spring-all/src/main/java/org/baeldung/profiles/DatasourceConfig.java new file mode 100644 index 0000000000..80cb060c7e --- /dev/null +++ b/spring-all/src/main/java/org/baeldung/profiles/DatasourceConfig.java @@ -0,0 +1,5 @@ +package org.baeldung.profiles; + +public interface DatasourceConfig { + public void setup(); +} diff --git a/spring-all/src/main/java/org/baeldung/profiles/DevDatasourceConfig.java b/spring-all/src/main/java/org/baeldung/profiles/DevDatasourceConfig.java new file mode 100644 index 0000000000..e357280c43 --- /dev/null +++ b/spring-all/src/main/java/org/baeldung/profiles/DevDatasourceConfig.java @@ -0,0 +1,15 @@ +package org.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. "); + } + +} diff --git a/spring-all/src/main/java/org/baeldung/profiles/ProductionDatasourceConfig.java b/spring-all/src/main/java/org/baeldung/profiles/ProductionDatasourceConfig.java new file mode 100644 index 0000000000..f1adff9c96 --- /dev/null +++ b/spring-all/src/main/java/org/baeldung/profiles/ProductionDatasourceConfig.java @@ -0,0 +1,15 @@ +package org.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. "); + } + +} diff --git a/spring-all/src/main/java/org/baeldung/profiles/SpringProfilesConfig.java b/spring-all/src/main/java/org/baeldung/profiles/SpringProfilesConfig.java new file mode 100644 index 0000000000..eb5543e3db --- /dev/null +++ b/spring-all/src/main/java/org/baeldung/profiles/SpringProfilesConfig.java @@ -0,0 +1,10 @@ +package org.baeldung.profiles; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan("org.baeldung.profiles") +public class SpringProfilesConfig { + +} diff --git a/spring-all/src/main/java/org/baeldung/springevents/asynchronous/AsynchronousSpringEventsConfig.java b/spring-all/src/main/java/org/baeldung/springevents/asynchronous/AsynchronousSpringEventsConfig.java new file mode 100644 index 0000000000..93f61bf517 --- /dev/null +++ b/spring-all/src/main/java/org/baeldung/springevents/asynchronous/AsynchronousSpringEventsConfig.java @@ -0,0 +1,20 @@ +package org.baeldung.springevents.asynchronous; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.event.ApplicationEventMulticaster; +import org.springframework.context.event.SimpleApplicationEventMulticaster; +import org.springframework.core.task.SimpleAsyncTaskExecutor; + +@Configuration +@ComponentScan("org.baeldung.springevents.synchronous") +public class AsynchronousSpringEventsConfig { + + @Bean(name = "applicationEventMulticaster") + public static ApplicationEventMulticaster simpleApplicationEventMulticaster() { + final SimpleApplicationEventMulticaster simpleApplicationEventMulticaster = new SimpleApplicationEventMulticaster(); + simpleApplicationEventMulticaster.setTaskExecutor(new SimpleAsyncTaskExecutor()); + return simpleApplicationEventMulticaster; + } +} diff --git a/spring-all/src/main/java/org/baeldung/springevents/synchronous/ContextRefreshedListener.java b/spring-all/src/main/java/org/baeldung/springevents/synchronous/ContextRefreshedListener.java new file mode 100644 index 0000000000..052437e555 --- /dev/null +++ b/spring-all/src/main/java/org/baeldung/springevents/synchronous/ContextRefreshedListener.java @@ -0,0 +1,15 @@ +package org.baeldung.springevents.synchronous; + +import org.springframework.context.ApplicationListener; +import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.stereotype.Component; + +@Component +public class ContextRefreshedListener implements ApplicationListener { + + @Override + public void onApplicationEvent(final ContextRefreshedEvent cse) { + System.out.println("Handling context re-freshed event. "); + } + +} \ No newline at end of file diff --git a/spring-all/src/main/java/org/baeldung/springevents/synchronous/CustomSpringEvent.java b/spring-all/src/main/java/org/baeldung/springevents/synchronous/CustomSpringEvent.java new file mode 100644 index 0000000000..1631801ffe --- /dev/null +++ b/spring-all/src/main/java/org/baeldung/springevents/synchronous/CustomSpringEvent.java @@ -0,0 +1,19 @@ +package org.baeldung.springevents.synchronous; + +import org.springframework.context.ApplicationEvent; + +public class CustomSpringEvent extends ApplicationEvent { + private static final long serialVersionUID = -8053143381029977953L; + + private String message; + + public CustomSpringEvent(final Object source, final String message) { + super(source); + this.message = message; + } + + public String getMessage() { + return message; + } + +} diff --git a/spring-all/src/main/java/org/baeldung/springevents/synchronous/CustomSpringEventListener.java b/spring-all/src/main/java/org/baeldung/springevents/synchronous/CustomSpringEventListener.java new file mode 100644 index 0000000000..69f96966ec --- /dev/null +++ b/spring-all/src/main/java/org/baeldung/springevents/synchronous/CustomSpringEventListener.java @@ -0,0 +1,14 @@ +package org.baeldung.springevents.synchronous; + +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Component; + +@Component +public class CustomSpringEventListener implements ApplicationListener { + + @Override + public void onApplicationEvent(final CustomSpringEvent event) { + System.out.println("Received spring custom event - " + event.getMessage()); + } + +} \ No newline at end of file diff --git a/spring-all/src/main/java/org/baeldung/springevents/synchronous/CustomSpringEventPublisher.java b/spring-all/src/main/java/org/baeldung/springevents/synchronous/CustomSpringEventPublisher.java new file mode 100644 index 0000000000..decbcf446a --- /dev/null +++ b/spring-all/src/main/java/org/baeldung/springevents/synchronous/CustomSpringEventPublisher.java @@ -0,0 +1,18 @@ +package org.baeldung.springevents.synchronous; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.stereotype.Component; + +@Component +public class CustomSpringEventPublisher { + + @Autowired + private ApplicationEventPublisher applicationEventPublisher; + + public void publishEvent(final String message) { + System.out.println("Publishing custom event. "); + final CustomSpringEvent customSpringEvent = new CustomSpringEvent(this, message); + applicationEventPublisher.publishEvent(customSpringEvent); + } +} diff --git a/spring-all/src/main/java/org/baeldung/springevents/synchronous/SynchronousSpringEventsConfig.java b/spring-all/src/main/java/org/baeldung/springevents/synchronous/SynchronousSpringEventsConfig.java new file mode 100644 index 0000000000..fff8a7e4b5 --- /dev/null +++ b/spring-all/src/main/java/org/baeldung/springevents/synchronous/SynchronousSpringEventsConfig.java @@ -0,0 +1,10 @@ +package org.baeldung.springevents.synchronous; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan("org.baeldung.springevents.synchronous") +public class SynchronousSpringEventsConfig { + +} diff --git a/spring-all/src/main/resources/springProfiles-config.xml b/spring-all/src/main/resources/springProfiles-config.xml new file mode 100644 index 0000000000..a290f83b26 --- /dev/null +++ b/spring-all/src/main/resources/springProfiles-config.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/spring-all/src/test/java/org/baeldung/profiles/DevProfileWithAnnotationTest.java b/spring-all/src/test/java/org/baeldung/profiles/DevProfileWithAnnotationTest.java new file mode 100644 index 0000000000..2b65928da8 --- /dev/null +++ b/spring-all/src/test/java/org/baeldung/profiles/DevProfileWithAnnotationTest.java @@ -0,0 +1,23 @@ +package org.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 DevProfileWithAnnotationTest { + @Autowired + DatasourceConfig datasourceConfig; + + @Test + public void testSpringProfiles() { + Assert.assertTrue(datasourceConfig instanceof DevDatasourceConfig); + } +} \ No newline at end of file diff --git a/spring-all/src/test/java/org/baeldung/profiles/ProductionProfileWithAnnotationTest.java b/spring-all/src/test/java/org/baeldung/profiles/ProductionProfileWithAnnotationTest.java new file mode 100644 index 0000000000..551636bd31 --- /dev/null +++ b/spring-all/src/test/java/org/baeldung/profiles/ProductionProfileWithAnnotationTest.java @@ -0,0 +1,32 @@ +package org.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 ProductionProfileWithAnnotationTest { + + @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); + } +} \ No newline at end of file diff --git a/spring-all/src/test/java/org/baeldung/profiles/SpringProfilesWithXMLTest.java b/spring-all/src/test/java/org/baeldung/profiles/SpringProfilesWithXMLTest.java new file mode 100644 index 0000000000..15c9265a13 --- /dev/null +++ b/spring-all/src/test/java/org/baeldung/profiles/SpringProfilesWithXMLTest.java @@ -0,0 +1,33 @@ +package org.baeldung.profiles; + +import org.junit.Assert; +import org.junit.Test; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.springframework.core.env.ConfigurableEnvironment; + +public class SpringProfilesWithXMLTest { + + 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); + } +} diff --git a/spring-all/src/test/java/org/baeldung/springevents/asynchronous/AsynchronousCustomSpringEventsTest.java b/spring-all/src/test/java/org/baeldung/springevents/asynchronous/AsynchronousCustomSpringEventsTest.java new file mode 100644 index 0000000000..2b45ae4e68 --- /dev/null +++ b/spring-all/src/test/java/org/baeldung/springevents/asynchronous/AsynchronousCustomSpringEventsTest.java @@ -0,0 +1,23 @@ +package org.baeldung.springevents.asynchronous; + +import org.baeldung.springevents.synchronous.CustomSpringEventPublisher; +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 = { AsynchronousSpringEventsConfig.class }, loader = AnnotationConfigContextLoader.class) +public class AsynchronousCustomSpringEventsTest { + + @Autowired + private CustomSpringEventPublisher publisher; + + @Test + public void testCustomSpringEvents() throws InterruptedException { + publisher.publishEvent("Hello world!!"); + System.out.println("Done publishing asynchronous custom event. "); + } +} diff --git a/spring-all/src/test/java/org/baeldung/springevents/synchronous/ContextRefreshedListenerTest.java b/spring-all/src/test/java/org/baeldung/springevents/synchronous/ContextRefreshedListenerTest.java new file mode 100644 index 0000000000..d971698e3f --- /dev/null +++ b/spring-all/src/test/java/org/baeldung/springevents/synchronous/ContextRefreshedListenerTest.java @@ -0,0 +1,18 @@ +package org.baeldung.springevents.synchronous; + +import org.baeldung.springevents.synchronous.SynchronousSpringEventsConfig; +import org.junit.Test; +import org.junit.runner.RunWith; +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 = { SynchronousSpringEventsConfig.class }, loader = AnnotationConfigContextLoader.class) +public class ContextRefreshedListenerTest { + + @Test + public void testContextRefreshedListener() throws InterruptedException { + System.out.println("Test context re-freshed listener."); + } +} \ No newline at end of file diff --git a/spring-all/src/test/java/org/baeldung/springevents/synchronous/SynchronousCustomSpringEventsTest.java b/spring-all/src/test/java/org/baeldung/springevents/synchronous/SynchronousCustomSpringEventsTest.java new file mode 100644 index 0000000000..b559ca9fc9 --- /dev/null +++ b/spring-all/src/test/java/org/baeldung/springevents/synchronous/SynchronousCustomSpringEventsTest.java @@ -0,0 +1,22 @@ +package org.baeldung.springevents.synchronous; + +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 = { SynchronousSpringEventsConfig.class }, loader = AnnotationConfigContextLoader.class) +public class SynchronousCustomSpringEventsTest { + + @Autowired + private CustomSpringEventPublisher publisher; + + @Test + public void testCustomSpringEvents() throws InterruptedException { + publisher.publishEvent("Hello world!!"); + System.out.println("Done publishing synchronous custom event. "); + } +}