Ну, где разместить конфигурацию - спорный вопрос, и это зависит от вкусов.
Опираясь на фильтры ресурсов maven, необходимо снова объединить войну в каждом развертывании. Для меня это не вариант.
Вариант 1 Пружинные профили
Вы можете определить различные профили пружины в соответствии с настройками развертывания, например, определить в файле свойств, где развернуты остальные службы.
<beans profile="develop">
<context:property-placeholder location="classpath:develop-config.properties" />
</beans>
<beans profile="production">
<context:property-placeholder location="classpath:production-config.properties" />
</beans>
<jaxws:client id="wsClient" serviceClass="com.foo.WebServiceInterface" address="${address}" />
production-config.properties может иметь:
address=http://localhost:8092/WSApp/WebServiceImplPort
Чтобы активировать ваш любимый профиль:
Запустите приложение, используя -Dspring.profiles.active = production
Вариант 2 Пружинная среда
Spring представляет механизм, позволяющий включать или активировать профили программно. Это может быть использовано для чтения различных файлов конфигурации для каждой среды. Или вы можете сделать доступными для вашей весны контекстные переменные системы Java или переменные среды операционной системы.
Если вы хотите следовать руководству по применению 12 factor о конфигурации. Говорят, что конфигурация должна быть размещена в переменных среды.
Вернее вы предпочитаете 1 войну Многим подходам к развертыванию. Это ваш выбор.
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MapPropertySource;
import org.springframework.core.io.support.ResourcePropertySource;
import org.springframework.web.context.ConfigurableWebApplicationContext;
public class EnviromentDiscovery implements org.springframework.context.ApplicationContextInitializer.ApplicationContextInitializer<org.springframework.context.ApplicationContextInitializer.ConfigurableWebApplicationContext> {
public void initialize(ConfigurableWebApplicationContext ctx) {
ConfigurableEnvironment environment = ctx.getEnvironment();
// This variable has the same meaning as host, but i can be redefined in
// case of cluster deployment.
String hostname= InetAddress.getLocalHost().getHostName();
logger.info("Application deployed int host {} using context path: {}", engineName, contextPath);
// You should define a method which load your config.properties according your own criteria depending for example on your hostname.
InputStream configurationSource = getResourceAsStream(hostname);
Properties config = new Properties();
config.load(configurationSource);
// Take your address endpoint
String address = config.getProperty("address");
Map<String, Object> props = new HashMap<>();
props.put("address", address);
MapPropertySource mapSource = new MapPropertySource("props", props);
// Voilá! your property address is available under spring context!
environment.getPropertySources().addLast(mapSource);
ctx.registerShutdownHook();
}
}
Теперь ваш контекстный файл выглядит так:
Не забудьте добавить в свой web.xml
<context-param>
<param-name>contextInitializerClasses</param-name>
<param-value>net.sf.gazpachoquest.bootstrap.EnviromentDiscovery</param-value>
</context-param>
Подробнее о Spring spring здесь : или если вы хотите проверить мое подтверждение концепции здесь .