From 964c2e432f2f960f8ada5c0f2599fe153d0df22e Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer <paul-christian.volkmer@mni.thm.de> Date: Fri, 23 May 2014 23:04:46 +0200 Subject: [PATCH] Include JavaConfig based configuration in spring main configuration This will allow dynamic configuration depending on property file settings. Removed connector client bean from XML based configuration and added bean creation into JavaBased config class. Bean will be created if there is a property "connector.enable" with value "true" otherwise no bean will be created wich has the same behavior removing bean definition from XML configuration file. No need to change application config - can be done in property file :-) --- .../de/thm/arsnova/config/ExtraConfig.java | 41 +++++++++++++++++++ .../de/thm/arsnova/config/package-info.java | 1 + .../webapp/WEB-INF/spring/spring-main.xml | 9 +--- src/main/webapp/arsnova.properties.example | 1 + .../thm/arsnova/config/ExtraConfigTest.java | 37 +++++++++++++++++ src/test/resources/arsnova.properties.example | 1 + 6 files changed, 82 insertions(+), 8 deletions(-) create mode 100644 src/main/java/de/thm/arsnova/config/ExtraConfig.java create mode 100644 src/main/java/de/thm/arsnova/config/package-info.java create mode 100644 src/test/java/de/thm/arsnova/config/ExtraConfigTest.java diff --git a/src/main/java/de/thm/arsnova/config/ExtraConfig.java b/src/main/java/de/thm/arsnova/config/ExtraConfig.java new file mode 100644 index 000000000..d33ce426f --- /dev/null +++ b/src/main/java/de/thm/arsnova/config/ExtraConfig.java @@ -0,0 +1,41 @@ +package de.thm.arsnova.config; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +import org.springframework.context.annotation.PropertySources; +import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; +import org.springframework.core.env.Environment; + +import de.thm.arsnova.connector.client.ConnectorClient; +import de.thm.arsnova.connector.client.ConnectorClientImpl; + +@Configuration +@PropertySources({ + @PropertySource("arsnova.properties.example"), + @PropertySource("file:///etc/arsnova/connector.properties"), +}) +public class ExtraConfig { + + @Autowired + private Environment env; + + @Bean + public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { + return new PropertySourcesPlaceholderConfigurer(); + } + + @Bean(name = "connectorClient") + public ConnectorClient connectorClient() { + if (! "true".equals(env.getProperty("connector.enable"))) { + return null; + } + + ConnectorClientImpl connectorClient = new ConnectorClientImpl(); + connectorClient.setServiceLocation(env.getProperty("connector.uri")); + connectorClient.setUsername(env.getProperty("connector.username")); + connectorClient.setPassword(env.getProperty("connector.password")); + return connectorClient; + } +} diff --git a/src/main/java/de/thm/arsnova/config/package-info.java b/src/main/java/de/thm/arsnova/config/package-info.java new file mode 100644 index 000000000..87aa44641 --- /dev/null +++ b/src/main/java/de/thm/arsnova/config/package-info.java @@ -0,0 +1 @@ +package de.thm.arsnova.config; diff --git a/src/main/webapp/WEB-INF/spring/spring-main.xml b/src/main/webapp/WEB-INF/spring/spring-main.xml index 894bf271a..31686a7ec 100644 --- a/src/main/webapp/WEB-INF/spring/spring-main.xml +++ b/src/main/webapp/WEB-INF/spring/spring-main.xml @@ -23,7 +23,7 @@ </bean> <context:component-scan - base-package="de.thm.arsnova.dao,de.thm.arsnova.services,de.thm.arsnova.events" /> + base-package="de.thm.arsnova.dao,de.thm.arsnova.services,de.thm.arsnova.events,de.thm.arsnova.config" /> <context:annotation-config /> <task:annotation-driven /> @@ -43,11 +43,4 @@ <bean id="userService" scope="singleton" class="de.thm.arsnova.services.UserService" /> <bean id="databaseDao" class="de.thm.arsnova.dao.CouchDBDao" /> - - <!-- Example of connector client configuration --> - <!-- Uncomment bean definition to activate connector --> - <!-- bean id="connectorClient" scope="singleton" class="de.thm.arsnova.connector.client.ConnectorClientImpl"> - <property name="serviceLocation" value="${connector.uri}"></property> <property - name="username" value="${connector.username}"></property> <property name="password" - value="${connector.password}"></property> </bean --> </beans> diff --git a/src/main/webapp/arsnova.properties.example b/src/main/webapp/arsnova.properties.example index 678e41714..e92e71bf6 100644 --- a/src/main/webapp/arsnova.properties.example +++ b/src/main/webapp/arsnova.properties.example @@ -29,6 +29,7 @@ couchdb.password= socketio.ip=0.0.0.0 socketio.port=10443 +connector.enable=false connector.uri=http://localhost:8080/connector-service connector.username=test connector.password=test diff --git a/src/test/java/de/thm/arsnova/config/ExtraConfigTest.java b/src/test/java/de/thm/arsnova/config/ExtraConfigTest.java new file mode 100644 index 000000000..ea65c72a7 --- /dev/null +++ b/src/test/java/de/thm/arsnova/config/ExtraConfigTest.java @@ -0,0 +1,37 @@ +package de.thm.arsnova.config; + +import static org.junit.Assert.assertNull; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; + +import de.thm.arsnova.connector.client.ConnectorClient; + +@RunWith(SpringJUnit4ClassRunner.class) +@WebAppConfiguration +@ContextConfiguration(locations = { + "file:src/main/webapp/WEB-INF/spring/arsnova-servlet.xml", + "file:src/main/webapp/WEB-INF/spring/spring-main.xml", + "file:src/main/webapp/WEB-INF/spring/spring-security.xml", + "file:src/test/resources/test-config.xml", + "file:src/test/resources/test-socketioconfig.xml" +}) +public class ExtraConfigTest { + + @Autowired + PropertySourcesPlaceholderConfigurer configurer; + + @Autowired(required = false) + private ConnectorClient connectorClient; + + @Test + public void testShouldNotLoadConnectorClientByDefault() { + assertNull(connectorClient); + } + +} diff --git a/src/test/resources/arsnova.properties.example b/src/test/resources/arsnova.properties.example index 00c73a8d1..f5830dcb6 100644 --- a/src/test/resources/arsnova.properties.example +++ b/src/test/resources/arsnova.properties.example @@ -27,6 +27,7 @@ upload.filesize_b=1048576 socketio.ip=0.0.0.0 socketio.port=10443 +connector.enable=false connector.uri=http://localhost:8080/connector-service connector.username=test connector.password=test -- GitLab