美文网首页
spring properties属性

spring properties属性

作者: xzz4632 | 来源:发表于2019-06-20 20:00 被阅读0次
添加指定的properties配置文件
@PropertySource

@PropertySource可以将指定的properties文件添加到Environment中:

@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;
    }
}

在路径中还可以使用${}:

@PropertySource("classpath:/com/${my.placeholder:default/path}/app.properties"

以上假设my.placeholder已被注册, 它将会解析为相应的值, 如果没有则会使用default/path作为默认值, 如果二者都没有定义, 则会抛出IllegalArgumentExcetion异常.

在java8中, @PropertySource是可重复, 但是都必须在同一个级别声明.

XML方式
  • context:property-placeholder
<context:property-placeholder location="xxx.properties"/>
  • util:properties
<util:properties id="util_spring" location="xxx.properties"/>

// 使用
<property name="username" value="#{util_spring['jdbc.username']}" />
  • PropertyPlaceholderConfigurer
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
  <property name="locations"> 
   <list> 
    <value>classpath:redis-key.properties</value> 
   </list> 
  </property> 
  </bean> 

Enviroment

在spring中, Environment是对应用环境的抽象(即对Profileproperties的抽象).

  • Environment提供了对配置属性进行搜索的操作.
ApplicationContext ctx = new GenericApplicationContext();
Environment env = ctx.getEnvironment();
// PropertySource是对属性键值对的简单抽象, 下面的方法会在一个PropertySource集合中进行搜索
boolean containsFoo = env.containsProperty("foo");
StandardEnviroment

StandardEnviroment配置了两个PropertySource对象, 一是JVM系统属性(类似于System.getProperties()), 二是系统环境变量(类似于System.getenv()).

  • StandardEnvironment应用于独立应用程序, StandardServletEnvironment包含了servletservlet context参数.它还可选择性的开启JndiPropertySource.

  • 默认情况下, 系统属性会覆盖环境变量.即env.getProperty("foo")会返回系统属性.

  • 对于StandardServletEnvironment, 其优先级从高到低如下:

    • ServletConfig参数, 如DispatcherServlet上下文参数.
    • ServletContext参数.如web.xml中的context-param.
    • JNDI环境变量,如 java:comp/env/
    • JVM系统属性, 如 -D命令行参数
    • 系统环境变量,如操作系统环境变量
自定义PropertySource

扩展PropertySource.注册到容器中:

MutablePropertySources sources = env.getPropertySources();
sources.addFirst(new MyPropertySource());

addFirst方法其优先级最高.

相关文章

网友评论

      本文标题:spring properties属性

      本文链接:https://www.haomeiwen.com/subject/hlhdqctx.html