Spring Boot学习笔记-项目属性的简单配置

写在前面

  上一篇文章,简单介绍了创建Spring Boot项目,这篇文章主要记录Spring Boot的简单配置、两种配置文件、通过注解获取配置文件里的值以及多环境的配置。


简单的配置

  上一节创建好一个Spring Boot项目之后,会在src/main/resources下创建一个配置文件application.properties。下面在该配置文件内进行简单的配置。配置如下:

1
2
3
4
5
6
#配置地址,默认就是本地地址
server.address=127.0.0.1
#配置服务端口,默认为8080
server.port=8080
#配置上下文路径,默认是‘/’
server.context-path=/boot


.yml配置文件

  在Spring Boot中,还有一种配置文件,被更多开发者所使用。是以.yml结尾的一种配置文件。
  我们首先需要创建这个配置文件,在和application.properties同一个目录下,我们新建一个application.yml文件。在该文件下,配置与上一步一样效果的配置。

1
2
3
4
5
#需要注意的是,该类型配置文件,冒号与值之间务必要添加空格!!!
server:
address: 127.0.0.1
port: 8080
context-path: /boot

  与上一步的区别显而易见,有层次感,结构清晰,所以,建议使用该类型的配置文件。PS:后面的所有配置都是使用.yml配置,还有就是,不管你选择哪种,另一种配置文件就能删除了。


通过注解获取配置文件属性

代码中调用配置文件属性

  在配置文件中,我们可以设置一些属性,供代码里面调用,比如,我们设置一个人的名字,我们可以在配置文件里这样配置:

1
2
3
4
5
6
server:
address: 127.0.0.1
port: 8080
context-path: /boot
name: HowieLi
age: 18

  在代码里调用name的值,需要使用到@Value注解,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package cn.howieli;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

RestController
public class HelloController {

@Value("${name}") //通过${变量名}调用
private String name;

@Value("${age}")
private int age;

@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello() {
return name + age;
}
}

  此时启动项目,访问http://localhost:8080/boot/hello,就会显示HowieLi18了。

配置文件中调用配置文件中的属性

  在配置文件中,可以通过${变量名}来调用上面的属性,配置如下:

1
2
3
4
5
6
7
server:
address: 127.0.0.1
port: 8080
context-path: /boot
name: HowieLi
age: 18
content: "name: ${name}, age: ${age}"

  代码中直接调用content就可以了,访问启动的应用显示name: HowieLi, age: 18

配置文件中配置JavaBean

  生活中一个人的属性有很多,不光有姓名、年龄,可能还要有身高、住址等等属性,如果我们在配置文件中全部配置出来,在代码中一个一个通过注解调用会不会感觉很傻?不过,幸好Spring Boot提供了解决方案。现在我们将配置文件修改如下:

1
2
3
person:
name: HowieLi
age: 18

之后,创建一个Person类,为属性必须设置getset方法,亲测,不设置,值会为0null,或者直接NullPointerExcepotion,为方便查看,重写一个toString方法。Person类如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package cn.howieli;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component //将Person类交由Spring容器管理
@ConfigurationProperties(prefix = "person") //填写配置文件中的前缀
public class Person {
private String name;
private int age;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}

  使用@Autowired注解注入,调用数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package cn.howieli;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

@Autowired
private Person person;

@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello() {
return person.toString();
}
}

  重新启动项目,访问显示Person [name=HowieLi, age=18]


多环境配置

  在实际开发中,可能会针对不同的环境进行开发,我们作为开发人员,总不能每次部署项目都一个一个的去更改配置吧?我们需要把有限的时间放到更有意义的事上。
  接下来,我们在配置文件所在目录下新键一个作为开发环境的配置文件:application-dev.yml,配置如下:

1
2
3
4
5
6
7
server:
address: 127.0.0.1
port: 8080
context-path: /boot
person:
name: Lihao
age: 20

再创建一个作为生产环境的配置文件:application-prod.yml,配置如下:

1
2
3
4
5
6
7
server:
address: 127.0.0.1
port: 8080
context-path: /boot
person:
name: HowieLi
age: 18

此时,修改原配置文件application.yml,配置如下:

1
2
3
4
spring: 
profiles:
active:
- dev

  此时重新启动应用,访问http://localhost:8080/boot/hello,就会显示Person [name=Lihao, age=20]nameage的值是开发环境下,也就是application-dev.yml配置文件中的值。反之,将dev修改为prod,重新启动应用访问就会显示Person [name=HowieLi, age=18]devprod主要取决于之前创建的两个配置文件。
  补充一点,在使用java -jar命令也可以指定不同的profile启动,命令如下:

1
java -jar my-spring-boot.jar --spring.profiles.active=dev

  不清楚该命令的可查看我的上一篇博客:Spring Boot学习笔记-STS创建第一个Spring Boot应用 (其它启动方式部分)


小结

  以上就是我自己的学习笔记,如有补充或有错,请一定要指正,一起进步。个人博客:https://www.howieli.cn 和个人CSDN博客: http://blog.csdn.net/howieli_1995

Author: HowieLi
Link: https://www.howieli.cn/posts/spring-boot-yml-config.html
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.