Spring Boot之配置文件

本篇介绍Spring Boot的配置文件,在代码中获取配置文件的属性值以及如何配置多环境。本篇部分内容总结摘抄自《Spring Boot基础》,仅作笔记。

配置文件简介

Spring Boot支持Properties和YAML两种方式的配置文件,这两种功能类似,但Properties的优先级高于YAML。YAML的优势在于采用的是树结构,配置的属性和值一目了然。与Properties相比,YAML比较容易出现格式问题,因此我们需要注意以下几点:

  • Properties文件是以“.”表示层级,YAML是以树结构表示。例如Properties文件中的“spring.datasource.username=root”在YAML文件中表示为:
spring:
  datasource:
    username: root
  • 在属性名称后的“:”和属性值之间一定要有一个空格,例如上面的“username:”和“root”之间就有一个空格,否则格式就是错误的。
  • 树结构的层级之间要隔一行且错开两个空格,两个空格,不是四个。

本篇文章主要以YAML配置文件为例,Properties类似。

使用以及读取application.yml文件

首先在resources目录下创建名为“application.yml”的文件,随意添加一些内容例如:

server:
  port: 8080
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/school?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
  redis:
    database: 0
    host: 127.0.0.1
    port: 6379
    password: root
    jedis:
      pool:
        max-active: 8
        max-wait: -1
        max-idle: 8
        min-idle: 0
    timeout: 5000
mybatis:
  mapper-locations: classpath:dao/*.xml
  type-aliases-package: com.example.*.entity
  configuration:
    map-underscore-to-camel-case: true

读取配置文件中的属性值有两种方式:1.使用@Value直接注入。2.创建实体类并使用@ConfigurationProperties注解来装载配置文件信息。

第一种方式,使用@Value直接注入是将配置文件的值注入到属性中,在此类中便可以直接使用,例如在下面的测试类中注入后直接输出:

public class ConfigurationFileTest extends HellospringbootApplicationTests {

	@Value("${spring.datasource.username}")
	private String username;
	@Value("${spring.datasource.password}")
	private String password;
	@Value("${spring.datasource.url}")
	private String url;
	@Value("${spring.datasource.driver-class-name}")
	private String driver;

	@Test
	public void getConfigurationFileValueTest(){
        System.out.println("username="+username+",password="
				+password+",url="+url+",driver="+driver);
	}
}

输出结果如下:

username=root,password=root,url=jdbc:mysql://localhost:3306/school?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC,driver=com.mysql.cj.jdbc.Driver

第一种方式虽然简单但不适合复用,例如我在多个类中需要访问这几个属性就需要在每个类中都要注入每个属性。可以看出,第一种方式适合访问单个属性,而对于多个属性或者说一组属性的访问就需要第二种方式。

第二种方式,首先创建包含我们要获取的配置文件的属性值的实体类并使用@ConfigurationProperties注解修饰。@ConfigurationProperties注解的作用是将指定的配置文件中的属性隐式绑定到实体类的属性上,因此要求实体类属性名与配置文件中要访问的属性名称相同,对于配置文件中有“-”的的属性,只需要按照驼峰命名来命名属性即可自动绑定。创建的实体类如下:

@Component
@ConfigurationProperties(prefix = "spring.datasource")
public class DatasourceConfig {
	private String username;
	private String password;
	private String url;
	private String driverClassName;

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public String getDriverClassName() {
		return driverClassName;
	}

	public void setDriverClassName(String driverClassName) {
		this.driverClassName = driverClassName;
	}

}

测试方法如下:

public class ConfigurationFileTest extends HellospringbootApplicationTests {

	@Autowired
	private DatasourceConfig datasourceConfig;

	/**
	 * @ConfigurationProperties绑定属性到实体类
	 */
	@Test
    public void getConfigurationFileByEntityTest(){
        System.out.println("username="+datasourceConfig.getUsername()+",password="
                +datasourceConfig.getPassword()+",url="+datasourceConfig.getUrl()+
                ",driver-class-name="+datasourceConfig.getDriverClassName());
    }
}

输出结果如下:

username=root,password=root,url=jdbc:mysql://localhost:3306/school?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC,driver-class-name=com.mysql.cj.jdbc.Driver

使用application.yml配置多环境

在项目开发过程中,一般都需要我们配置多个环境,例如起码会有开发环境和生产环境。在多个环境中,配置文件的某些属性值很可能会有不同,这就需要我们来配置多个环境的配置参数。

首先我们需要在resources目录下创建三个YML文件,包含一个主配置文件和两个环境相关配置文件,如果需要配置三个环境就需要创建四个YML文件。主配置文件名称还是application.yml,其他环境相关配置文件可以在application后自定义名称例如application-dev.yml(测试环境)和application-prod.yml(生产环境)。

主配置文件的作用是通过参数来控制当前环境使用哪个配置文件,例如当前环境使用application-dev.yml文件,主配置文件的内容为:

spring:
  profiles:
    active: dev

如果要使用生产环境的配置文件只需要将active的值修改为prod即可。创建application-dev.yml和application-prod.yml文件,它们的区别是dev的接口是8080而prod的接口是8081。当active值为dev时启动项目,启动成功后控制台打印如下:

可以看到tomcat接口是8080。将主配置文件的active的值修改为prod,再次启动项目控制台打印如下:

我们可以在启动项目时手动设置主配置文件的active属性值而不是修改application.yml文件。例如现在我的application.yml的active的值为prod,tomcat接口是8081,但我要在测试环境中启动该项目即使用dev文件且tomcat接口是8080。首先在idea的命令行中将项目打成jar包,如下:

打包成功后jar包一般出现在当前项目目录的target目录中,进入target目录:

执行jar包并指定active的值,语句如下:

java -jar hellospringboot-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev

查看执行结果:

可以看到使用的是8080接口,对应的配置文件是application-dev.yml文件。

Properties文件和YAML文件互相转换

一般情况下,我们的配置文件的参数很多,需要我们将Properties文件转换为YAML文件或YAML文件转换为Properties文件是比较麻烦。

可以安装叫做“convert yaml and properties”的插件,在plugins中搜索可以搜到直接下载即可。如果搜索不到可以在idea官网搜索插件下载离线安装,插件地址:https://plugins.jetbrains.com/plugin/13804-convert-yaml-and-properties-file

打开之后如下:

红框中的Install to IDE下拉框会自动识别你打开的idea版本,例如我的idea版本是2020.1.2。点击下载后idea会弹出下面窗口:

点击“OK”下载插件。下载成功后就可以在"Plugins"的已安装插件中找到了。

安装成功后重启idea。右键点击要转换的YAML文件或Properties文件,如下:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值