配置文件讲解
上节课我们讲了怎么样去搭建一个入门的springboot程序,这节课我们就深入的了解一下springboot的配置文件。
springboot的配置文件分为两种:
- application.properties
- application.yml
properties
这个文件就跟我们在spring项目中一样,value(值)对应的key(键)要全部写全。就像下面图所描述的那样,我们定义了项目启动的端口号、上下文路径。
通过输入:http://localhost:8088/test/hello 就能访问到我们的控制层,得到返回结果。
配置文件使得我们更加方便的对代码进行维护,比如说:不使用配置文件,当你的端口发生变化,或者某个常量值发生变化,就要涉及到代码的修改。代码量大时,会降低开发效率;相反,使用配置文件,只需要在配置文件中进行修改即可。
yml
YAML是“YAML不是一种标记语言”的外语缩写 ;但为了强调这种语言以数据做为中心,而不是以置标语言为重点,而用返璞词重新命名。它是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言。
它是类似于标准通用标记语言的子集XML的数据描述语言,语法比XML简单很多。
以上是百度百科对这个文件的解释。那么为什么我们要使用这个文件呢?它的好处在哪里呢?下面待我一一道出。
适用场景
- 脚本语言:由于实现简单,解析成本很低,YAML特别适合在脚本语言中使用。
Ruby,Java,Perl,Python,PHP,OCaml,JavaScript,Go 除了Java 和 Go,其他都是脚本语言。 - 序列化:YAML比较适合做序列化。因为它是宿主语言数据类型直转的。
- 配置文件:YAML做配置文件也不错。写YAML要比写XML快得多,并且比ini文档功能更强。
优点
- 方便使用。
- 层级显示,减少配置文件的字数。
- 分类头使得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为:开发环境。
到此,关于配置文件的讲解,就到这里了,如果文中出现什么错误,希望大家提出,一起进步。
不求与人相比,但求超越自己,要哭就哭出激动的泪水,要笑就笑出成长的性格!