Определен ли контекст приложения Spring Profile?
Я создал веб-проект с настроенным родительским дочерним контекстом приложения. Контекст корневого приложения, настроенный с помощью компонентов инфраструктуры (Datasource
, Transaction, ORM, Cache, security) и контекст веб-приложения, настроенные с помощью средств разрешения представления, и все эти компоненты объединены в относительные профили следующим образом:
<context-param>
<param-name>spring.profiles.default</param-name>
<param-value>
xml,
cache,JDK,Ehcache,Redis,Memcache,xmemcached-Client,Composite,
db,C3P0,
orm,Hibernate,Hibernate4,
transaction
</param-value>
</context-param>
<servlet>
<servlet-name>rest</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:servlet/rest-servlet.xml</param-value>
</init-param>
<init-param>
<param-name>spring.profiles.active</param-name>
<param-value>xml,combined</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
когда я пытаюсь запустить этот проект, я получаю эту ошибку:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cacheTestController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.test.springbasic.service.impl.ContactService org.test.springbasic.controller.CacheTestController.contactService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.test.springbasic.service.impl.ContactService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
Я хочу знать, специфичен ли контекст приложения Spring для профиля (мои контроллеры в дочернем контексте и мои сервисы в корневом контексте и автоматически подключены к контроллерам), ContactService
помечен @Profile({ "Hibernate" })
почему я не могу получить бин, он там, я активировал профиль "Hibernate" под spring.profiles.default
Контекст-пары!
1 ответ
Профили можно активировать несколькими способами. Давайте теперь посмотрим, какой из них имеет приоритет над другим, и что произойдет, если вы используете более одного - от самого высокого до самого низкого приоритета:
- Параметр контекста в web.xml
- WebApplicationInitializer
- Системный параметр JVM
- Переменная среды
Основываясь на приведенной выше информации, профили, установленные в init-param
переопределить профили, установленные в context-param