菜鸟学习SpringBoot——(二)配置文件

/*本人菜鸟一只,刚开始学习spring boot,按照导师给的学习计划整理的学习内容,希望能对和我一样是菜鸟,刚学习spring boot的童鞋有帮助。由于菜鸟一只,以下内容没有能力原创,里面的内容都是各种百度整理出来的(东拼西凑),所以作者数量太多,不方便注明,如有冒犯,我立马删帖。请各位大佬多多海涵!*/ 

1、配置文件的种类、作用及优先级

bootstrap和application

加载顺序:

  • bootstrap由spring父上下文加载,比application配置文件优先加载,而application配置文件由子上下文加载

  • bootstrap加载的配置信息不能被application的相同配置覆盖

配置区别:

  • bootstrap常见应用场景:

    (1) bootstrap配置文件中的配置一般是引导配置,类似于bios,用于连接到spring cloud配置中心,加载应用真正需要的配置数据,如:spring.application.name和spring.cloud.config.server.git.uri

    (2) 配置一些固定的不能被覆盖的属性

    (3) 配置加密解密外部配置信息的相关属性

  • application常见应用场景:spring boot项目的自动化配置

外部命令引导

Spring Boot程序默认从application.properties或者application.yaml读取配置,如何将配置信息外置,方便配置呢?

查询官网,可以得到下面的几种方案:

(1) 通过命令行指定

命令行环境变量配置

在执行java -jar启动应用程序时,可以通过添加SPRING_APPLICATION_JSON配置来进行自定义属性配置,该配置是一个JSON字符串的形式,使用方式如下所示:

SPRING_APPLICATION_JSON='{"name":"system_env"}' java -jar myproject.jar

命令行参数配置:

SpringApplication会默认将命令行选项参数转换为配置信息 (少量参数可以用这个)

命令行参数这种方式也比较常用,通过 -- 进行配置:

java -jar myproject.jar --server.port = 8080
java -jar myproject.jar --name = hengboy

或者使用--spring.application.json方式也可以配置:

java -jar myproject.jar --spring.application.json='{"name":"hengboy"}'

(2) 外置配置文件

Spring程序会按优先级从下面这些路径来加载application.properties配置文件:

  • 当前目录下的/config目录

  • 当前目录

  • classpath里的/config目录

  • classpath根目录

因此,要外置配置文件,则在jar所在目录新建config文件夹,然后放入配置文件,或者直接放在配置文件在jar目录

2、配置文件的形式

yml配置文件

YML文件格式是YAML(YAML Aint Markup Language)编写的文件格式,YAML是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅读,容易和脚本语言交互,可以被支持YAML库的编程语言程序导入,比如:c/c++,Python,java,c#,PHP等,YML文件是以数据为核心的,比传统的xml方式更加简洁。 YML文件的扩展名可以是.yml也可以是.yaml yml配置文件语法:

采用“key: value”的键值对形式进行设置,":"和"value"之间必须用空格隔开

server:
    port: 5678
person:
    name: "muzi"
    age: 20

注意: 冒号后面有至少一个空格

properties配置文件

Java中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件。properties文件在Java编程中用到的地方很多,操作很方便。

properties配置文件语法:

采用"键=值"的格式,可以用"#"来作注释

server.port=5678
person.name=muzi
person.age=20

3、如何读取配置文件属性配置

读取属性配置的示例:

application.properties

#服务端口号
server.port=9424
​
# redis配置
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=

demo.properties

demo.name=huang
demo.sex=1
demo.type=demo

(1) @Value

@Component
public class ReadByValue {
​
    @Value("${server.port}")
    private int serverPort;
​
    @Override
    public String toString() {
        return "ReadByValue{" +
                "serverPort=" + serverPort +
                '}';
    }
}

使用这种方式,如无其他需求,可不写setter、getter方法。

(2) @ConfigurationProperties

@Component
@ConfigurationProperties(prefix = "spring.redis")
public class ReadByConfigurationProperties {
​
    private int database;
​
    private String host;
​
    public void setDatabase(int database) {
        this.database = database;
    }
​
    public void setHost(String host) {
        this.host = host;
​
    public int getDatabase() {
        return database;
    }
​
    public int getPort() {
        return port;
    }
​
    @Override
    public String toString() {
        return "ReadByConfigurationProperties{" +
                "database=" + database +
                ", host='" + host + '\'' +
                '}';
    }
}

使用这种方式,必须要有成员变量的setter、getter方法。

(3) @PropertySource + @Value

@Component
@PropertySource(value = {"demo/props/demo.properties"})
public class ReadByPropertySourceAndValue {
​
    @Value("${demo.name}")
    private String name;
​
    @Value("${demo.sex}")
    private int sex;
​
    @Value("${demo.type}")
    private String type;
​
    @Override
    public String toString() {
        return "ReadByPropertySourceAndValue{" +
                "name='" + name + '\'' +
                ", sex=" + sex +
                ", type='" + type + '\'' +
                '}';
    }
}

注意:使用@PropertySource注解读取属性配置,该种方式不支持读取yml配置文件

(4) @ProperySource + @ConfigurationProperties

@Component
@PropertySource(value = {"demo/props/demo.properties"})
@ConfigurationProperties(prefix = "demo")
public class ReadByPropertySourceAndConfProperties {
​
    private String name;
​
    private int sex;
​
    private String type;
​
    public void setName(String name) {
        this.name = name;
    }
​
    public void setSex(int sex) {
        this.sex = sex;
    }
​
    public void setType(String type) {
        this.type = type;
    }
​
    public String getName() {
        return name;
    }
​
    public int getSex() {
        return sex;
    }
​
    public String getType() {
        return type;
    }
​
    @Override
    public String toString() {
        return "ReadByPropertySourceAndConfProperties{" +
                "name='" + name + '\'' +
                ", sex=" + sex +
                ", type='" + type + '\'' +
                '}';
    }
}

(5) 使用环境变量Environment读取属性配置

@Component
public class ReadByEnv {
​
    @Autowired
    private Environment environment;
​
    public String getServerPort() {
        return environment.getProperty("server.port");
    }
}

4、多环境化配置

不同环境的配置yml文件名不一样:

  • application-dev.yml(开发环境)

  • application-test.yml(测试环境)

  • application-uat.yml(预发布)

  • application-pro.yml(生产环境)

如果要切换不同环境,只需要修改主配置文件application.properties中的spring.profiles.active即可,例如:

application.yml

spring:
  profiles:
    active: dev
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值