SpringBoot 新手入门(四)

本文详细解析SpringBoot中各种外部配置属性值的优先级,包括Devtools全局配置、测试用例配置、命令行参数、环境变量等17种配置方式,并通过实例演示随机值配置及命令行参数的使用。

SpringBoot外部配置属性值的方式有很多种,SpringBoot为这多种配置方式指定了优先级,在属性相同的情况下,优先级高的配置方式会覆盖优先级低的配置方式。当然,如果属性不相同,则这些配置方式中的属性值都会被加载。
 SpringBoot官方文档指明了这多种配置方式的优先级,按照从高到低排序如下:
(1)如果使用了Devtools,则优先级最高的是在home目录下指定的Devtools全局配置文件~/.spring-boot-devtools.properties(优先级最高)。
  (2)测试用例中,标注了 @TestPropertySource 配置项;
  (3)测试用例中,@SpringBootTest 注解中的 properties 属性值;
  (4)命令行参数;
  (5)内嵌在环境变量或者系统变量中的SPRING_APPLICATION_JSON中的属性值;
  (6)ServletConfig 初始化的参数;
  (7)ServletContext 初始化的参数;
  (8)java:comp/env 中的JNDI属性值;
  (9)Java的系统变量,通过System.getProperties()方法获取;
  (10)操作系统的环境变量;

11)RandomValuePropertySource配置的${random.*}属性值; 
  (12)不在项目打成可执行jar包中的application-{profile}.properties或者application-{profile}.yml文件; 
  (13)项目打成可执行jar包中的application-{profile}.properties或者application-{profile}.yml文件;; 
  (14)不在项目打成可执行jar包中的application.properties或者application.yml文件; 
  (15)项目打成可执行jar包中的application.properties或者application.yml文件; 
  (16)同时标注@Configuration@PropertySource的类中,标注了@PropertySource指定的属性值; 
  (17)在main方法中设置的SpringApplication.setDefaultProperties值(优先级最低)。

在下面的例子中,包含第(4)、(14)、(15)、(16)、(17)条中的属性设置方式,这5种方式也是开发过程中用得最多的方式。需要说明的是,MyConfiguration 类中,使用@Value(“${name}”)来获取外部配置的值。

@SpringBootApplication
@RestController
public class Application {

    public static void main(String[] args) {
        SpringApplication application = new SpringApplication(Application.class);

        Map<String,Object> proMap = new HashMap<String, Object>();
        proMap.put("name","(17)在main方法中设置的SpringApplication.setDefaultProperties值。");
        application.setDefaultProperties(proMap);

        application.run(args);
    }


    @Autowired
    private MyConfiguration myConfiguration;

    @RequestMapping("/getName")
    public String getName(){
        return myConfiguration.getName();
    }
}

@Configuration
@PropertySource(value= {"classpath:propertySource.properties"})
public class MyConfiguration {

    // @Value("${name}")来获取外部配置的值
    @Value("${name}")
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

代码结构如图
在这里插入图片描述
配置命令行参数,其中–spring.config.location=X:/application.properties表示加载本地磁盘X下的 application.properties 文件。
在这里插入图片描述
  执行main方法,在浏览器输入http://localhost:8080/getName 得到如下结果
  在这里插入图片描述
  对于随机值的配置,官方文档指明可以使用${random.*}(通常在application.properties或者application.yml文件中)来注入随机值。

(1)my.secret=${random.value}

(2)my.number=${random.int}

(3)my.bignumber=${random.long}

4)my.uuid=${random.uuid}

5)my.number.less.than.ten=${random.int(10)}

(6)my.number.in.range=${random.int[1024,65536]}
对于命令行参数,通过 java -jar app.jar –name=”SpringBoot” –server.port=9090 的方式来传递参数。参数用 –xxx=xxx 的形式传入。如果我们想禁用命令行参数,可以使用SpringApplication.setAddCommandLineProperties(false)的方法禁止命令行配置参数传入。

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值