Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
spring-boot
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
DEMO
spring-boot
Commits
4a10cfe1
Commit
4a10cfe1
authored
Nov 25, 2016
by
Andy Wilkinson
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch '1.5.x'
parents
2964e311
8757ca77
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
85 additions
and
21 deletions
+85
-21
appendix-application-properties.adoc
...cs/src/main/asciidoc/appendix-application-properties.adoc
+2
-2
spring-boot-features.adoc
spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc
+3
-1
ConfigFileApplicationListener.java
...rk/boot/context/config/ConfigFileApplicationListener.java
+66
-18
ConfigFileApplicationListenerTests.java
...ot/context/config/ConfigFileApplicationListenerTests.java
+8
-0
testsetmultiprofileslist.yml
spring-boot/src/test/resources/testsetmultiprofileslist.yml
+6
-0
No files found.
spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc
View file @
4a10cfe1
...
...
@@ -127,8 +127,8 @@ content into your application; rather pick only the properties that you need.
spring.pid.file= # Location of the PID file to write (if ApplicationPidFileWriter is used).
# PROFILES
spring.profiles.active= # Comma-separated list of <<howto-set-active-spring-profiles,active profiles>>.
spring.profiles.include= # Unconditionally activate the specified comma separated profiles.
spring.profiles.active= # Comma-separated list
(or list if using YAML)
of <<howto-set-active-spring-profiles,active profiles>>.
spring.profiles.include= # Unconditionally activate the specified comma separated profiles
(or list of profiles if using YAML)
.
# SENDGRID ({sc-spring-boot-autoconfigure}/sendgrid/SendGridAutoConfiguration.{sc-ext}[SendGridAutoConfiguration])
spring.sendgrid.api-key= # SendGrid api key (alternative to username/password)
...
...
spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc
View file @
4a10cfe1
...
...
@@ -1173,7 +1173,9 @@ For example, when an application with following properties is run using the swit
my.property: fromyamlfile
---
spring.profiles: prod
spring.profiles.include: proddb,prodmq
spring.profiles.include:
- proddb
- prodmq
----
NOTE: Remember that the `spring.profiles` property can be defined in a YAML document
...
...
spring-boot/src/main/java/org/springframework/boot/context/config/ConfigFileApplicationListener.java
View file @
4a10cfe1
...
...
@@ -36,6 +36,8 @@ import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import
org.springframework.beans.factory.config.ConfigurableListableBeanFactory
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.bind.PropertiesConfigurationFactory
;
import
org.springframework.boot.bind.PropertySourcesPropertyValues
;
import
org.springframework.boot.bind.RelaxedDataBinder
;
import
org.springframework.boot.bind.RelaxedPropertyResolver
;
import
org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent
;
import
org.springframework.boot.context.event.ApplicationPreparedEvent
;
...
...
@@ -55,6 +57,7 @@ import org.springframework.core.env.ConfigurableEnvironment;
import
org.springframework.core.env.EnumerablePropertySource
;
import
org.springframework.core.env.MutablePropertySources
;
import
org.springframework.core.env.PropertySource
;
import
org.springframework.core.env.PropertySources
;
import
org.springframework.core.io.DefaultResourceLoader
;
import
org.springframework.core.io.Resource
;
import
org.springframework.core.io.ResourceLoader
;
...
...
@@ -390,8 +393,8 @@ public class ConfigFileApplicationListener implements EnvironmentPostProcessor,
}
// Any pre-existing active profiles set via property sources (e.g. System
// properties) take precedence over those added in config files.
Set
<
Profile
>
activeProfiles
=
getProfilesForValue
(
this
.
environment
.
getProperty
(
ACTIVE_PROFILES_PROPERTY
)
);
Set
<
Profile
>
activeProfiles
=
bindSpringProfiles
(
this
.
environment
.
getProperty
Sources
()).
getActiveProfiles
(
);
maybeActivateProfiles
(
activeProfiles
);
return
activeProfiles
;
}
...
...
@@ -506,12 +509,23 @@ public class ConfigFileApplicationListener implements EnvironmentPostProcessor,
}
private
void
handleProfileProperties
(
PropertySource
<?>
propertySource
)
{
Set
<
Profile
>
activeProfiles
=
getProfilesForValue
(
propertySource
.
getProperty
(
ACTIVE_PROFILES_PROPERTY
));
maybeActivateProfiles
(
activeProfiles
);
Set
<
Profile
>
includeProfiles
=
getProfilesForValue
(
propertySource
.
getProperty
(
INCLUDE_PROFILES_PROPERTY
));
addProfiles
(
includeProfiles
);
SpringProfiles
springProfiles
=
bindSpringProfiles
(
propertySource
);
maybeActivateProfiles
(
springProfiles
.
getActiveProfiles
());
addProfiles
(
springProfiles
.
getIncludeProfiles
());
}
private
SpringProfiles
bindSpringProfiles
(
PropertySource
<?>
propertySource
)
{
MutablePropertySources
propertySources
=
new
MutablePropertySources
();
propertySources
.
addFirst
(
propertySource
);
return
bindSpringProfiles
(
propertySources
);
}
private
SpringProfiles
bindSpringProfiles
(
PropertySources
propertySources
)
{
SpringProfiles
springProfiles
=
new
SpringProfiles
();
RelaxedDataBinder
dataBinder
=
new
RelaxedDataBinder
(
springProfiles
,
"spring.profiles"
);
dataBinder
.
bind
(
new
PropertySourcesPropertyValues
(
propertySources
));
return
springProfiles
;
}
private
void
maybeActivateProfiles
(
Set
<
Profile
>
profiles
)
{
...
...
@@ -540,16 +554,6 @@ public class ConfigFileApplicationListener implements EnvironmentPostProcessor,
}
}
private
Set
<
Profile
>
getProfilesForValue
(
Object
property
)
{
String
value
=
(
property
==
null
?
null
:
property
.
toString
());
Set
<
String
>
profileNames
=
asResolvedSet
(
value
,
null
);
Set
<
Profile
>
profiles
=
new
LinkedHashSet
<
Profile
>();
for
(
String
profileName
:
profileNames
)
{
profiles
.
add
(
new
Profile
(
profileName
));
}
return
profiles
;
}
private
void
addProfiles
(
Set
<
Profile
>
profiles
)
{
for
(
Profile
profile
:
profiles
)
{
this
.
profiles
.
add
(
profile
);
...
...
@@ -750,4 +754,48 @@ public class ConfigFileApplicationListener implements EnvironmentPostProcessor,
}
/**
* Holder for {@code spring.profiles} properties.
*/
static
final
class
SpringProfiles
{
private
List
<
String
>
active
=
new
ArrayList
<
String
>();
private
List
<
String
>
include
=
new
ArrayList
<
String
>();
public
List
<
String
>
getActive
()
{
return
this
.
active
;
}
public
void
setActive
(
List
<
String
>
active
)
{
this
.
active
=
active
;
}
public
List
<
String
>
getInclude
()
{
return
this
.
include
;
}
public
void
setInclude
(
List
<
String
>
include
)
{
this
.
include
=
include
;
}
Set
<
Profile
>
getActiveProfiles
()
{
return
asProfileSet
(
this
.
active
);
}
Set
<
Profile
>
getIncludeProfiles
()
{
return
asProfileSet
(
this
.
include
);
}
private
Set
<
Profile
>
asProfileSet
(
List
<
String
>
profileNames
)
{
List
<
Profile
>
profiles
=
new
ArrayList
<
Profile
>();
for
(
String
profileName
:
profileNames
)
{
profiles
.
add
(
new
Profile
(
profileName
));
}
Collections
.
reverse
(
profiles
);
return
new
LinkedHashSet
<
Profile
>(
profiles
);
}
}
}
spring-boot/src/test/java/org/springframework/boot/context/config/ConfigFileApplicationListenerTests.java
View file @
4a10cfe1
...
...
@@ -536,6 +536,14 @@ public class ConfigFileApplicationListenerTests {
"healthcheck"
);
}
@Test
public
void
yamlSetsMultiProfilesWhenListProvided
()
throws
Exception
{
this
.
initializer
.
setSearchNames
(
"testsetmultiprofileslist"
);
this
.
initializer
.
postProcessEnvironment
(
this
.
environment
,
this
.
application
);
assertThat
(
this
.
environment
.
getActiveProfiles
()).
containsExactly
(
"dev"
,
"healthcheck"
);
}
@Test
public
void
yamlSetsMultiProfilesWithWhitespace
()
throws
Exception
{
this
.
initializer
.
setSearchNames
(
"testsetmultiprofileswhitespace"
);
...
...
spring-boot/src/test/resources/testsetmultiprofileslist.yml
0 → 100644
View file @
4a10cfe1
---
spring
:
profiles
:
active
:
-
dev
-
healthcheck
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment