zoukankan      html  css  js  c++  java
  • Sping Boot入门到实战之入门篇(三):Spring Boot属性配置

      该篇为Sping Boot入门到实战系列入门篇的第三篇。介绍Spring Boot的属性配置。
     
      传统的Spring Web应用自定义属性一般是通过添加一个demo.properties配置文件(文件名自定义),然后在xml配置中通过
    <util:properties id="demoProps" location="classpath:demo.properties" />
    

    引入属性文件。再定义一个Bean来读取这些属性,Bean配置:

    <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="staticMethod" value="包名.DemoUtil.init" />
        <property name="arguments">
            <list>
                <ref bean="demoProps" />
            </list>
        </property>
    </bean>
    

    Bean定义:

    public class DemoUtil {
         private static Properties properties;
         static void init(Properties props) {
              properties = props;
         }
         public static String getValue(String key){
              return properties.getProperty(key);
         }
    }
    

    在其它地方通过DemoUtil.getValue()方法来访问具体某个属性的值。

     
      Spring Boot中,可以在多个地方配置属性,包括properties文件,yaml文件,环境变量, 系统属性,命令行参数等, 这些属性都会被Spring Boot加到Environment中,可通过@Value注解,Environment 实例,或 @ConfigurationProperties注解的类来访问。
     
     
      属性加载优先级顺序:
    1. 如果有使用devtools,devtools 全局设置的属性(用户目录 ~/.spring-bootdevtools.properties)
    2. 测试类的注解@TestPropertySource
    3. 测试类属性注解 @SpringBootTest#properties
    4. 命令行参数
    5. SPRING_APPLICATION_JSON里的属性(环境变量或系统属性)
    6. ServletConfig初始化参数
    7. ServletContext初始化参数
    8. JNDI参数   java:comp/env
    9. Java系统属性  System.getProperties()
    10. 操作系统环境变量
    11. RandomValuePropertySource 配置的属性 random.*
    12. jar包外部的applictaion-{profile}.properties,applictaion-{profile}.yml配置文件
    13. jar包内部的applictaion-{profile}.properties,applictaion-{profile}.yml配置文件
    14. jar包外部的applictaion.properties,applictaion.yml配置文件
    15. jar包内部的applictaion.properties,applictaion.yml配置文件
    16. @Configuration类上的 @PropertySource注解指定的配置文件
    17. 默认属性: SpringApplication.setDefaultProperties
     上述属性配置,除了红色标注的外,其它一般应用较少。序号低的配置优先级高于序号高的配置,即如果存在相同属性配置 ,则序号低的配置会覆盖序号高的配置。
     
      配置属性
      1. 命令行参数
      启动Spring Boot应用时,可以指定命令行参数,如:
    java -jar springboot-demo-properties.jar --my.name=command_line_devlink
    

      该参数值将会覆盖应用其它地方的同名属性配置值。命令行参数放在xx.jar 的后面。

      可以通过SpringApplication.setAddCommandLineProperties(false)  禁用命令行参数配置
     
      2. Java系统属性
      同样在启动Spring Boot应用时,可以指定Java系统属性,如:
    java -Dmy.name=system_properties_devlink -jar springboot-demo-properties.jar
    

      Java系统属性放在java命令之后。

     
      3. 操作系统环境变量
      配置过JAVA_HOME的应该理解何为环境变量。某些操作系统可能不支持.分隔的属性名,可以改为以下划线连接。Spring Boot将myName, my.name, MY_NAME视为等效。
     
      4. 应用属性配置文件(.properties文件或 .yml文件)
      .properties文件属性配置格式:
    my.name=devlink
    my.list[0]=aaa  //配置列表
    my.list[1]=bbb
    

      .yml文件属性配置格式:

    my:
      name: devlink
      list:   //配置列表
         - aaa
         - bbb
    

    yml中,属性名与值之间冒号后面必须有空格。

      应用属性配置文件位置:
    1. jar包所在当前目录下的子目录/config 
    2. jar包所在当前目录
    3. classpath根目录下的子目录/config
    4. classpath根目录
    序号低的优先级高于序号高的优先级,即jar包外的配置优先级高于jar包内的配置。同一目录下,.properties文件的优先级高于.yml文件。application-{profile}.properties的优先级高于application.properties。
     
      访问属性
      1. 类中属性上添加 @Value("${xx}") 注解方式。如:
    @Value("${my.name}")
    private String myName;
    

    可以指定默认值,如 @Value("${my.gender:f}"), 当my.gender未配置时,默认使用值"f"

     
      2. 通过@ConfigurationProperties注解的类来访问。如定义:
    @Configuration
    @ConfigurationProperties(prefix = "my")
    public class MyConfig {
        private String name;
        getter/setter;
    }
    

      然后在需要访问的Bean中,通过@Autowired 注入MyConfig实例,通过getName()方法即可访问my.name属性值。

     
      3. 通过Environment 实例访问。如:
    @Autowired
    private Environment env;
    

      然后调用env.getProperty("my.name")访问。

     
     
  • 相关阅读:
    centos7之添加开机启动服务/脚本
    高性能 Windows C++ 通用组件 VCLogger v2.0.3 正式发布
    Kerberos认证流程
    使用Spring.Net+NHibernate构建WCF应用
    国家重点基础研究发展计划和重大科学研究计划方向
    项目实现思路(不断更新)
    LINQ新特性简介及入门教程
    XXX公司CRM项目开发日志
    GridView的增删改查和分页
    团队开发之环境搭建
  • 原文地址:https://www.cnblogs.com/spec-dog/p/8489517.html
Copyright © 2011-2022 走看看