2014-10-14 2 views
4

я установить переменные окружения SPRING_PROFILES_ACTIVE на моей локальной машине Linux:Использование Spring профилей с запасным

$ echo $SPRING_PROFILES_ACTIVE 
development,develop,devel,dev 

В моем сервлета инициализаторе Я устанавливаю профиль по умолчанию, как я не ставил никаких переменных на моем производительной машиной, расширяя AbstractDispatcherServletInitializer и переопределение createRootApplicationContext:

AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext(); 
StringBuilder sb = new StringBuilder(); 
for (String s : rootContext.getEnvironment().getActiveProfiles()) { 
    sb.append(s).append(","); 
} 
log.debug("Active Profiles: " + sb.toString()); 
sb = new StringBuilder(); 
for (String s : rootContext.getEnvironment().getDefaultProfiles()) { 
    sb.append(s).append(","); 
} 
log.debug("Default Profiles: " + sb.toString()); 
rootContext.getEnvironment().setDefaultProfiles("production"); 
sb = new StringBuilder(); 
for (String s : rootContext.getEnvironment().getActiveProfiles()) { 
    sb.append(s).append(","); 
} 
log.debug("Active Profiles: " + sb.toString()); 
sb = new StringBuilder(); 
for (String s : rootContext.getEnvironment().getDefaultProfiles()) { 
    sb.append(s).append(","); 
} 
log.debug("Default Profiles: " + sb.toString()); 
return rootContext; 

Это выход:

DEBUG c.e.WebApplicationInitializer - Active Profiles: 
DEBUG c.e.WebApplicationInitializer - Default Profiles: default, 
DEBUG c.e.WebApplicationInitializer - Active Profiles: 
DEBUG c.e.WebApplicationInitializer - Default Profiles: production, 

Почему нет активных профилей?

UPDATE выход

Войти с уровнем СЛЕД:

DEBUG o.s.w.c.s.StandardServletEnvironment - Adding [servletConfigInitParams] PropertySource with lowest search precedence 
DEBUG o.s.w.c.s.StandardServletEnvironment - Adding [servletContextInitParams] PropertySource with lowest search precedence 
DEBUG o.s.w.c.s.StandardServletEnvironment - Adding [jndiProperties] PropertySource with lowest search precedence 
DEBUG o.s.w.c.s.StandardServletEnvironment - Adding [systemProperties] PropertySource with lowest search precedence 
DEBUG o.s.w.c.s.StandardServletEnvironment - Adding [systemEnvironment] PropertySource with lowest search precedence 
DEBUG o.s.w.c.s.StandardServletEnvironment - Initialized StandardServletEnvironment with PropertySources [servletConfigInitParams,servletContextInitParams,jndiProperties,systemProperties,systemEnvironment] 
TRACE o.s.c.e.PropertySourcesPropertyResolver - getProperty("spring.profiles.active", String) 
DEBUG o.s.c.e.PropertySourcesPropertyResolver - Searching for key 'spring.profiles.active' in [servletConfigInitParams] 
DEBUG o.s.c.e.PropertySourcesPropertyResolver - Searching for key 'spring.profiles.active' in [servletContextInitParams] 
DEBUG o.s.c.e.PropertySourcesPropertyResolver - Searching for key 'spring.profiles.active' in [jndiProperties] 
DEBUG o.springframework.jndi.JndiTemplate - Looking up JNDI object with name [java:comp/env/spring.profiles.active] 
DEBUG o.s.jndi.JndiLocatorDelegate - Converted JNDI name [java:comp/env/spring.profiles.active] not found - trying original name [spring.profiles.active]. javax.naming.NameNotFoundException: Name [spring.profiles.active] is not bound in this Context. Unable to find [spring.profiles.active]. 
DEBUG o.springframework.jndi.JndiTemplate - Looking up JNDI object with name [spring.profiles.active] 
DEBUG o.s.jndi.JndiPropertySource - JNDI lookup for name [spring.profiles.active] threw NamingException with message: Name [spring.profiles.active] is not bound in this Context. Unable to find [spring.profiles.active].. Returning null. 
DEBUG o.s.c.e.PropertySourcesPropertyResolver - Searching for key 'spring.profiles.active' in [systemProperties] 
DEBUG o.s.c.e.PropertySourcesPropertyResolver - Searching for key 'spring.profiles.active' in [systemEnvironment] 
DEBUG o.s.c.e.PropertySourcesPropertyResolver - Could not find key 'spring.profiles.active' in any property source. Returning [null] 
DEBUG c.e.WebApplicationInitializer - Active Profiles: 
TRACE o.s.c.e.PropertySourcesPropertyResolver - getProperty("spring.profiles.default", String) 
DEBUG o.s.c.e.PropertySourcesPropertyResolver - Searching for key 'spring.profiles.default' in [servletConfigInitParams] 
DEBUG o.s.c.e.PropertySourcesPropertyResolver - Searching for key 'spring.profiles.default' in [servletContextInitParams] 
DEBUG o.s.c.e.PropertySourcesPropertyResolver - Searching for key 'spring.profiles.default' in [jndiProperties] 
DEBUG o.springframework.jndi.JndiTemplate - Looking up JNDI object with name [java:comp/env/spring.profiles.default] 
DEBUG o.s.jndi.JndiLocatorDelegate - Converted JNDI name [java:comp/env/spring.profiles.default] not found - trying original name [spring.profiles.default]. javax.naming.NameNotFoundException: Name [spring.profiles.default] is not bound in this Context. Unable to find [spring.profiles.default]. 
DEBUG o.springframework.jndi.JndiTemplate - Looking up JNDI object with name [spring.profiles.default] 
DEBUG o.s.jndi.JndiPropertySource - JNDI lookup for name [spring.profiles.default] threw NamingException with message: Name [spring.profiles.default] is not bound in this Context. Unable to find [spring.profiles.default].. Returning null. 
DEBUG o.s.c.e.PropertySourcesPropertyResolver - Searching for key 'spring.profiles.default' in [systemProperties] 
DEBUG o.s.c.e.PropertySourcesPropertyResolver - Searching for key 'spring.profiles.default' in [systemEnvironment] 
DEBUG o.s.c.e.PropertySourcesPropertyResolver - Could not find key 'spring.profiles.default' in any property source. Returning [null] 
DEBUG c.e.WebApplicationInitializer - Default Profiles: default, 
TRACE o.s.c.e.PropertySourcesPropertyResolver - getProperty("spring.profiles.active", String) 
DEBUG o.s.c.e.PropertySourcesPropertyResolver - Searching for key 'spring.profiles.active' in [servletConfigInitParams] 
DEBUG o.s.c.e.PropertySourcesPropertyResolver - Searching for key 'spring.profiles.active' in [servletContextInitParams] 
DEBUG o.s.c.e.PropertySourcesPropertyResolver - Searching for key 'spring.profiles.active' in [jndiProperties] 
DEBUG o.springframework.jndi.JndiTemplate - Looking up JNDI object with name [java:comp/env/spring.profiles.active] 
DEBUG o.s.jndi.JndiLocatorDelegate - Converted JNDI name [java:comp/env/spring.profiles.active] not found - trying original name [spring.profiles.active]. javax.naming.NameNotFoundException: Name [spring.profiles.active] is not bound in this Context. Unable to find [spring.profiles.active]. 
DEBUG o.springframework.jndi.JndiTemplate - Looking up JNDI object with name [spring.profiles.active] 
DEBUG o.s.jndi.JndiPropertySource - JNDI lookup for name [spring.profiles.active] threw NamingException with message: Name [spring.profiles.active] is not bound in this Context. Unable to find [spring.profiles.active].. Returning null. 
DEBUG o.s.c.e.PropertySourcesPropertyResolver - Searching for key 'spring.profiles.active' in [systemProperties] 
DEBUG o.s.c.e.PropertySourcesPropertyResolver - Searching for key 'spring.profiles.active' in [systemEnvironment] 
DEBUG o.s.c.e.PropertySourcesPropertyResolver - Could not find key 'spring.profiles.active' in any property source. Returning [null] 
DEBUG c.e.WebApplicationInitializer - Active Profiles: 
DEBUG c.e.WebApplicationInitializer - Default Profiles: production, 

UPDATE 2

Я экспортировал переменную окружения путем создания файла в /etc/profile.d:

DEBUG c.e.WebApplicationInitializer - System.getenv("SPRING_PROFILES_ACTIVE"): null 
+0

Выводит ли вывод отладчика Spring из источника, где он ищет активный профиль? Если нет, уровень TRACE дает больше информации? – geoand

+0

Это упоминается здесь: http://gordondickens.com/wordpress/2012/06/12/spring-3-1-environment-profiles/ (Этот токен может быть установлен как: переменная среды, свойство JVM, веб-параметр , Programmatic). Я рассмотрю вывод TRACE. – dtrunk

+0

Я добавил вывод TRACE выше. См. Раздел ОБНОВЛЕНИЕ. – dtrunk

ответ

1

Если System.getenv("SPRING_PROFILES_ACTIVE") возвращает null, это потому, что переменная не определена в системной среде.

Файлы в /etc/profile.d/*.sh загружаются только для колонок входа bash. Если вы начинаете свой Java-процесс с non-login shell, то переменная для оболочки входа не загружается/не отображается.

Edit:

Поскольку Tomcat запускается как сервис, вы должны установить переменную окружения в setenv.sh.

+0

Nope. Все еще 'null'. Ни '/ etc/bash.bashrc', ни' ~/.bashrc'. – dtrunk

+0

@dtrunk Как вы запускаете приложение java? –

+0

Tomcat 7, который работает как услуга. И да, после загрузки экспорта в указанные файлы я перезагрузился. – dtrunk