4.6. Использование профилей Spring
Профили Spring позволяют кастомизировать приложение для работы в различном окружении. В зависимости от активного профиля можно инстанциировать различные реализации одного и того же бина, а также присваивать различные значения свойствам приложения.
Если Spring-бин имеет аннотацию @Profile
, он будет инстанциирован только если указанный в аннотации профиль соответствует какому-либо активному профилю. В примере ниже SomeDevServiceBean
будет использован когда активен профиль dev
, а SomeProdServiceBean
будет использован когда активен профиль prod
:
public interface SomeService {
String NAME = "demo_SomeService";
String hello(String input);
}
@Service(SomeService.NAME)
@Profile("dev")
public class SomeDevServiceBean implements SomeService {
@Override
public String hello(String input) {
return "Service stub: hello " + input;
}
}
@Service(SomeService.NAME)
@Profile("prod")
public class SomeProdServiceBean implements SomeService {
@Override
public String hello(String input) {
return "Real service: hello " + input;
}
}
Для того, чтобы определить некоторые специфичные для профиля свойства приложения, создайте файл <profile>-app.properties
(или <profile>-web-app.properties
для web модуля) в том же пакете, что и основной файл app.properties
.
Например, для core модуля:
com/company/demo/app.properties
com/company/demo/prod-app.properties
Для web модуля:
com/company/demo/web-app.properties
com/company/demo/prod-web-app.properties
Специфичный для профиля файл будет загружен сразу после базового файла, поэтому объявленные в нем свойства переопределят свойства, заданные в базовом файле. В примере ниже для профиля prod
задаются параметры подключения к некоторой базе данных:
cuba.dbmsType = postgres
cuba.dataSourceProvider = application
cuba.dataSource.dbName = my-prod-db
cuba.dataSource.host = my-prod-host
cuba.dataSource.username = cuba
cuba.dataSource.password = cuba
Список активных профилей задается для приложения следующими способами:
-
В servlet context параметре
spring.profiles.active
в файлеweb.xml
, например:<web-app ...> <context-param> <param-name>spring.profiles.active</param-name> <param-value>prod</param-value> </context-param>
-
В системном свойстве Java
spring.profiles.active
. Например, при запуске Uber JAR:java -Dspring.profiles.active=prod -jar app.jar