SpringBoot配置文件

一、SpringBoot配置文件

SpringBoot配置文件,对于SpringBoot的默认配置来讲,若是默认配置不适用实际运用的场景状况下,可使用配置文件覆盖默认配置,好比内嵌的Tomcat默认端口是8080,就可使用配置文件将默认配置覆盖。另外咱们在项目中,有可能封装一些通用SDK,也可使用配置文件来处理。
SpringBoot支持的配置能够查看官网文档:application-propertiesjava

SpringBoot提供了两种配置文件类型:propertiesyml(而yml也能够写成yaml)。默认配置文件名称为:application,放在resources目录下。这两种配置文件在同一级的优先级为:properties>yml>yamlspring

好比把默认端口改成8088,上面访问路径为http://localhost:8080/v1/index,按照以前的习惯,一般是主机后面会跟项目名,也能够经过配置文件配置。数组

使用yaml方式配置:app

server:
  servlet:
    context-path: /spring-boot
  port: 8088

注意:yaml的配置方式:号后面必须有空格。ide

简单介绍下yaml的基本语法:spring-boot

  • 大小写敏感
  • 数据值前面必须有空格(也就是:号后面),做为分隔符
  • 使用缩进表示层级关系
  • 缩进时不容许使用Tab键,只容许使用空格(由于各个系统Tab对应的空格数目可能不一样,致使层级混乱)
  • 缩进的空格数目不重要,只要相同层级的元素左对齐就行
  • #表示注释,从这个字符到行尾,都会被解析器忽略

yaml的数据格式:测试

  • 对象(map): 键值对的集合
person:
  name: lisi

# 行内写法
person: {name: lisi}
  • 数组:一组按次排列的值
names:
  - zhangsan
  - lisi

# 行内写法
names: [zhangsan,lisi]
  • 纯量:单个的、不可再分的值
msg1: `hello \n world` #单引号忽略转义字符
msg2: "hello \n world" #双引识别转义字符

yaml参数引用:
有时候在配置一个参数,想被多个地方引用,能够这样配置:插件

name: zhangsan
person:
  name: ${name} #引用上面定义的name的值

使用properties配置:命令行

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

注意:配置context-path必须是/开头日志

启动项目从日志输出:

Tomcat started on port(s): 8088 (http) with context path '/spring-boot'

这个时候咱们的访问路径就是:http://localhost:8088/spring-boot/v1/index

二、读取配置内容

在实际开发时,有时候须要作一些初始化的自定义配置,那么怎么在代码里面获取到配置文件的自定义配置,好比自定义配置name: zhangsan。读取配置内容有以下三种方式:

  • 使用注解@Value
@Value("${name:lisi}")
private String name;

@GetMapping(path = "")
public String index(){
    return String.format("Hello %s Spring Boot!",name);
}

访问结果:Hello zhangsan Spring Boot!,使用@Value注解就能够获取配置文件的自定义配置,:后面表示默认值,若是配置文件没有配置,则取默认值。

  • Environment
@Autowired
private Environment environment;

System.out.println(String.format("使用Environment获取配置name:%s",environment.getProperty("name")));

输出结果:使用Environment获取配置name:zhangsan

  • @ConfigurationProperties
    定义一个User
@Component
@ConfigurationProperties(prefix = "user")
@Data
public class User {
    private String name;
    private int age;
    private List<String> address;
    
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address=" + address +
                '}';
    }
}

必须使用@Component@ConfigurationProperties注解,@Data是使用了lombok插件。若是须要使用lombok,须要在IDEA安装Lombok插件,引入lombok依赖

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

配置文件以下配置:

user:
  name: zhangsan
  age: 12
  address:
   - sichuang
   - hunan

controller中使用

@Autowired
private User user;

System.out.println(user.toString());

输出结果:User{name='admin', age=12, address=[sichuan, hunan]}

三、使用Profile多环境切换

在实际开发场景中,咱们通常有开发、测试、生产环境,每一个环节的某些配置会不同,那么怎么来解决不一样环境配置的问题,下面详细介绍使用Profile多环境的切换。

profile多环境配置方式:

  • profile文件的方式,提供多个配置文件,每一个文件表明一种环境。
    • application-dev.properties/yml 开发环境
    • application-test.properties/yml 测试环境
    • application-prod.properties/yml 生产环境
  • yml多文档方式:
    • 在yml配置文件中使用---分割不一样配置

profile激活多环境方式:

  • 配置文件,在配置文件使用配置spring.profiles.active=dev
  • 虚拟机参数:在IDEAVM options指定:-Dspring.profiles.active=dev
  • 命令行参数:
    • 打包状况下:java -jar xxx.jar --spring.profiles.active=dev
    • 使用IDEA下的Program arguments指定:--spring.profiles.active=dev

多文件的方式这里就不作操做了,上面介绍已经说明了,按照标准的文件格式命名就行,根据实际状况选择是用properties仍是yml的方式。下面介绍下yml多文档的方式:

# 开发环境
---
spring:
  config:
    activate:
      on-profile: dev
server:
  port: 8081
# 测试环境
---
spring:
  config:
    activate:
      on-profile: test
server:
  port: 8082
# 生产环境
---
spring:
  config:
    activate:
      on-profile: prod
server:
  port: 8082
---
# 公用配置
server:
  servlet:
    context-path: /spring-boot

至于激活的方式,就参考上面的测试便可。

相关文章
相关标签/搜索