Так много людей, так много умов. Когда мы внедряем программное обеспечение для разных клиентов, нам иногда приходится обрабатывать различные требования для одного и того же проекта. Например, Клиент 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 . |