SpringBoot 配置文件

61 篇文章 0 订阅
54 篇文章 0 订阅

在这里插入图片描述

1. 配置文件作用

整个项中所有重要的数据都是在配置件中配置的,如:

  1. 数据库的连接信息(包含户名和密码的设置);
  2. 项的启动端;
  3. 第三系统的调秘钥等信息;
  4. 于发现和定位问题的普通志和异常志等。

想象下如果没有配置信息,那么 Spring Boot 项就不能连接和操作数据库,甚是不能保存可以于排查问题的关键志,所以配置件的作是常重要的

2. 配置文件的分类

  1. 系统的配置文件,比如连接字符串,比如日志的相关设置,系统定义好的.
  2. 用户自定义的

3. 配置文件的格式

Spring Boot 配置件主要分为以下两种格式:

  1. .properties
  2. .yml

3.1 规则

  1. 一个项目可以存下两种配置文件(properies 和 yml),但是不建议一个项目中出现两种配置文件.
  2. 当一个项目的某个配置,出现在两种格式的配置文件中时,那么配置项会以 properies 为主(忽略 yml 中配置)

4. properties 配置文件说明

properties 配置件是最早期的配置件格式,也是创建 Spring Boot 项默认的配置件

4.1 properties 基本语法

properties 是以键值的形式配置的,key 和 value 之间是以“=”连接的,如:
在这里插入图片描述

注意:

  1. 配置文件注释用 "#"

  2. 如果出现中文乱码,全设置为utf8:
    在这里插入图片描述在这里插入图片描述

  3. 修改了还是中文乱码,需要将原来的 application.properties 删除掉,重新在创一个 application.properties . 因为之前的配置文件已经是不支持中文编码的文件格式化,设置编码在创建 application.properties 之后,所以,后设置的编码不会改变原来的旧的 application.properties 文件,所以需要先将原来的配置先删了在重新创建

4.2 读取单个配置文件

使用 @Value 注解来实现,@Value 注解使“${}”的格式读取,如下代码所示:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class UserController {

    @Value("${server.port}")
    private String port;

    @ResponseBody //返回一个非静态页面的数据
    @RequestMapping("/sayhi") //设置路由地址
    public String sayHi(){
        return "server.port:" + port;
    }
}

在这里插入图片描述在这里插入图片描述

5. yml 配置文件说明

ymlYAML 是缩写,它的全称 Yet Another Markup Language 翻译成中就是“另种标记语”。

5.1 yml 特点

  1. 写法简单,可读性高
  2. 支持更多的数据类型
  3. 跨语言使用: java/golang/高版本 python

5.2 yml 语法

yml 是树形结构的配置文件, 它的基础语法是 key: value, 冒号后面跟着一个空格不能省略

erver:
  port: 9090

  #连接数据库
  spring:
    datasource:
      url: jdbc:mysql://127.0.0.1:3306/java102?characterEncoding=utf8&useSSL=false
      name: root
      password: root

在这里插入图片描述

5.3 yml 使用进阶

5.3.1 yml 配置不同数据类型及 null

# 字符串
string.value: Hello

# 布尔值,true或false
boolean.value: true
boolean.value1: false


# 整数
int.value: 10
int.value1: 0b1010_0111_0100_1010_1110 # ?进制

# 浮点数
float.value: 3.1111
float.value1: 314159e-5 # 科学计数法

# Null,~ 代表null
null.value: ~

在这里插入图片描述

5.3.2 yml配置读取

yml 读取配置的式和 properties 相同,使 @Value 注解即可,实现代码如下:
在这里插入图片描述
yml 单,双引号的问题:
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

结论: yml 中如果使用了双引号就会按照(原)语义执行,如果不加单,双引号,或者加了单引号,那么默认会将字符串中的特殊字符进行转义,比如 => (转义)处理

5.3.3 配置对象读取

yml配置:

# 对象写法 1
student:
  id: 1
  name: 张三
  age: 18
  
# 对象写法 2
student2: { id: 2,name: 李四,age: 20 }

在这里插入图片描述

对象:

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Data //lombok 生成Getter Setter toString 方法
@ConfigurationProperties(prefix="student") //读取配置文件中的对象
@Component
public class Student {
    private int id;
    private String name;
    private int age;
}

在这里插入图片描述

测试:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class UserController {

    @Value("${server.port}")
    private String port;

    @Value("${mystring}")
    private String mystring;

    @Value("${mystring2}")
    private String mystring2;

    @Value("${mystring3}")
    private String mystring3;

    @Autowired
    private Student student;

    @ResponseBody //返回一个非静态页面的数据
    @RequestMapping("/sayhi") //设置路由地址
    public String sayHi(){
        System.out.println("mystring: "+mystring);
        System.out.println("mystring2: "+mystring2);
        System.out.println("mystring3: "+mystring3);
        System.out.println(student);
        return "server.port:" + port;
    }
}

在这里插入图片描述在这里插入图片描述在这里插入图片描述

5.3.4 配置集合

yml配置:

# 集合
dbtypes: { name: [ mysql,sqlserver,db2 ] }

读取配置集合:

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
@Data
@ConfigurationProperties("dbtypes") // 读取配置文件中集合
public class ReadList {
    private List<String> name;
}

测试:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;

@Controller
public class UserController {

    @Value("${server.port}")
    private String port;

    @Value("${mystring}")
    private String mystring;

    @Value("${mystring2}")
    private String mystring2;

    @Value("${mystring3}")
    private String mystring3;

    @Autowired
    private Student student2;

    @Resource
    private ReadList readList;

    @ResponseBody //返回一个非静态页面的数据
    @RequestMapping("/sayhi") //设置路由地址
    public String sayHi(){
        System.out.println("mystring: "+mystring);
        System.out.println("mystring2: "+mystring2);
        System.out.println("mystring3: "+mystring3);
        System.out.println(student2);
        return "readList: " + readList.getName();
    }
}

在这里插入图片描述

结果:
在这里插入图片描述

yml另一种写法:

dbtypes1:
  name:
    - mysql
    - sqlserver
    - db2

properties VS yml 总结

  1. properties 是以 key=value 的形式配置的键值类型的配置件, yml 使的是类似 json 格式的树形配置式进配置的,yml 层级之间使换缩进的式配置,key 和 value 之间使?“: ”英?冒号加空格的?式设置,并且空格不可省略
    在这里插入图片描述

  2. properties 为早期并且默认的配置件格式,但其配置存在定的冗余数据,使 yml 可以很好的解决数据冗余的问题。

  3. yml 通性更好,持更多语,如 Java、Go、Python 等,如果是云服务器开发,可以使份配置件作为 Java 和 Go 的共同配置件。

  4. yml 虽然可以和 properties 共存,但个项中建议使统的配置类型件

先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值