当前位置: 首页 > news >正文

【SpringBoot】配置文件

文章目录

  • SpringBoot 配置文件
    • (一) 配置文件作用
      • SpringBoot配置文件
    • (二) 配置文件快速入手
    • (三) 配置文件的格式
    • (四) properties 配置文件说明
      • 1. properties 基本语法
      • 2. 读取配置文件
      • 3. properties 缺点分析
    • (五) yml 配置文件说明
      • 1. yml 基本语法
      • 2. yml 使用进阶
        • 1) yml配置不同数据类型及null
        • 2) yml配置读取
      • 3.yml配置对象
      • 4. 配置集合
      • 5. 配置Map
    • (六) yml优缺点

SpringBoot 配置文件

(一) 配置文件作用

配置文件主要是为了解决硬编码带来的问题,把可能会发生改变的信息,放在一个集中的地方,当我们启动某个程序时,应用程序从配置文件中读取数据,并加载运行.

硬编码是将数据直接嵌入到程序或其他可执行对象的源代码中,也就是我们常说的"代码写死".

比如手机字体大小
如果采用硬编码的方式,就直接在程序中指定字体大小,所有的用户使用的都是同一个字体大小
但是不同的用户有不同的偏好,我们可以把手机字体的大小放在配置文件中,当程序启动时,读取配置,以用户设置的字体大小来显示.

使用配置文件,可以使程序完成用户和应用程序的交互,或者应用程序与其他应用程序的交互

SpringBoot配置文件

SpringBoot支持并定义了配置文件的格式,也在另一个层面达到了规范其他框架集成到SpringBoot的目的.
很多项目或者框架的配置信息也放在配置文件中,比如:

  • 项目的启动端口
  • 数据库的连接信息(包含用户名和密码的设置)
  • 第三方系统的调用密钥等信息
  • 用于发现和定位问题的普通日志和异常日志等.

项目的启动端口
SpringBoot内置了Tomcat服务器,默认端口号是8080,但是用户电脑上8080端口号有可能就被其他应用程序占用了,所以SpringBoot需要支持让用户自定义端口号

数据库连接信息
为了更方便简单的访问数据库,出现了一些持久层框架,其实就是对JDBC进行了更深层次的封装.让用户通过简单几行代码就可完成数据库的访问.但是不同的应用程序访问的数据库不同,这些持久层框架就需要支持用户可以自定义配置数据库的连接信息.

(二) 配置文件快速入手

我们在前面讲了Tocmat默认端口号是8080,所以我们程序访问时的端口号也是8080

但是如果8080端口号已经被其他进程使用了呢?我们可以通过配置文件来修改服务的端口号

SpringBoot在创建项目时,就已经帮我们创建了配置文件

在这里插入图片描述

修改 application.properties 文件

server.port=9090

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

显示Tomcat启动端口号为9090

访问程序: http://127.0.0.1:9090/calc.html

在这里插入图片描述

(三) 配置文件的格式

Spring Boot配置文件有以下三种:

  • application.properties
  • application.yml
  • application.yaml

yml为yaml的简写,实际开发中出现频率最高. yaml和yml的使用方式一样,我们只讲yml文件的使用

当应用程序启动时,Spring Boot会自动从classpath路径找到并加载
application.propertiesapplication.yaml 或者 application.yml 文件.

也可以通过spring.config.name指定文件路径和名称,参考 链接

在这里插入图片描述

特殊说明

  1. 理论上讲 .properties.yml 可以并存在于一个项目中,当 .properties.yml 并存时,两个配置都会加载.如果配置文件内容有冲突,则以 .properties 为主,也就是 .properties 优先级更高.
  2. 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取一种统一的配置文件格式,这样可以更好的维护(降低故障率).

(四) properties 配置文件说明

properties 配置文件是最早期的配置文件格式,也是创建 SpringBoot 项目默认的配置文件

1. properties 基本语法

properties 是以键值的形式配置的,key 和 value 之间是以"="连接的,如:

1 # 配置项目端口号
2 server.port=8080
3 #配置数据库连接信息
4 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=false
5 spring.datasource.username=root
6 spring.datasource.password=root

PS: 小技巧: 配置文件中使用“#”来添加注释信息。

2. 读取配置文件

如果在项目中,想要主动的读取配置文件中的内容,可以使用 @Value 注解来实现。
@Value 注解使用 "${}" 的格式读取,如下代码所示:

properties配置如下:

1 mykey.key1 = bite

在这里插入图片描述

1 import org.springframework.beans.factory.annotation.Value;
2 import org.springframework.web.bind.annotation.RequestMapping;
3 import org.springframework.web.bind.annotation.RestController;
4 
5 @RestController
6 public class PropertiesController {
7     @Value("${mykey.key1}")
8     private String key1;
9 
10    @RequestMapping("/key")
11    public String key(){
12        return "读取到值:"+key1;
13    }
14 }

在这里插入图片描述

3. properties 缺点分析

properties 配置是以 key-value 的形式配置的,如下图所示:
在这里插入图片描述

从上述配置key看出,properties 配置文件中会有很多的冗余的信息,比如这些:

在这里插入图片描述

想要解决这个问题,就可以使用 yml 配置文件的格式化了.

(五) yml 配置文件说明

yml是 YAML 是缩写,它的全称 Yet Another Markup Language 翻译成中文就是“另一种标记语言.我们先来学习yml的语法

1. yml 基本语法

yml 是树形结构的配置文件,它的基础语法是"key: value".

key 和 value 之间使用英文冒号加空格的方式组成,空格不可省略

基础语法如下:

在这里插入图片描述

  • 使用 yml 连接数据库

yml 使用示例:

1 spring:
2   datasource:
3     url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8&useSSL=false
4     username: root
5     password: root
  • yml 和 properties 连接数据库的配置对比

在这里插入图片描述

2. yml 使用进阶

1) yml配置不同数据类型及null

在这里插入图片描述

2) yml配置读取

yml读取配置的方式和 properties相同,使用@Value 注解即可

  • yml配置
String:hello: chaoxinxin@RestController
public class ReadYml {@Value("${string.hello}")private String hello;@RequestMapping("/ymlKey")public String key(){return "读取到值:" + hello;}
}

在这里插入图片描述

  • 注意事项:value 值加单引号

字符串默认不用加上单引号或者双引号,如果加英文的单双引号可以表示特殊的含义
尝试在application.yml 中配置

string:str1: Hello \n Spring Boot.str2: 'Hello \n Spring Boot.'str3: "Hello \n Spring Boot."@RestController
public class ReadYml2 {@Value("${string.str1}")private String str1;@Value("${string.str2}")private String str2;@Value("${string.str3}")private String str3;@RequestMapping("/yml")public String readYml(){System.out.println(str1);System.out.println(str2);System.out.println(str3);return "yml";}
}

在这里插入图片描述
从上述结果可以看出:

  • 字符串默认不用加上单引号或者双引号。
  • 单引号会转义特殊字符使其失去特殊功能,始终是一个普通的字符串.
  • 双引号不会转义字符串里面的特殊字符,特殊字符会表示本身的含义.

3.yml配置对象

在这里插入图片描述
这个时候就不能用 @Value来读取配置中的对象了,此时要使用另一个注解@ConfigurationProperties来读取

  • 配置类
@ConfigurationProperties(prefix = "student")
@Component
@Data
public class Student {private int id;private String name;private int age;
}
  • 调用类
@RestController
public class StudentController {@Autowiredprivate Student student;@RequestMapping("/readStudent")public String readStudent(){return student.toString();}
}
  • 结果为
    在这里插入图片描述

4. 配置集合

配置文件 也可以配置list集合

dbtypes:name:- mysql- sqlserver- db2

集合的读取和对象一样,也是使用 @ConfigurationProperties 来读取,实现如下:

@Component
@ConfigurationProperties("dbtypes")
@Data
public class ListConfig {private List<String> name;
}

访问集合的实现如下:

@RestController
public class ReadYml3 {@Autowiredprivate ListConfig listConfig;@RequestMapping("/readList")public String readList(){return listConfig.toString();}
}

运行结果:

在这里插入图片描述

5. 配置Map

在这里插入图片描述
Map的读取和对象一样,也是使用 @ConfigurationProperties 来读取,实现如下:

  • 配置类
@Component
@ConfigurationProperties("maptypes")
@Data
public class MapConfig {private HashMap<String,String> map;
}
  • 打印类
@RestController
public class ReadYml4 {@Autowiredprivate MapConfig mapConfig;@RequestMapping("/readMap")public String readStudent(){return mapConfig.toString();}
}
  • 运行结果:
    在这里插入图片描述

(六) yml优缺点

优点

    1. 可读性高,写法简单,易于理解
    1. 支持更多的数据类型,可以简单表达对象,数组,List,Map等数据形态.
    1. 支持更多的编程语言,不止是Java中可以使用,在Golang, Python, Ruby, JavaScript中也可以使用

缺点

    1. 不适合写复杂的配置文件
      比如properties格式如下
1 keycloak.realm = demo
2 keycloak.resource = fm-cache-cloud
3 keycloak.credentials.secret = d4589683-0ce7-4982-bcd3
4 keycloak.security[0].authRoles[0]= user
5 keycloak.security[0].collections[0].name = ssologinurl
6 keycloak.security[0].collections[0].patterns[0] = /login/*
7

转换为yml

1 keycloak:
2   realm: demo
3   resource: fm-cache-cloud
4   credentials:
5     secret: d4589683-0ce7-4982-bcd3
6   security:
7     - authRoles:
8       - user
9       collections:
10        - name: ssologinurl
11          patterns:
12            - /login/*

转换的过程也比较花费精力,如果配置更复杂一点,可读性会更差,代码也会更难写

  • 2.对格式有较强的要求(一个空格可能会引起一场血案)
http://www.dtcms.com/a/561605.html

相关文章:

  • wordpress 文章链接关键词营销优化
  • AI工具导航网站收录了25款精选AI办公工具
  • 端口隔离技术的实验与验证(eNSP)
  • EF Core 中手动配置表名、主键、外键、索引、关系等映射
  • 做洁净的网站怎么利用源码做网站
  • 《高性能MySQL》第6讲:查询性能优化
  • 东台建设网站的公司天津建筑工程信息平台
  • “自然搞懂”深度学习(基于Pytorch架构)——010203
  • GitHub上Transformers项目中推理函数pipeline的使用
  • 笔记本电脑都挺好,但为啥总是卡顿?如何释放笔记本性能?
  • 邯郸有建网站的吗企业管理咨询是做什么的
  • 网站的页头页脚怎么做贵阳网站建设推广公司
  • 【Java Stream 和 Collection 的真正区别】
  • 数据开发到数据中台又到数据治理
  • 网站 网页区别是什么淘宝网站建设素材
  • ubuntu系统找不懂nvidia-smi,更新驱动更没有,找不到网卡,很难,但是解决了,睡一觉我的ubuntu系统坏了(推荐二)
  • 曲阜市古建设计院网站阜宁网页设计
  • 从零到一:打造现代化全栈个人博客系统
  • Windows 安装 WSL 并集成 Docker
  • LVS-DR模式配置
  • 零基础新手小白快速了解掌握服务集群与自动化运维(十六)集群部署模块——LVS-DRTUN模式配置
  • 济南网站建设网站最新域名解析网站
  • LVS-NAT、DR、TUN模式配置
  • Qt样式深度解析
  • 怎么用自己电脑做网站优化一个网站
  • 莱芜做网站优化溧阳建设集团有限公司网站
  • id创建网站徐州品牌网站建设
  • 创意设计app青岛网站seo技巧
  • 中英文网站建设 大概要多久张掖建设网站
  • python 异步编程 -- 理解concurrent.futures.Future 对象