SpringBoot配置文件

目录

1 SpringBoot配置文件

2 配置文件的快速入手

3 配置文件格式

4 properties配置文件说明

4.1 properties基本语法

4.2 读取配置文件

4.3 properties缺点

5 yml配置文件

5.1 yml基本语法

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

5.3 配置对象 

5.4 配置集合

5.5 配置Map

5.6 yml优缺点

6 综合性练习

6.1 验证码案例

6.2 Kaptcha插件

6.2.1 原理

6.2.2 引入依赖

6.2.3 生成验证码

6.3 页面生成验证码

6.3.1 准备工作

6.3.2 约定前后端交互接口

6.3.3 实现服务器端代码

6.3.4 调整前端代码

6.3.5 运行测试

7 总结 

1 SpringBoot配置文件

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

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

1)项目的启动端口 

2)数据库的连接信息

3)第三方系统的调用密钥等信息

4)用于发现和定位问题的普通日志和异常日志等

2 配置文件的快速入手

Tomcat的默认端口是8080,所以在程序访问时的端口号也是8080,如果8080端口被占用了,则可以通过配置文件来修改服务的端口号,SpringBoot在创建项目时,就已经创建了配置文件

server.port=9090

只需要修改application.properties文件即可,重新运行程序,观察日志

此时Tomcat启动端口为9090,因此访问的时候就需要使用9090这个端口来访问

3 配置文件格式

SpringBoot配置文件有三种:

1)application.properties

2)application.yml

3)application.yaml

yml为yaml的简写,实际开发中出现的频率最高,它们使用方式一样,因此只介绍yml文件的使用

特殊说明:

1)理论上.properties和.yml可以并存于一个项目中,当.properties和.yml并存时,两个配置都会加载,如果配置文件内容有冲突,则以.properties为主,因此.properties优先级更高

2)在实际业务中,通常采用一种统一的配置文件格式

4 properties配置文件说明

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

4.1 properties基本语法

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

4.2 读取配置文件

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

properties配置如下:

mykey.key=123
@RestController
public class PropertiesController {@Value("${mykey.key}")private String k;@RequestMapping("/key")public String key() {return "读取的值:"+ k;}
}

如果去掉$,就会把" "中的值赋值给当前变量

4.3 properties缺点

properties配置是以key-value的形式配置的,配置文件中有很多冗余信息

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

5 yml配置文件

yml是YAML的缩写,它的全称Yet Another Markup Language 

5.1 yml基本语法

yml是树形结构的配置文件,它的基础语法是"key:value",其中key和value之间使用英文冒号加空格的方式组成,空格不可以省略

yml连接数据库代码展示 

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

yml配置读取的方式和properties相同,使用@Value注解即可,实现代码如下

@RestController
public class PropertiesController {@Value("${string.key1}")private String k1;@Value("${string.key2}")private Integer k2;@Value("${string.key3}")private String k3;@PostConstructpublic void init() {System.out.println("key1:" + k1);System.out.println("key2:" + k2);System.out.println("key3:" + k3);System.out.println(StringUtils.hasLength(k3));}
}

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

string:str1: Hello \n Spring Boot.str2: 'Hello \n Spring Boot.'str3: "Hello \n Spring Boot."
@RestController
public class PropertiesController {@Value("${string.str1}")private String str1;@Value("${string.str2}")private String str2;@Value("${string.str3}")private String str3;//@PostConstruct是在tomcat启动之前就打印@PostConstructpublic void init() {System.out.println("str1:" + str1);System.out.println("str2:" + str2);System.out.println("str3:" + str3);}
}

从上述结果可以看出:

1)字符串默认不用加上单引号或者双引号

2)单引号会转译特殊字符,始终是一个普通字符串

3)双引号不会转义字符串里面的特殊字符,特殊字符会表示本身的含义

5.3 配置对象 

student:id: 18name: zhangsanage: 19
@Component
@ConfigurationProperties(prefix = "student")
@Data
public class Student {private Integer id;private String name;private Integer age;
}
@RestController
public class StudentController {@Autowiredpublic Student student;@PostConstructpublic void init() {System.out.println("student:" + student);}
}

使用 @ConfigurationProperties来进行读取即可

5.4 配置集合

dbtype:name:-mysql-sqlserver-db2
@Component
@ConfigurationProperties(prefix = "dbtype")
@Data
public class DBType {private String[] name;
}
@RestController
public class DBTypeController {@Autowiredprivate DBType dbType;@PostConstructpublic void init() {System.out.println("dbtype:" + dbType + "length:" + dbType.getName().length);}
}

上述输出的长度为1,是因为yml里面的-和mysql之间没有加空格

dbtype:name:- mysql- sqlserver- db2

 

5.5 配置Map

maptype:map:k1: 1k2: 2k3: 3
@Component
@ConfigurationProperties(prefix = "maptype")
@Data
public class Map {private HashMap<String,String> map;
}
@RestController
public class MapController {@Autowiredprivate Map map;@PostConstructpublic void init() {System.out.println("map:" + map + "length:" + map.getMap().size());}
}

5.6 yml优缺点

优点:

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

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

3 支持更多的编程语言,不止在Java中可以使用,在Golang,Python中也可以使用

缺点:

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

2 对格式有较强的要求(少写一个空格就会出错)

6 综合性练习

6.1 验证码案例

随着安全性的要求越来越高,在目前项目中都使用了验证码,而验证码的形式也是各种各样的

6.2 Kaptcha插件

6.2.1 原理

验证码可以客户端生成,也可以服务器生成,对于普通的字符验证码,后端代码通常分成两部分,一是生成验证码内容,根据验证码内容和干扰项等,生成图片并返回给客户端,二是把验证码内容存储起来,校验时取出来进行对比,kaptcha插件选择把验证码存储在Session⾥

6.2.2 引入依赖

<dependency><groupId>com.oopsguy.kaptcha</groupId><artifactId>kaptcha-spring-boot-starter</artifactId><version>1.0.0-beta-2</version>
</dependency>

6.2.3 生成验证码

通过配置文件生成验证码

kaptcha:items:home:path: /home/captchasession:key: HOME_KAPTCHA_SESSION_KEYdate: HOME_KAPTCHA_SESSION_DATEadmin:path: /admin/captchasession:key: ADMIN_KAPTCHA_SESSION_KEYdate: ADMIN_KAPTCHA_SESSION_DATE

直接通过http://127.0.0.1:8080/home/captcha访问即可

6.3 页面生成验证码

6.3.1 准备工作

创建项目,引入SpringMVC的依赖包,把前端页面放在项目中

6.3.2 约定前后端交互接口

需求分析

1)后端生成验证码并返回给前端

2)校验验证码受否正确

接口定义

1)生成验证码

请求:GET    /admin/captcha

响应:图片内容

2)校验验证码是否正确

请求:POST   /admin/check

响应:true

6.3.3 实现服务器端代码

引入依赖

<dependency><groupId>com.oopsguy.kaptcha</groupId><artifactId>kaptcha-spring-boot-starter</artifactId><version>1.0.0-beta-2</version>
</dependency>

通过配置文件创建验证码生成器

kaptcha:items:admin:path: /admin/captchasession:key: ADMIN_KAPTCHA_SESSION_KEYdate: ADMIN_KAPTCHA_SESSION_DATE

验证码检验

@RequestMapping("/admin")
@RestController
public class CaptchaController {private static final String SESSION_KEY = "ADMIN_KAPTCHA_SESSION_KEY";private static final String SESSION_DATE ="ADMIN_KAPTCHA_SESSION_DATE";private static final Long SESSION_TIME = 60 * 1000L;@RequestMapping("/check")public Boolean check(String captcha, HttpSession session) {if (!StringUtils.hasLength(captcha)) {return false;}//从Session中获取验证码String saveCaptcha = (String)session.getAttribute(SESSION_KEY);Date saveDate = (Date) session.getAttribute(SESSION_DATE);//对比验证码if (captcha.equals(saveCaptcha)) {//对比日期if (saveDate == null || System.currentTimeMillis() - saveDate.getTime() < SESSION_TIME) {return true;}}return false;}
}

对比Session中存储的验证码是否和用户输入的一致,如果一致,并且试件在一分钟就认为成功

6.3.4 调整前端代码

$("#checkCaptcha").click(function () {$.ajax({url: "/admin/check",type: "post",data: {captcha: $("#inputCaptcha").val()},success: function (result) {if (result) {location.href = "success.html";} else {alert("验证码错误");}}});});

6.3.5 运行测试

 

7 总结 

1)properties是以key=value的形式配置的键值类型的配置文件,yml使用的是树形配置方式

2)读取配置文件内容,使⽤@Value注解,注解内使用" ${} "的格式读取

3)yml层级之间使用换行缩进的方式配置,key和value之间使⽤":"(英⽂冒号)加空格的方式设置,并且空格不可省略

4)yml可以很好的解决数据冗余的问题,但不适合复杂设置

5)yml和properties可以共存,但是项目中建议使用一种配置类型文件

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

时间日志格式的统一和定制

返回当前格式的时间没有错误&#xff0c;但是不符合中国人的阅读习惯 解决&#xff1a; 方案一&#xff1a;JsonFormat 解决后端 传到 前端格式问题 依赖&#xff1a; <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jack…

掌握JavaScript面向对象编程核心密码:深入解析JavaScript面向对象机制对象概念、原型模式与继承策略全面指南,高效创建高质量、可维护代码

ECMAScript&#xff08;简称ES&#xff0c;是JavaScript的标准规范&#xff09;支持面向对象编程&#xff0c;通过构造函数模拟类&#xff0c;原型链实现继承&#xff0c;以及ES6引入的class语法糖简化面向对象开发。对象可通过构造函数创建&#xff0c;使用原型链共享方法和属…

关于MS-DOS时代的回忆

目录 一、MS-DOS是什么&#xff1f; 二、MS-DOS的主要功能有哪些&#xff1f; 三、MS-DOS的怎么运行的&#xff1f; 四、微软开源MS-DOS源代码 五、高手与漂亮女同学 一、MS-DOS是什么&#xff1f; MS-DOS&#xff08;Microsoft Disk Operating System&#xff09;是微软公…

第五篇:通信脉络:探索计算机外设与总线体系的精髓

通信脉络&#xff1a;探索计算机外设与总线体系的精髓 1 引言 在这个技术日新月异的时代&#xff0c;理解计算机系统的基本构成要素 —— 总线和外设 —— 对于每个从事技术工作的人来说都是至关重要的。这些组件不仅是计算机通信的基石&#xff0c;也直接影响着系统的性能、效…

Stable Diffusion webUI 配置指南

Stable Diffusion webUI 配置指南 本博客主要介绍部署Stable Diffusion到本地&#xff0c;生成想要的风格图片。 文章目录 Stable Diffusion webUI 配置指南1、配置环境&#xff08;1&#xff09;pip环境[可选]&#xff08;2&#xff09;conda环境[可选] 2、配置Stable Diffu…

STM32 F103C8T6学习笔记17:类IIC通信(SMBus协议)—MLX90614红外非接触温度计

今日学习配置MLX90614红外非接触温度计 与 STM32 F103C8T6 单片机的通信 文章提供测试代码讲解、完整工程下载、测试效果图 本文需要用到的大概基础知识&#xff1a;1.3寸OLED配置通信显示、IIC通信、 定时器配置使用 这里就只贴出我的 OLED驱动方面的网址链接了&#xff1a…

图像处理ASIC设计方法 笔记21 标记ASIC的顶层状态机

目录 (一)标记ASIC的工作流程1 ASIC首先从控制寄存器内读出待标记图像的基本参数2若写入了有效的启动命令,则进入下面一帧图像的标记过程。3 ASIC通过接口模块从FIFO1中读取待标记的图像4一帧图像初步标记完成后进行等价表的整理压缩5从临时标记存储器中读取临时标记送入标记…

快速构建vscode pytest 开发测试环境

如果不想用 heavy 的pycharm vscode 也是1个很好的选择 安装python SDK pacman -S python [gatemanmanjaro-x13 tmp]$ pacman -Q python python 3.11.8-1安装Vscode 很多中方法 yay -S visual-studio-code-bin [gatemanmanjaro-x13 tmp]$ pacman -Q | grep -i visual visua…

【UE5】动态播放媒体

最近项目中有一个需求&#xff0c;需要将场景中的42块屏幕都显示媒体内容&#xff0c;想着如果每一块屏幕都创建一个MediaPlayer资产、一个MediaSource资产、一个MediaTexture资产及创建对应的Material&#xff0c;就是4*42168个资产需要维护了&#xff0c;所以想着就全部采用动…

DDD:根据maven的脚手架archetype生成ddd多模块项目目录结构

随着领域驱动的兴起&#xff0c;很多人都想学习如何进行ddd的项目开发&#xff0c;那ddd的项目结构是怎么样的&#xff1f;又是如何结合SpringBoot呢&#xff1f;那么针对这个问题&#xff0c;笔者使用maven的archetype封装一个相对通用的ddd的项目目录&#xff0c;方便一键生成…

【Github】将github仓库作为图床使用

创建github仓库 首先创建一个github仓库专门用于存储图片&#xff0c;具体步骤如下&#xff1a; 1.点击新的仓库按钮 2.初始配置&#xff1a;随便填写一个仓库名&#xff1b;这里的仓库状态一定要是public公开的&#xff0c;不然后面访问不了图片 下载PicGo PicGo官网 在A…

微信小程序 uniapp家庭食谱菜谱食材网上商城系统小程序ko137

随着生活节奏的不断加快&#xff0c;越来越多的人因为工作忙而没有时间自己出去订购喜欢的菜品。随着Internet的飞速发展&#xff0c;网络已经成为我们日常生活中必不可少的部分&#xff0c;越来越多的人也接受了电子商务这种快捷、方便的交易方式。网上订餐其独有的便捷性和直…

Ubuntu20安装torch1.13和pytorch_geometric2.3.0(对应cuda11.6)

在torch下载页面搜索1.13https://pytorch.org/get-started/previous-versions/&#xff0c;wheel安装方式&#xff08;激活conda虚拟环境&#xff09; pip install torch1.13.0cu116 torchvision0.14.0cu116 torchaudio0.13.0 --extra-index-url https://download.pytorch.org…

WPF之XmlDataProvider使用

1&#xff0c;WPF XAML支持数据提供&#xff08;DataProvider&#xff09;&#xff0c;但其提供的数据只供查看不可进行修改&#xff0c;删除&#xff0c;添加等。 数据提供者都继承自System.Windows.DataSourceProvider类&#xff0c;目前&#xff0c;WPF只提供两个数据提供者…

Docker入门篇来啦~

文章目录 1虚拟化技术1.1 硬件级虚拟化1.2 操作系统级虚拟化 2 Docker是什么2.1 Docker介绍2.2 容器和虚拟机的区别2.3 为什么使用Docker 3 Docker运行环境部署3.1 Docker安装3.2 Docker服务启动 4 Docker核心组件4.1 镜像4.1.1 镜像的基本概念4.1.2 镜像的组成结构4.1.3 镜像的…

【Hadoop】--基于hadoop和hive实现聊天数据统计分析,构建聊天数据分析报表[17]

目录 一、需求分析 1、背景介绍 2、目标 3、需求 4、数据内容 5、建库建表 二、ETL数据清洗 1、数据问题 2、需求 3、实现 4、扩展概念&#xff1a;ETL 三、指标计算 1、指标1&#xff1a;统计今日消息总量 2、指标2&#xff1a;统计每小时消息量、发送量和接收用…

Unity UGUI Image 点击事件忽略空白像素区域

我们会遇到图片不是方形的不规则图片。这个时候我们希望只有点击到图像内容本身才算点击&#xff0c;点击空白区域则不算点击。而UGUI对图片的处理是整个图片都会算作点击区域&#xff0c;这样不能满足于我们的使用需求了。 首先我们需要把图片本身的Read/Write 选项打开 然后…

CSS精灵图、字体图标、HTML5新增属性、界面样式和网站 favicon 图标

精灵图 为什么要使用精灵图 一个网页中往往会应用很多小的背景图像作为修饰&#xff0c;当网页中的图像过多时&#xff0c;服务器就会频繁地接收和发送请求图片&#xff0c;造成服务器请求压力过大&#xff0c;这将大大降低页面的加载速度,因此&#xff0c;为了有效地减少服务…

【源码阅读】Golang中的go-sql-driver库源码探究

文章目录 前言一、go-sql-driver/mysql1、驱动注册&#xff1a;sql.Register2、驱动实现&#xff1a;MysqlDriver3、RegisterDialContext 二、总结 前言 在上篇文章中我们知道&#xff0c;database/sql只是提供了驱动相关的接口&#xff0c;并没有相关的具体实现&#xff0c;具…

分层图像金字塔变压器

文章来源&#xff1a;hierarchical-image-pyramid-transformers 2024 年 2 月 5 日 本文介绍了分层图像金字塔变换器 (HIPT)&#xff0c;这是一种新颖的视觉变换器 (ViT) 架构&#xff0c;设计用于分析计算病理学中的十亿像素全幻灯片图像 (WSI)。 HIPT 利用 WSI 固有的层次结…