前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot 基础配置

Spring Boot 基础配置

作者头像
Demo_Null
发布2020-09-28 14:51:33
1.3K0
发布2020-09-28 14:51:33
举报
文章被收录于专栏:Java 学习Java 学习

1.1 概述

  SpringBoot 是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就需要添加配置文件。在 Spring Boot 中,配置文件有两种不同的格式,一个是 application.properties 另一个是 application.ymlapplication.yaml。虽然 properties 文件比较常见,但是相对于 properties 而言,yaml 更加简洁明了,而且使用的场景也更多,很多开源项目都是使用 yaml 进行配置。除了简洁,yaml 还有另外一个特点,就是 yaml 中的数据是有序的,properties 中的数据是无序的,在一些需要路径匹配的配置中,顺序就显得尤为重要,因此 Spring Boot 中我们一般采用 yaml。SpringBoot 默认会从 resources 目录下加载 application.properties 或 application.yml(application.yaml) 文件,所以 SpringBoot 项目中一般将配置文件放到 resources 中。

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

1.2 yml

1.2.1 简介

  YML 文件格式是 YAML(YAML Aint Markup Language) 编写的文件格式,YAML 是一种直观的能够被电脑识别的的数据数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持 YAML 库的不同的编程语言程序导入,比如: C/C++,Ruby,Python,Java,Perl,C#,PHP 等。YML 文件是以数据为核心的,比传统的 xml 方式更加简洁。YML 文件的扩展名可以使用 .yml 或者 .yaml。

1.2.2 yml 语法

☞ 约定

 ① 大小写敏感  ② k: v 表示键值对关系,冒号后面必须有一个空格  ③ 缩进时不允许使用 Tab 键,只允许使用空格  ④ 使用空格的缩进表示层级关系,空格数目不重要,只要是左对齐的一列数据,都是同一个层级的  ⑤ 松散表示,java 中对于驼峰命名法,可用原名或使用 - 代替驼峰,如 java 中的 userName 属性,在 yml 中使用 userName 或 user-name 都可正确映射

☞ 普通值

  字符串默认不用加上单引号或者双绰号;双引号:不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思;单引号:会转义特殊字符,特殊字符最终只是一个普通的字符串数据

代码语言:javascript
复制
name1: zhangsan
name2: 'zhangsan \n lisi'
name3: "zhangsan \n lisi"
age: 18
flag: true

☞ 日期

代码语言:javascript
复制
date: 2020/7/28

☞ 对象(属性和值)

代码语言:javascript
复制
people:
    name: zhangsan
    age: 20

☞ Map(键值对)

代码语言:javascript
复制
people: {name:zhangsan, age: 20}

☞ 数组、list、set

代码语言:javascript
复制
# 用 - 表示数组中的一个元素, - 和 value 之间存在空格
city:
  - beijing
  - tianjin
  - shanghai
  - chongqing
  
# 或者
city: [beijing, tianjin, shanghai, chongqing]

# 集合中的元素是对象形式
student:
  - name: zhangsan
    age: 18
    score: 100
  - name: lisi
    age: 28
    score: 88
  - name: wangwu
    age: 38
    score: 90

1.2.3 文档快

  对于测试环境,开发环境,生产环境可以使用不同的配置,如果只想写到一个文件中,yml 与是支持的,使用用 — 隔开,称之为文档块。过 yml 文件构建多文档块,区分不同环境配置,自由切换不同环境启动项目,一个配置文件搞定。

代码语言:javascript
复制
# 这里可以配置 MySQL 等环境
spring:
  profiles:
  	# 选择哪一个环境的配置
    active: dev


# 使用 --- 划分文档块
---
server:
  port: 8081
spring:
  profiles: test


---
server:
  port: 8082
spring:
  profiles: dev


---
server:
  port: 8083
spring:
  profiles: prod

1.3 配置文件加载顺序

  首先咱们先在 resources 中写一个 properties 文件和一个 yml 文件,然后分别再两个文件中写入不同名称的数据,最后写一个 controller 将两个文件中的数据读取返回。可以发现两个文件中的数据都读取到了,所以两个配置文件均生效,不会只读取一个配置文件。

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

  如果两个配置文件中出现同名的配置呢?修改一下配置文件,重新请求发现返回的是 properties 的配置。如果同一个目录下,有 application.yml 也有 application.properties,默认先读取 application.properties。如果同一个配置属性,在多个配置文件都配置了,默认使用第 1 个读取到的,后面读取的不覆盖前面读取到的。

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

1.4 配置文件的位置

  从官方文档中可以发现还有其他位置可以放配置文件,SpringBoot 配置文件默认可以放到以下目录中,可以自动读取到   ♞ 项目根目录下   ♞ 项目根目录中 config 目录下   ♞ 项目的 resources 目录下   ♞ 项目 resources 目录中 config 目录下 该列表按优先级排序(在列表较高位置定义的属性会覆盖在较低位置定义的属性),这些仅作为了解内容,在开发中配置文件一般都会在项目的 resources 目录下。

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

1.5 获取配置属性

1.5.1 使用注解 @Value 映射

  由于 Spring Boot 源自 Spring ,所以 Spring 中存在的属性注入,在 Spring Boot 中一样也存在。我们可以通过 @Value 注解将配置文件中的值映射到一个 Spring 管理的 Bean 的字段上。

代码语言:javascript
复制
person:
  name: jack
  age: 18
代码语言:javascript
复制
@RestController
public class QuickStartController {

    @Value("${person.name}")
    private String name;
    @Value("${person.age}")
    private Integer age;

    @GetMapping("/quick")
    public String quick(){
        return "springboot 访问成功! name=" + name + ", age=" + age;
    }
}

1.5.2 使用注解 @ConfigurationProperties 映射

  Spring Boot 引入了类型安全的属性注入,如果采用 Spring 中的配置方式,当配置的属性非常多的时候,工作量就很大了,而且容易出错。使用类型安全的属性注入,可以有效的解决这个问题。通过注解 @ConfigurationProperties(prefix=“配置文件中的 key 的前缀”) 可以将配置文件中的配置自动与实体进行映射。但是要注意使用 @ConfigurationProperties 方式可以进行配置文件与实体字段的自动映射,但需要字段必须提供 set 方法才可以,而使用 @Value 注解修饰的字段不需要提供 set 方法。

代码语言:javascript
复制
@RestController
@ConfigurationProperties(prefix = "person")
public class QuickStartController {

    private String name;
    private Integer age;

    @GetMapping("/quick")
    public String quick(){
        return "springboot 访问成功! name=" + name + ", age=" + age;
    }
    
	public void setName(String name) {
        this.name = name;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-07-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.1 概述
  • 1.2 yml
    • 1.2.1 简介
      • 1.2.2 yml 语法
        • 1.2.3 文档快
        • 1.3 配置文件加载顺序
        • 1.4 配置文件的位置
        • 1.5 获取配置属性
          • 1.5.1 使用注解 @Value 映射
            • 1.5.2 使用注解 @ConfigurationProperties 映射
            相关产品与服务
            云数据库 MySQL
            腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档