写在前面
上一篇文章,简单介绍了创建Spring Boot项目,这篇文章主要记录Spring Boot的简单配置、两种配置文件、通过注解获取配置文件里的值以及多环境的配置。
简单的配置
上一节创建好一个Spring Boot项目之后,会在src/main/resources
下创建一个配置文件application.properties
。下面在该配置文件内进行简单的配置。配置如下:
#配置地址,默认就是本地地址
server.address=127.0.0.1
#配置服务端口,默认为8080
server.port=8080
#配置上下文路径,默认是‘/’
server.context-path=/boot
.yml配置文件
在Spring Boot中,还有一种配置文件,被更多开发者所使用。是以.yml结尾的一种配置文件。
我们首先需要创建这个配置文件,在和application.properties
同一个目录下,我们新建一个application.yml
文件。在该文件下,配置与上一步一样效果的配置。
#需要注意的是,该类型配置文件,冒号与值之间务必要添加空格!!!
server:
address: 127.0.0.1
port: 8080
context-path: /boot
与上一步的区别显而易见,有层次感,结构清晰,所以,建议使用该类型的配置文件。PS:后面的所有配置都是使用.yml
配置,还有就是,不管你选择哪种,另一种配置文件就能删除了。
通过注解获取配置文件属性
代码中调用配置文件属性
在配置文件中,我们可以设置一些属性,供代码里面调用,比如,我们设置一个人的名字,我们可以在配置文件里这样配置:
server:
address: 127.0.0.1
port: 8080
context-path: /boot
name: HowieLi
age: 18
在代码里调用name
的值,需要使用到@Value
注解,代码如下:
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
了。
配置文件中调用配置文件中的属性
在配置文件中,可以通过${变量名}
来调用上面的属性,配置如下:
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提供了解决方案。现在我们将配置文件修改如下:
person:
name: HowieLi
age: 18
之后,创建一个Person类,为属性必须设置get
和set
方法,亲测,不设置,值会为0
或null
,或者直接NullPointerExcepotion
,为方便查看,重写一个toString
方法。Person类如下:
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
注解注入,调用数据:
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
,配置如下:
server:
address: 127.0.0.1
port: 8080
context-path: /boot
person:
name: Lihao
age: 20
再创建一个作为生产环境的配置文件:application-prod.yml
,配置如下:
server:
address: 127.0.0.1
port: 8080
context-path: /boot
person:
name: HowieLi
age: 18
此时,修改原配置文件application.yml
,配置如下:
spring:
profiles:
active: dev
此时重新启动应用,访问http://localhost:8080/boot/hello
,就会显示Person [name=Lihao, age=20]
,name
和age
的值是开发环境下,也就是application-dev.yml
配置文件中的值。反之,将dev
修改为prod
,重新启动应用访问就会显示Person [name=HowieLi, age=18]
。dev
和prod
主要取决于之前创建的两个配置文件。
补充一点,在使用java -jar
命令也可以指定不同的profile
启动,命令如下:
java -jar my-spring-boot.jar --spring.profiles.active=dev
不清楚该命令的可查看我的上一篇博客:Spring Boot学习笔记-STS创建第一个Spring Boot应用 (其它启动方式部分)