Annotation Interface PropertySource
PropertySource to
Environment. To be used in
conjunction with @Configuration classes.
Example usage
Given a file app.properties containing the key/value pair
testbean.name=myTestBean, the following @Configuration class
uses @PropertySource to contribute app.properties to the
Environment's set of PropertySources.
@Configuration
@PropertySource("classpath:/com/myco/app.properties")
public class AppConfig {
@Autowired
Environment env;
@Bean
public TestBean testBean() {
TestBean testBean = new TestBean();
testBean.setName(env.getProperty("testbean.name"));
return testBean;
}
}
Notice that the Environment object is
@Autowired into the
configuration class and then used when populating the TestBean object. Given
the configuration above, a call to testBean.getName() will return "myTestBean".
Resolving ${...} placeholders in <bean> and @Value annotations
In order to resolve ${...} placeholders in <bean> definitions or @Value
annotations using properties from a PropertySource, one must register
a PropertySourcesPlaceholderConfigurer. This happens automatically when using
<context:property-placeholder> in XML, but must be explicitly registered using
a static @Component method when using @Configuration classes. See
the "Working with externalized values" section of @Configuration's javadoc and
"a note on BeanFactoryPostProcessor-returning @Component methods" of
Component's javadoc for details and examples.
Resolving ${...} placeholders within @PropertySource resource locations
Any ${...} placeholders present in a @PropertySource resource location will be resolved against the set of property sources already
registered against the environment. For example:
@Configuration
@PropertySource("classpath:/com/${my.placeholder:default/path}/app.properties")
public class AppConfig {
@Autowired
Environment env;
@Bean
public TestBean testBean() {
TestBean testBean = new TestBean();
testBean.setName(env.getProperty("testbean.name"));
return testBean;
}
}
Assuming that "my.placeholder" is present in one of the property sources already
registered, e.g. system properties or environment variables, the placeholder will
be resolved to the corresponding value. If not, then "default/path" will be used as a
default. Expressing a default value (delimited by colon ":") is optional. If no
default is specified and a property cannot be resolved, an
IllegalArgumentException will be thrown.
A note on property overriding with @PropertySource
In cases where a given property key exists in more than one.properties
file, the last @PropertySource annotation processed will 'win' and override.
For example, given two properties files a.properties and
b.properties, consider the following two configuration classes
that reference them with @PropertySource annotations:
@Configuration
@PropertySource("classpath:/com/myco/a.properties")
public class ConfigA { }
@Configuration
@PropertySource("classpath:/com/myco/b.properties")
public class ConfigB { }
The override ordering depends on the order in which these classes are registered
with the application context.
StandardApplicationContext ctx = new StandardApplicationContext(); ctx.register(ConfigA.class); ctx.register(ConfigB.class); ctx.refresh();In the scenario above, the properties in
b.properties will override any
duplicates that exist in a.properties, because ConfigB was registered
last.
In certain situations, it may not be possible or practical to tightly control
property source ordering when using @PropertySource annotations. For example,
if the @Configuration classes above were registered via component-scanning,
the ordering is difficult to predict. In such cases - and if overriding is important -
it is recommended that the user fall back to using the programmatic PropertySource API.
See ConfigurableEnvironment and
PropertySources javadocs for details.
NOTE: This annotation is repeatable according to Java 8 conventions.
However, all such @PropertySource annotations need to be declared at the same
level: either directly on the configuration class or as meta-annotations within the
same custom annotation. Mixing of direct annotations and meta-annotations is not
recommended since direct annotations will effectively override meta-annotations.
- 从以下版本开始:
- 4.0
- 作者:
- Chris Beams, Juergen Hoeller, Phillip Webb, TODAY 2021/10/28 17:24
- 另请参阅:
-
PropertySourcesConfigurationPropertySourceConfigurableEnvironment.getPropertySources()PropertySources
-
必需元素概要
所需元素 -
可选元素概要
可选元素修饰符和类型可选元素说明A specific character encoding for the given resources, e.g.Class<? extends cn.taketoday.core.io.PropertySourceFactory>Specify a customPropertySourceFactory, if any.booleanIndicate if failure to find the aproperty resourceshould be ignored.Indicate the name of this property source.
-
元素详细资料
-
value
String[] valueIndicate the resource location(s) of the properties file to be loaded.Both traditional and XML-based properties file formats are supported — for example,
"classpath:/com/myco/app.properties"or"file:/path/to/file.xml".Resource location wildcards (e.g. **/*.properties) are not permitted; each location must evaluate to exactly one
.propertiesresource.${...} placeholders will be resolved against any/all property sources already registered with the
Environment. See above for examples.Each location will be added to the enclosing
Environmentas its own property source, and in the order declared.
-
-
-
name
String nameIndicate the name of this property source. If omitted, a name will be generated based on the description of the underlying resource.- 另请参阅:
-
PropertySource.getName()Resource.toString()
- 默认值:
- ""
-
ignoreResourceNotFound
boolean ignoreResourceNotFoundIndicate if failure to find the aproperty resourceshould be ignored.trueis appropriate if the properties file is completely optional. Default isfalse.- 默认值:
- false
-
encoding
String encodingA specific character encoding for the given resources, e.g. "UTF-8".- 默认值:
- ""
-
factory
Class<? extends cn.taketoday.core.io.PropertySourceFactory> factorySpecify a customPropertySourceFactory, if any.By default, a default factory for standard resource files will be used.
- 另请参阅:
-
DefaultPropertySourceFactoryResourcePropertySource
- 默认值:
- cn.taketoday.core.io.PropertySourceFactory.class
-