Ответ 1
Не добавляйте логику в свой код, чтобы проверить, в какой среде вы работаете, - это рецепт катастрофы (или, по крайней мере, сжигание много полуночного масла по дороге).
Вы используете Spring, поэтому воспользуйтесь этим. Используйте инъекцию зависимостей, чтобы обеспечить параметры, специфичные для вашей среды. Например. если вам нужно вызвать веб-службу с различными конечными точками в тесте и производстве, сделайте что-то вроде этого:
public class ServiceFacade {
private String endpoint;
public void setEndpoint(String endpoint) {
this.endpoint = endpoint;
}
public void doStuffWithWebService() {
// use the value of endpoint to construct client
}
}
Затем используйте Spring PropertyPlaceholderConfigurer (или, альтернативно, PropertyOverrideConfigurer), чтобы заполнить это свойство либо из файла .properties, либо из системного свойства JVM, например:
<bean id="serviceFacade" class="ServiceFacade">
<property name="endpoint" value="${env.endpoint}"/>
</bean>
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<value>classpath:environment.properties</value>
</property>
</bean>
Теперь создайте два (или три или четыре) файла, например: по одному для каждой из разных сред.
В environment-dev.properties:
env.endpoint=http://dev-server:8080/
В environment-test.properties:
env.endpoint=http://test-server:8080/
Теперь возьмите соответствующий файл свойств для каждой среды, переименуйте его только в environment.properties и скопируйте его в каталог lib сервера приложений или где-нибудь еще, где он появится в вашем пути к классу приложений. Например. для Tomcat:
cp environment-dev.properties $CATALINA_HOME/lib/environment.properties
Теперь развертывание вашего приложения - Spring заменит значение "http://dev-server: 8080/", когда оно установит ваше свойство конечной точки во время выполнения.
Подробнее о загрузке значений свойств см. в документах Spring.