SpringBoot项目配置文件

452 阅读4分钟

SpringBoot项目中配置文件是一个重要的组成部分,通过配置文件统一定义属性配置,并在程序中使用可以让程序更简洁直观。

1. SpringBoot配置项

1.1 官方提供配置项

SpringBoot官方文档:Spring Boot配置项

SpringBoot提供了丰富的配置项,实际项目开发中常用到的有:

  • Server,以server为前缀的如服务地址、端口号、jetty、netty、servlet、tomcat等
  • Core,包括logging配置、以spring为前缀的config、message、profile、quartz、task等
  • Cache,缓存相关配置,如spring.cache.jcache、spring.cache.redis相关
  • Mail,邮件相关配置项
  • Security,支持Spring Security相关配置项
  • Devtools,项目中使用Devtools工具时配置内容
  • Testing,单元测试用到的配置

1.2 自定义配置项

除了官方提供的配置项外,还可以根据项目的需要在配置文件中自定义配置项,并设置对应值,只要符合SpringBoot配置文件要求的内容,就可以根据相关注解和方法获取配置内容。

而官方提供的配置项多数已经在SpringBoot自动配置中使用,当项目中引入相关框架工具后,SpringBoot会根据自动配置内容加载默认的属性值。

2. SpringBoot项目配置文件

2.1 配置文件类型

官方支持并提供方法获取配置内容的文件类型有两种:

  1. application.properties
  2. application.yml

如果想要自定义项目配置文件的路径和名称,需要在项目启动时使用命令参数来指定程序运行时选择的配置文件: --spring.config.name=[path]/myproject.properties

实际开发中不建议对配置文件的命名和位置进行更改,这也是SpringBoot所约定的配置,文件名为application,存放位置为resources(classpath)。

2.2 properties配置文件

properties配置文件对应Properties类对象,基于Map集合,以键值对形式存放key和value,两者类型都是字符串,使用时根据指定字符串key获取value。

# 注释
server.servlet.context-path=/spring-boot
server.port=8088

2.3 yml配置文件

yml类型文件是SpringBoot使用的新的配置文件类型,在配置内容较多时使用更方便简洁,yml文件在配置内容书写上与properties文件略有不同。

使用yml文件定义配置时需要注意:

  • yml文件中是以对象的结构定义属性,使用空格缩进来控制属性的层级
  • 定义属性值时需要在属性:之后增加一个空格
  • yml文件中对于大小写是敏感的
  • 同样使用#来代表当前行作为文件注释
  • 定义数组时可以使用 [] 或者多行的 -
  • 使用 ${key} 引用已存在key对应的value
# 注释
server:
    port: 8087

# 定义数组类型的两种方式
names: [tom,lily]
codes:
    - band
    - tand

# 引用存在参数
newPort: ${server.port}

3. SpringBoot中读取配置

在配置文件中定义好配置项和对应值后,就可以在项目启动获取配置的内容,获取自定义属性值的方式是多样的。

3.1 @Value注解

使用@Value注解标注在字段上,就可以将指定key对应的value赋值给字段。

  • 使用${}指定配置项的key值
  • 可以在任意的java bean中使用该注解
@Value("${server.port}")
private String port;

3.2 @ConfigurationProperties注解

@ConfigurationProperties注解用来标注一个类,并将该类对的属性与配置文件中的一系列配置项关联,将配置值通过容器赋值到类属性中。

  • @ConfigurationProperties标注类,并用prefix指定类对应配置文件key的前缀信息
  • 类需要使用@Component等标注,交给容器管理完成自动注入
  • 类属性需要由getter/setter方法,否则无法注入成功
//使用时直接注入ServerConfig对象获取对象属性值即可
@Component
@ConfigurationProperties(prefix = "server")
@Data
public class ServerConfig {
    private String port;
}

3.3 Environment

Environment对象是SpringBoot启动后自动配置完成的项目环境信息,可以从Environment对象中获取在配置文件中配置的内容。

  • 要先注入容器中的Environment
  • 使用对象的getProperty()方法根据key获取value
@Autowired
private Environment environment;
//获取配置项内容
environment.getProperty("server.port")

3.4 Properties

Properties对象是SpringBoot配置文件对应的对象,在项目启动自动配置时自动注入所有的配置内容,可以定义Properties对象来读取指定的proiperties文件中的内容。

使用Properties读取配置文件

4. SpringBoot项目的多环境切换配置

项目开发的阶段包括开发、测试、生产上线等步骤,为了分离不同环境,往往需要针对各个环境定义专用的配置文件信息,并在主配置文件定义当前运行环境来读取指定配置信息。具体的方法有:

  • 设置读取指定配置文件:spring.profiles.active=dev
  • IDEA中使用命令参数启动项目时指定选择环境
    • IDEAVM options指定:-Dspring.profiles.active=dev
    • IDEAProgram arguments指定:--spring.profiles.active=dev
  • 项目打Jar包时使用命令指定
    • java -jar xxx.jar --spring.profiles.active=dev