Spring Boot 环境变量读取 和 属性对象的绑定
2016-08-31 11:00
781 查看
网上看到的一些方法,结合我看到的 和我们现在使用的。整理成此文;
第一种方法
参见catoop的博客之 Spring Boot 环境变量读取 和 属性对象的绑定(尊重原创)第二种方法
class不用继承任何东西,只需在类中添加属性@Inject private Environment env;
调用
OTHER_DIR = env.getProperty("converter.sourcedir");
converter.sourcedir是yml中的配置,如下
converter: sourcedir: /a/b/c/d
继续深究,Environment的源码:
/* * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.core.env; /** * Interface representing the environment in which the current application is running. * Models two key aspects of the application environment: <em>profiles</em> and * <em>properties</em>. Methods related to property access are exposed via the * {@link PropertyResolver} superinterface. * * <p>A <em>profile</em> is a named, logical group of bean definitions to be registered * with the container only if the given profile is <em>active</em>. Beans may be assigned * to a profile whether defined in XML or via annotations; see the spring-beans 3.1 schema * or the {@link org.springframework.context.annotation.Profile @Profile} annotation for * syntax details. The role of the {@code Environment} object with relation to profiles is * in determining which profiles (if any) are currently {@linkplain #getActiveProfiles * active}, and which profiles (if any) should be {@linkplain #getDefaultProfiles active * by default}. * * <p><em>Properties</em> play an important role in almost all applications, and may * originate from a variety of sources: properties files, JVM system properties, system * environment variables, JNDI, servlet context parameters, ad-hoc Properties objects, * Maps, and so on. The role of the environment object with relation to properties is to * provide the user with a convenient service interface for configuring property sources * and resolving properties from them. * * <p>Beans managed within an {@code ApplicationContext} may register to be {@link * org.springframework.context.EnvironmentAware EnvironmentAware} or {@code @Inject} the * {@code Environment} in order to query profile state or resolve properties directly. * * <p>In most cases, however, application-level beans should not need to interact with the * {@code Environment} directly but instead may have to have {@code ${...}} property * values replaced by a property placeholder configurer such as * {@link org.springframework.context.support.PropertySourcesPlaceholderConfigurer * PropertySourcesPlaceholderConfigurer}, which itself is {@code EnvironmentAware} and * as of Spring 3.1 is registered by default when using * {@code <context:property-placeholder/>}. * * <p>Configuration of the environment object must be done through the * {@code ConfigurableEnvironment} interface, returned from all * {@code AbstractApplicationContext} subclass {@code getEnvironment()} methods. See * {@link ConfigurableEnvironment} Javadoc for usage examples demonstrating manipulation * of property sources prior to application context {@code refresh()}. * * @author Chris Beams * @since 3.1 * @see PropertyResolver * @see EnvironmentCapable * @see ConfigurableEnvironment * @see AbstractEnvironment * @see StandardEnvironment * @see org.springframework.context.EnvironmentAware * @see org.springframework.context.ConfigurableApplicationContext#getEnvironment * @see org.springframework.context.ConfigurableApplicationContext#setEnvironment * @see org.springframework.context.support.AbstractApplicationContext#createEnvironment */ public interface Environment extends PropertyResolver { /** * Return the set of profiles explicitly made active for this environment. Profiles * are used for creating logical groupings of bean definitions to be registered * conditionally, for example based on deployment environment. Profiles can be * activated by setting {@linkplain AbstractEnvironment#ACTIVE_PROFILES_PROPERTY_NAME * "spring.profiles.active"} as a system property or by calling * {@link ConfigurableEnvironment#setActiveProfiles(String...)}. * <p>If no profiles have explicitly been specified as active, then any {@linkplain * #getDefaultProfiles() default profiles} will automatically be activated. * @see #getDefaultProfiles * @see ConfigurableEnvironment#setActiveProfiles * @see AbstractEnvironment#ACTIVE_PROFILES_PROPERTY_NAME */ String[] getActiveProfiles(); /** * Return the set of profiles to be active by default when no active profiles have * been set explicitly. * @see #getActiveProfiles * @see ConfigurableEnvironment#setDefaultProfiles * @see AbstractEnvironment#DEFAULT_PROFILES_PROPERTY_NAME */ String[] getDefaultProfiles(); /** * Return whether one or more of the given profiles is active or, in the case of no * explicit active profiles, whether one or more of the given profiles is included in * the set of default profiles. If a profile begins with '!' the logic is inverted, * i.e. the method will return true if the given profile is <em>not</em> active. * For example, <pre class="code">env.acceptsProfiles("p1", "!p2")</pre> will * return {@code true} if profile 'p1' is active or 'p2' is not active. * @throws IllegalArgumentException if called with zero arguments * or if any profile is {@code null}, empty or whitespace-only * @see #getActiveProfiles * @see #getDefaultProfiles */ boolean acceptsProfiles(String... profiles); }
鉴于注释太多,抽出其中核心代码:
package org.springframework.core.env; public interface Environment extends PropertyResolver { String[] getActiveProfiles(); String[] getDefaultProfiles(); boolean acceptsProfiles(String... profiles); }
可以看到Environment 又extends PropertyResolver
/* * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.core.env; /** * Interface for resolving properties against any underlying source. * * @author Chris Beams * @since 3.1 * @see Environment * @see PropertySourcesPropertyResolver */ public interface PropertyResolver { /** * Return whether the given property key is available for resolution, i.e., * the value for the given key is not {@code null}. */ boolean containsProperty(String key); /** * Return the property value associated with the given key, or {@code null} * if the key cannot be resolved. * @param key the property name to resolve * @see #getProperty(String, String) * @see #getProperty(String, Class) * @see #getRequiredProperty(String) */ String getProperty(String key); /** * Return the property value associated with the given key, or * {@code defaultValue} if the key cannot be resolved. * @param key the property name to resolve * @param defaultValue the default value to return if no value is found * @see #getRequiredProperty(String) * @see #getProperty(String, Class) */ String getProperty(String key, String defaultValue); /** * Return the property value associated with the given key, or {@code null} * if the key cannot be resolved. * @param key the property name to resolve * @param targetType the expected type of the property value * @see #getRequiredProperty(String, Class) */ <T> T getProperty(String key, Class<T> targetType); /** * Return the property value associated with the given key, or * {@code defaultValue} if the key cannot be resolved. * @param key the property name to resolve * @param targetType the expected type of the property value * @param defaultValue the default value to return if no value is found * @see #getRequiredProperty(String, Class) */ <T> T getProperty(String key, Class<T> targetType, T defaultValue); /** * Convert the property value associated with the given key to a {@code Class} * of type {@code T} or {@code null} if the key cannot be resolved. * @throws org.springframework.core.convert.ConversionException if class specified * by property value cannot be found or loaded or if targetType is not assignable * from class specified by property value * @see #getProperty(String, Class) */ <T> Class<T> getPropertyAsClass(String key, Class<T> targetType); /** * Return the property value associated with the given key (never {@code null}). * @throws IllegalStateException if the key cannot be resolved * @see #getRequiredProperty(String, Class) */ String getRequiredProperty(String key) throws IllegalStateException; /** * Return the property value associated with the given key, converted to the given * targetType (never {@code null}). * @throws IllegalStateException if the given key cannot be resolved */ <T> T getRequiredProperty(String key, Class<T> targetType) throws IllegalStateException; /** * Resolve ${...} placeholders in the given text, replacing them with corresponding * property values as resolved by {@link #getProperty}. Unresolvable placeholders with * no default value are ignored and passed through unchanged. * @param text the String to resolve * @return the resolved String (never {@code null}) * @throws IllegalArgumentException if given text is {@code null} * @see #resolveRequiredPlaceholders * @see org.springframework.util.SystemPropertyUtils#resolvePlaceholders(String) */ String resolvePlaceholders(String text); /** * Resolve ${...} placeholders in the given text, replacing them with corresponding * property values as resolved by {@link #getProperty}. Unresolvable placeholders with * no default value will cause an IllegalArgumentException to be thrown. * @return the resolved String (never {@code null}) * @throws IllegalArgumentException if given text is {@code null} * or if any placeholders are unresolvable * @see org.springframework.util.SystemPropertyUtils#resolvePlaceholders(String, boolean) */ String resolveRequiredPlaceholders(String text) throws IllegalArgumentException; }
第三种方法(最简单)
@Value("${a.b.c.d}") private String testValue;
a.b.c.d 是配置文件中的
就这样简单~~~
相关文章推荐
- Spring Boot 环境变量读取 和 属性对象的绑定 RelaxedPropertyResolver
- Spring Boot 环境变量读取 和 属性对象的绑定
- Spring Boot 环境变量读取 和 属性对象的绑定
- Spring Boot 环境变量读取 和 属性对象的绑定
- Spring Boot 环境变量读取 和 属性对象的绑定
- (24)Spring Boot环境变量读取和属性对象的绑定【从零开始学Spring Boot】
- Spring Boot 环境变量读取 和 属性对象的绑定
- 24. Spring Boot环境变量读取和属性对象的绑定【从零开始学Spring Boot】
- 十五、Spring Boot 环境变量读取 和 属性对象的绑定
- 24. Spring Boot环境变量读取和属性对象的绑定【从零开始学Spring Boot】
- Spring Boot 环境变量读取 和 属性对象的绑定
- (24)Spring Boot环境变量读取和属性对象的绑定【从零开始学Spring Boot】
- Spring Boot 环境变量读取 和 属性对象的绑定
- 24. Spring Boot环境变量读取和属性对象的绑定【从零开始学Spring Boot】
- Spring Boot 环境变量读取 和 属性对象的绑定
- Spring Boot 环境变量读取 和 属性对象的绑定
- SpringBoot19 之环境变量读取和属性对象的绑定
- spring boot environmentaware接口实现环境变量读取和属性对象的绑定
- Spring Boot 环境变量读取 和 属性对象的绑定
- Spring Boot 环境变量读取 和 属性对象的绑定