springboot(二):配置文件详解

配置文件讲解

上节课我们讲了怎么样去搭建一个入门的springboot程序,这节课我们就深入的了解一下springboot的配置文件。
springboot的配置文件分为两种:

  1. application.properties
  2. application.yml
properties
这个文件就跟我们在spring项目中一样,value(值)对应的key(键)要全部写全。

就像下面图所描述的那样,我们定义了项目启动的端口号、上下文路径。
在这里插入图片描述
通过输入:http://localhost:8088/test/hello 就能访问到我们的控制层,得到返回结果。

配置文件使得我们更加方便的对代码进行维护,比如说:不使用配置文件,当你的端口发生变化,或者某个常量值发生变化,就要涉及到代码的修改。代码量大时,会降低开发效率;相反,使用配置文件,只需要在配置文件中进行修改即可。

yml

YAML是“YAML不是一种标记语言”的外语缩写 ;但为了强调这种语言以数据做为中心,而不是以置标语言为重点,而用返璞词重新命名。它是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言。

它是类似于标准通用标记语言的子集XML的数据描述语言,语法比XML简单很多。

以上是百度百科对这个文件的解释。那么为什么我们要使用这个文件呢?它的好处在哪里呢?下面待我一一道出。

适用场景
  1. 脚本语言:由于实现简单,解析成本很低,YAML特别适合在脚本语言中使用。
    Ruby,Java,Perl,Python,PHP,OCaml,JavaScript,Go 除了Java 和 Go,其他都是脚本语言。
  2. 序列化:YAML比较适合做序列化。因为它是宿主语言数据类型直转的。
  3. 配置文件:YAML做配置文件也不错。写YAML要比写XML快得多,并且比ini文档功能更强。
优点
  1. 方便使用。
  2. 层级显示,减少配置文件的字数。
  3. 分类头使得yml文件更易读。
    在这里插入图片描述大家可以对比yml配置文件和properties的区别,为了方便大家理解,附上一张整合mybatis的yml配置文件。
    在这里插入图片描述整合mybatis的properties文件,我就不贴出来了,大家可以自行尝试…

如何在java中读取配置文件的value值

一、自定义属性

需求:我们需要一个女孩子的个人信息,包括年龄、姓名和…。

server:
  port: 8088
  servlet:
    context-path: /test

Girl:
  name: yoyo
  cupSize: A
  age: 18

然后使用@Value注解动态的获取值。

@RestController
public class TestController {

    @Value("${Girl.name}")
    private String name;
    @Value("${Girl.cupSize}")
    private String cupSize;
    @Value("${Girl.age}")
    private int age;

    @GetMapping("/hello")
    public String show(){
        return "hello world";
    }

    @GetMapping("/girl")
    public String getGirl(){
        return "name:"+name + " cupSize:"+ cupSize + " age:"+ age;
    }
}

然后访问 http://localhost:8088/test/girl 这个地址,我们就可以得到结果。
在这里插入图片描述

二、将属性注入实体类

需求:我们需要一个对象。初始化的时候就具有姓名、年龄和…

girl:
  name: yoyo
  cupSize: A
  age: ${random.int(1,30)}
  #应用程序启动时,随机生成年龄值

然后我们创建一个实体类:Girl

@Component
// 配置文件中的前缀
@ConfigurationProperties(prefix = "girl") 
public class Girl {

    private String name;
    private String cupSize;
    private int age;

    public String getName() {
        return name;
    }

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

    public String getCupSize() {
        return cupSize;
    }

    public void setCupSize(String cupSize) {
        this.cupSize = cupSize;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

最后是控制层:

@RestController
public class GirlController {

    @Autowired
    private Girl girl;

    @RequestMapping("/show")
    public String show(){
        return girl.getName() + girl.getCupSize() + girl.getAge();
    }
}

我们使用@Autowired来实现自动装配。
访问地址:http://localhost:8088/test/show
在这里插入图片描述
基本上,值的读取我们就讲完了,最后我们再讲一下关于springboot的多环境配置。

springboot的多环境配置

什么是多环境配置?


我们在开发项目的时候,往往会有好几个环境。比如开发、预发布(测试)、产品,每个环境使用的配置都不一样。
最典型的就是数据库,开发的数据库与产品的数据库肯定是不一样的,如果要多个环境的切换就得改配置,这样一来
非常麻烦。

但是springboot就加入了多环境的配置,接下来,我就以简单的切换访问端口,来配置多环境。
首先,创建开发环境的配置文件application-dev.yml

#开发环境
server:
  port: 8081

flag: 开发环境

然后,创建生产环境的配置文件application-pro.yml

#生产环境
server:
  port: 8082

flag: 生产环境

大家可以看到,端口不一样,为了更直观的区分,我在里面加了一个标记,当我们访问地址时,就会打印结果了。

那么怎么样,让springboot读取不一样的配置呢?
我们可以使用

spring.profiles.active来区分

下面是主配置文件

spring:
  profiles:
    active: pro


#忽略下面的配置
girl:
  age: ${random.int(1,30)}
  name: yoyo
  cupSize: A

生产环境和开发环境的名字分别是:application-pro.yml、application-dev.yml。前面都是以主配置文件为开头,格式为application-{profile}.yml。其中{profile}对应环境标识。
可以看到我现在的地址是pro,对应生产环境的标识。

下面贴上控制层的代码:

@RestController
public class TestController {

	@Value("${flag}")
    private String flag;
    
    @RequestMapping("/test")
    public String getFlag(){
        return "当前环境是:"+flag;
    }
}

地址栏输入: http://localhost:8082/test
在这里插入图片描述我们看到的端口是:8082,打印的flag为:生产环境。
接下来更换主配置文件中的后缀,变为:dev

访问地址:http://localhost:8081/test
在这里插入图片描述我们看到的端口是:8081,打印的flag为:开发环境。

到此,关于配置文件的讲解,就到这里了,如果文中出现什么错误,希望大家提出,一起进步。

不求与人相比,但求超越自己,要哭就哭出激动的泪水,要笑就笑出成长的性格!

猜你喜欢

转载自blog.csdn.net/qq_32101993/article/details/84628396