SpringBoot-配置文件

304 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

SpringBoot使用一个全局的配置文件核心配置文件,配置文件名在约定的情况下名字是固定的。

两种配置文件的格式

在SpringBoot框架中,resource文件夹里可以存放配置的文件有两种:properties和yml。

properties

扁平的K/V格式。

server.port=80
server.servlet.context-path=/springboot

yml

树形结构。建议使用这种,可读性更强。

server:
  port: 80
  servlet:
    context-path: /springboot

默认.yml的优先级高于.properties。两种文件可以使用配置文件在线转换网站进行相互转换。

基本语法

k:(空格)v:表示一对键值对(空格必须有)以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的属性和值也是大小写敏感;如果有特殊字符% & 记得用单引号(‘)包起来。

外部约定文件加载顺序

springboot 启动还会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件。

  • classpath根目录下

  • classpath根config/

  • 项目根目录

  • 项目根目录/config

  • 直接子目录/config

    java ‐jar configuration_file‐0.0.1‐SNAPSHOT.jar ‐‐spring.config.location=/路径
    

profile文件的加载

我们在开发应用时,通常一个项目会被部署到不同的环境中,比如:开发、测试、生产等。其中每个环境的数据库地址、服务器端口等等配置都会不同,对于多环境的配置,大部分构建工具或是框架解决的基本思路是一致的,通过配置多份不同环境的配置文件,再通过打包命令指定需要打包的内容之后进行区分打包。

yml支持多模块文档块

server:
  port: 8081
  servlet:
    context-path: /springboot
spring:
  profiles:
    active: dev

---
开发环境配置
server:
  port: 8082
  servlet:
    context-path: /springboot-dev
---
生产环境配置
server:
  port: 8083
  servlet:
    context-path: /springboot-prod

多yml/properties文件环境切换

application-dev.yml

server:
  port: 8082
  servlet:
    context-path: /springboot-dev

application-prod.yml

server:
  port: 8083
  servlet:
    context-path: /springboot-prod

激活指定环境配置的3种方法如下:

  1. 直接在application.yml的配置文件中使用 spring.profiles.active=dev|prod

  2. 设置虚拟机参数 -Dspring.profiles.active=dev|prod

  3. 命令行参数启动(打成Jar包时候) java -jar springboot-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod

自定义属性

application.properties提供自定义属性的支持,我们可以把一些常量配置在这里。

user.username=username
user.password=password

然后使用@Value注解获取即可使用,和以前使用方式还是一样。

@RestController
public class UserController {

    @Value("user.username")
    private String username;

    @Value("user.password")
    private String password;

    @RequestMapping("/user")
    public String userInfo() {
        return "姓名:" + username + " 密码:" + password;
    }
}

有的时候属性太多了,一个一个绑定属性太慢,我们可以将配置文件中配置的属性值映射到组件中。新建一个JavaBean使用@ConfigurationProperties("user")告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定。

@Component
@ConfigurationProperties(prefix = "user")
@Data
public class User {

    private String username;

    private String password;
}