Статьи

Введение в весенние профили

Так много людей, так много умов. Когда мы внедряем программное обеспечение для разных клиентов, нам иногда приходится обрабатывать различные требования для одного и того же проекта. Например, Клиент A требует аутентификации SAML, а клиент B — аутентификации LDAP.

С помощью Spring Profiles (доступно в Spring 3.1) мы можем обеспечить способ разделения частей нашей реализованной конфигурации приложения. Этот блог поможет нам сделать определенный код или, скорее, определенные компоненты Spring доступными только для определенных требований. Например, пример, используемый в этом блоге, можно использовать для активации необходимого поставщика аутентификации для менеджера поставщиков при использовании Spring Security.

Профили могут быть настроены с помощью аннотаций и / или XML.

Аннотации

Аннотированные компоненты @Component или @Configuration могут содержать аннотацию @Profile для загрузки их только в определенной среде.

Ldap профиль аннотированной конфигурации

1
2
3
4
5
6
7
@Component
@Profile("ldap")
public class LDAPAuthentication {  
   public LDAPAuthentication() {
      System.out.println("LDAP Authentication set by annotations");
   }   
}

Saml профиль с аннотированной конфигурацией

1
2
3
4
5
6
7
@Component
@Profile("saml")
public class SAMLAuthentication {
   public SAMLAuthentication() {
      System.out.println("SAML Authentication set by annotations");
   }
}

XML

Возможно, больше не используется в недавно запущенных проектах, но также возможно сделать некоторые компоненты Spring доступными только в вашей конфигурации XML.

Конфигурация Spring XML

01
02
03
04
05
06
07
08
09
10
<!--   
   We use the profile attribute on the beans element to specify the profile.
   Only the child beans are loaded on initialization if the profile is active
-->
<beans profile="ldap">
   <bean class="com.jdriven.blog.profiles.xml.LDAPAuthentication" />
</beans>
<beans profile="saml">
   <bean class="com.jdriven.blog.profiles.xml.SAMLAuthentication" />   
</beans>

Активировать правильный профиль

Конечно, вы можете комбинировать обе конфигурации, но очевидно, что нужно выбрать одну конфигурацию, чтобы сделать ваш код более предсказуемым. Просто чтобы показать возможности, которые мы объединили в одном проекте. В простом приложении Java профили можно настроить, активировав профиль в контексте вашего приложения.

Запустите образец приложения

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static void main(String[] args) {
   //Create new context to show the XML Spring profile setup
   GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
   //Setting 'ldap' as active profile
   ctx.getEnvironment().setActiveProfiles("ldap");
   //Load the app-context.xml from the root of the classpath
   ctx.load("classpath:app-context.xml");
   //We need to refresh the application because we added a resource
   ctx.refresh();
   //Closing the application context to release and destroy all resources and cached beans
   ctx.close();
 
   //Creating a new context to show the annotation Spring profile setup
   AnnotationConfigApplicationContext actx = new AnnotationConfigApplicationContext();
   //Setting 'saml' as active profile
   actx.getEnvironment().setActiveProfiles("saml");
   //Scan base package for annotations
   actx.scan("com.jdriven.blog");
   //We need to refresh the application because we added a scan
   actx.refresh();
   //Closing the application context to release and destroy all resources and cached beans
   actx.close();
}

Смотрите следующий GitHub для полного источника этого проекта:

Ссылка: Введение в профили Spring от нашего партнера JCG Мишеля Мейвиссена в блоге JDriven .