《JavaEE进阶》----13.<Spring Boot【配置文件】>

news2024/11/13 9:42:10

本篇博客讲解

1.SpringBoot配置文件的格式以及对应的语法

2.了解两个配置文件格式的差异、优缺点。

我们这里只做简单的介绍。看会,了解,学会读取就行了。

因为配置文件实在太多了,这里只做基础的介绍。

一、配置文件的作用

前言

计算机中有许许多多的配置文件。许许多多的软件也离不开配置文件。

计算机上:如

C:\Users,C:\Windows文件夹,以及各种*.config, *.xml 文件。都是配置文件。

作用

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

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

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

配置文件应用示例:

比如手机字体大小

如果采用硬编码的方式直接指定字体大小。那么所有用户使用的都是同一个字体大小。

但是不同用户有不同的偏好。我们可以把手机字体的大小放在配置文件中,当程序启动时,读取配置,以用户设置的字体大小来显示。


二、Spring Boot配置文件

Spring Boot的三种配置文件

1.application.properties

2.application.yml

3.application.yaml

  • 2和3是一样的。yml是yaml的简写。因此实际上可以认为有两个。实际开发中yml出现频率最高。当应用程序启动时,SpringBoot会自动从classpath路径找到并加载配置文件。
  • .properties类型的配置文件较老老
  • .yml类型的配置文件是较新的
  • 同一个配置项在两个配置文件都存在。那么properties的优先。
  • 不同配置项在properties和yml中配置都会生效。

整体配置项取两个配置文件的并集。

SpringBoot配置文件的常用功能

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

在之前我们写的项目中就用到了端口号的定义和数据库的连接信息。

Spring Boot在创建项目时就已经帮我们创建了配置文件。

application.properties//文件

三、properties类型配置文件 

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

3.1基本语法

properties是以键值的形式配置的,key和value之间是以等号“=”连接的

例如:

配置项目端口号

#配置项目端口号
server.port=1208

配置数据库连接信息

#配置数据库连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/qyyDatabase?characterEncoding=utf8&
spring.datasource.username=root
spring.datasource.password=root

ps:配置文件中用 # 来添加注释信息

3.2读取配置文件

如果在项目中,想要主动的读取配置文件中的内容,可以使用

@Value来实现。@Value注解使用“${ }”的格式读取。

若只加了" "那么会读取" "中的作为内容来返回。

示例:

properties配置如下:

mykey.kuy1 = qyy

 编辑java代码来读取配置文件

@Value读取

@RestController
public class PropertiesController {
    @Value("${mykey.key1}")
    private String key1;

    @RequestMapping("/key")
    public String key(){
        return "读取到值:"+key1;
    }
}

运行结果: 

3.3properties缺点分析

properties配置⽂件中会有很多的冗余的信息,

如这些:

而yml类型的配置文件就没有这些。

四、yml类型配置文件

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

4.1yml基本语法

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

注:

:后面一定要有空格。空格不可省略。

示例:

使用tml配置端口号

server:
  port: 1208

使用yml连接数据库

spring:
  datasource:
  url: jdbc:mysql://127.0.0.0:3306/qyy_database?characterEncoding=utf8&useSSL=false
  username: root
  password: 12345678

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

# 字符串
string.value: Hello

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

# 整数
int.value: 10

# 浮点数
float.value: 3.14159

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

# "" 空字符串
# '' 空字符串
#, 直接后⾯什么都不加就可以了, 但这种⽅式不直观, 更多的表⽰是使⽤引号括起来
empty.value: ''

使用字符串如何表示null呢?

什么都不加就行了。或者加" " / ' '代表空字符串。  

4.3yml配置字符串读取

与properties类似。

yml配置如下:

@Value注解读取

string:
  hello: qyy
@RestController
public class PropertiesController {
    @Value("${string.hello}")
    private String key1;

    @RequestMapping("/key")
    public String key(){
        return "读取到值:"+key1;
    }
}

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

字符串默认不用加单引号或者双引号,如果加英文的单引号可以表示特殊的含义。

如在application.yml配置如下信息。

string:
  hello: qyy
  str1: Hello \n Spring Boot.
  str2: 'Hello \n Spring Boot.'
  str3: "Hello \n Spring Boot."

读取程序实现代码如下:

    @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";
    }

运行结果:

Hello \n Spring Boot.
Hello \n Spring Boot.
Hello 
 Spring Boot.

结果发现

  • 字符串默认不用加单引号或双引号
  • 单引号中,和不加引号中的转义字符不会生效
  • 双引号中的转义字符会生效

4.4yml配置对象

我们还可以在yml中配置对象

配置示例如下:有两种写法。

一种是换行分开写,还有一种是行内写法(他们写法作用一致)

student1:
  id: 1
  name: java
  age: 17

student2: {id: 1,name: java,age: 18}

如何读取配置中的对象呢?

此时要使用别的注解

@ConfigurationProperties+@Component注解读取

注意还要配合

用这个注解来读取对象。

@ConfigurationProperties(prefix = "student1")
@Component
@Data
public class StudentInfo {
    private int id;
    private String name;
    private int age;

}

打印对象

    /**
     * yml配置读取对象
     */
    @Autowired
    private StudentInfo student;

    @RequestMapping("/student")
    public String readStudent(){
        System.out.println(student.toString());
        return student.toString();
    }

 运行结果:

StudentInfo(id=1, name=java, age=17)

4.5yml配置集合

配置文件也可以配置list集合,如下所示:

#配置集合
dbtypes:
  name:
    - mysql
    - sqlserver
    - db2

- 后面的空格不可省略,虽然不会报错,但是含义变了。如果空格省略这几个元素会当做一个元素来处理。

集合的读取和对象一样,也是用这个注解

@ConfigurationProperties+@Component注解读取

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

运行结果:

4.6yml配置Map

配置文件也可以配置map,配置代码如下:

可以换行写,也可以使用行内写法

maptype1:
  map:
    k1: kk1
    k2: kk2
    k3: kk3
    
maptype2: {map: {k1: kk1,k2: kk2,k3: kk3}}

读取代码如下:

@Component
@ConfigurationProperties("maptype2")
@Data
public class MapConfig {
    private HashMap<String,String> map;
}

打印代码如下:

    @Autowired
    private MapConfig mapConfig;

    @RequestMapping("/readMap")
    public String readMap(){
        return mapConfig.toString();
    }

运行结果:

4.7yml的优缺点

优点:

1.可读性高,写法简单,易于理解

2.支持更多的数据类型,可以简单表达对象、数组、List、Map等数据类型

3.支持更多的编程语言,不止是java中可以使用,在Golang、python、Ruby、JavaScript中也可以使用

缺点:

1.不适合写复杂的配置文件

如:properties格式配置如下:

转换为yml

keycloak:
  realm: demo
  resource: fm-cache-cloud
  credentials:
    secret: d4589683-Oce7-4982-bcd3
  security:
    - authRoles:
        - user
      collections:
        - name: ssologinurl
          patterns:
            - /login/*

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

2. 对格式有较强的要求(⼀个空格可能会引起一场血案)

五、综合性练习

下篇预告:

验证码案例:我们会在下一篇博客中单独讲解验证码案例哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2118702.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

E5053A 微波下变频器

_XLT新利通_ E5053A 微波下变频器 E5052B SSA 专用的微波下变频器 Keysight E5053A 是一款与 E5052B 信号源分析仪&#xff08;SSA&#xff09;相关的微波下变频器。 如果您需要设计和测试微波或毫米波频率的信号源&#xff0c;E5053A 支持您扩展该分析仪的频率范围。 从…

阿卡迈 Akamai 逆向分析2

在Lzo这个url中点击第一个 进入以后有个HPH是我们需要破解的参数 我们搜索所有的HPH 大概有10个地方&#xff0c;我们需要全部打上断点(部分HPH用不到) 大约这5个地方的HPH需要破解 第一步 清除cookie f5进行刷新 需要破解K1H&#xff0c; 58位的数组其中下标 1 3 15 25 53需…

C# winforms 窗口延迟初始化 splash 定时器

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…

微课录制技巧|高效录制微课的方法,如何高效录制微课?

在教育领域&#xff0c;微课作为一种新兴的教学方式&#xff0c;越来越受到教师和学生的欢迎。本文将为您详细介绍如何高效录制微课&#xff0c;以及如何利用各种资源来提升备课和教学的质量。 微课录制技巧&#xff1a; 录制前的准备 在开始录制前&#xff0c;确保您已经明确…

客服知识库与员工培训:打造专业客服团队的秘密武器

在竞争激烈的商业环境中&#xff0c;优质的客户服务已成为企业脱颖而出的关键要素之一。而构建一个高效、专业的客服团队&#xff0c;则离不开一个全面、精准的客服知识库。客服知识库不仅是信息的宝库&#xff0c;更是员工培训与技能提升的秘密武器&#xff0c;它在新员工入职…

Adobe Illustrator非矢量图片的交集利用剪切蒙版实现

AI不支持对于非矢量图片的交集处理&#xff0c;但是可以通过剪切蒙版类似地实现需求。 如下图&#xff0c;字母F是一张PNG图片&#xff0c;为位图文件&#xff08;非矢量&#xff09;。 现在我需要将这种图片与黑色的矩形求交&#xff1a; 将两个目标全部选中&#xff0c;鼠标…

AI 浪潮中的一体化数据库|外滩大会之OceanBase实录

2024 年 9 月 5 日至 7 日&#xff0c;在上海黄浦世博园区&#xff0c;“2024 Inclusion 外滩大会”盛大举行。期间&#xff0c;9月6日&#xff0c;由OceanBase携手赛迪顾问共同策划并主办了 “AI浪潮中的分布式数据库&#xff1a;探索行业增长新动能与关键业务负载实践”。本…

优橙240419期就业榜来啦!就业班平均就业薪资8,333.3元!梦想不会发光,发光的是追梦的你!

有多坚定的信念&#xff0c;就有多勇毅的行动&#xff0c;就能开辟多光明的未来。时隔3个月&#xff0c;优橙240419就业喜报已送达&#xff01; 就业班平均就业薪资8,333.3元&#xff0c;就业学员即将奔赴祖国各地。 行百里者半九十。人类的美好理想&#xff0c;都不可能唾手而…

构建Web3社交平台:DeBox式DApp开发全攻略

要仿照DeBox构建一款Web3社交平台系统&#xff0c;首先需要理解DeBox的核心功能和技术架构&#xff0c;并根据自己的目标和用户需求进行调整和创新。以下是一个基本的开发步骤指南&#xff0c;帮助你从概念到实践&#xff0c;逐步构建一个类似的Web3社交平台。 1. 明确项目目标…

vue3 +百度地图 实现 地点检索,输入联想,经纬度,逆地理编码,创建标记,label等

由于百度地图文档确实有点欠缺&#xff0c;在这里记录一下 vue3 百度地图&#xff08;js api 3.0&#xff09;实现效果如下实现方式注意事项 vue3 百度地图&#xff08;js api 3.0&#xff09; 需求&#xff1a; 地图弹框组件&#xff0c;可以搜索地图点&#xff0c;输入联想…

算法-双指针技巧

文章目录 算法概述奇偶数字归位寻找重复数字接雨水救生艇问题 算法概述 设置两个指针的技巧&#xff0c;其实这种说法很宽泛&#xff0c;似乎没什么可总结的 有时候所谓的双指针技巧&#xff0c;就单纯是代码过程用双指针的形式表达出来而已。 没有单调性(贪心)方面的考虑有时…

基于Python的网络编程

现代的应用程序都离不开网络&#xff0c;网络编程是非常重要的技术。Python提供了两个不同层次的网络编程API&#xff1a;基于Socket的低层次网络编程和基于URL的高层次网络编程。Sockrt采用TCP、UDP等协议&#xff0c;这些协议属于低层次的通信协议&#xff1b;URL采用HTTP和H…

4G工业路由器:SR700的智能连接解决方案

在现代工业环境中&#xff0c;网络连接的稳定性和速度是确保生产效率和数据安全的关键。SR700 4G工业路由器凭借其卓越的性能和多样的功能&#xff0c;成为了工业自动化和物联网应用中的理想选择。本文将详细介绍SR700的产品特点&#xff0c;并结合一个真实的项目案例&#xff…

网络传输的基本流程

目录 0.前言 1.TCP/IP四层协议模型的认识 2.数据传输的大致流程 3.局域网通信的原理 4.同一网段下两台主机之间的通信 5.不同网段下两台主机之间的通信 0.前言 不知道你有没有这样的疑问&#xff0c;为什么不同的设备之间能够进行数据的发送和接收&#xff1f;不同的通信…

小米嵌入式面试题目RTOS面试题目 嵌入式面试题目

第一章-非RTOS bootloader工作流程 MCU启动流程 通信协议&#xff0c;SPI IIC MCU怎么选型&#xff0c;STM32F1和F4有什么区别 外部RAM和内部RAM区别&#xff0c;怎么分配 外部总线和内部总线区别 MCU上的固件&#xff0c;数据是怎么分配的 MCU启动流程 IAP是怎么升级的…

​​MEPA(Maximum Efficiency Per Ampere)控制

一.控制目的 与MTPA控制相比&#xff0c;没有忽略电机的铁耗&#xff0c;以电能损耗最小为目的优化电流。 分析思路与MTPA控制类似&#xff0c;在此省略。 二. 推导过程

【前端】读取csv文件,将数据转换为对象。spilce与slice的区别

一. 解决思路 解决思路&#xff1a;将csv文件的第一行作为key&#xff0c;后续的每一行作为value存入对象数组。 二. 代码写法 2 .1 JS写法 2.1.1 数组.map(function(item, index,arr){}) Item: 这个表示的是每一项对应的索引。 index: 这个表示的是每一项对应的索引。 a…

LTE PSS主同步信号PSS搜索阶段频偏估计

频偏的影响: 本期要讲到PSS搜索阶段,整数倍频偏和小数倍频偏的估计方法,整数倍频偏指的是子载波间隔的整数倍比如15k、30k等,小数倍频偏指的是一个子载波间隔以内的。在OFDM通信系统中,频偏是一个比较敏感的词,正常如果频偏估不准会带来一系列的问题,比如OFDM信号的正交…

高校大模型实验室大模型应用平台

大模型应用平台是一款专为高校大模型应用场景教学和科研打造的知识库问答系统。该平台易于使用&#xff0c;知识库支持常见的txt、doc、pdf、md等数据文件上传&#xff0c;同时提供了简洁易懂的操作配置界面&#xff0c;使用户可以轻松地搭建和训练AI应用&#xff0c;并快速进行…

Selenium:设置元素等待、上传文件、下载文件

前言&#xff1a;在工作和学习selenium自动化过程中记录学习知识点&#xff0c;深化知识点 1. 设置元素等待 元素定位之元素等待-- WebDriver提供了两种类型的等待&#xff1a;显示等待和隐式等待。 1.1 显示等待 显式等待使WebDriver等待某个条件处理时继续执行&#xff…