SpringBoot配置文件

ops/2024/9/20 9:18:48/ 标签: spring boot, java, 服务器

目录

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在创建项目时,就已经创建了配置文件

java">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配置如下:

java">mykey.key=123
java">@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注解即可,实现代码如下

java">@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值加单双引号 

java">string:str1: Hello \n Spring Boot.str2: 'Hello \n Spring Boot.'str3: "Hello \n Spring Boot."
java">@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 配置对象 

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

使用 @ConfigurationProperties来进行读取即可

5.4 配置集合

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

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

java">dbtype:name:- mysql- sqlserver- db2

 

5.5 配置Map

java">maptype:map:k1: 1k2: 2k3: 3
java">@Component
@ConfigurationProperties(prefix = "maptype")
@Data
public class Map {private HashMap<String,String> map;
}
java">@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 引入依赖

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

6.2.3 生成验证码

通过配置文件生成验证码

java">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 实现服务器端代码

引入依赖

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

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

java">kaptcha:items:admin:path: /admin/captchasession:key: ADMIN_KAPTCHA_SESSION_KEYdate: ADMIN_KAPTCHA_SESSION_DATE

验证码检验

java">@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 调整前端代码

javascript">$("#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.ppmy.cn/ops/29881.html

相关文章

xLua热更新解决方案

图中灰色的无法实现热更新&#xff0c;而Lua代码可以打包成AB包&#xff0c;并上传到资源服务器&#xff0c; 当进入游戏检测是否有资源需要更新&#xff0c;需要则会从资源服务器下载。 学习目标 1.导入xLua框架 2.C#调用Lua 3.Lua调用C# 4.xLua热补丁 xLua框架导入和AB…

【统计推断】-01 抽样原理之(三)

文章目录 一、说明二、抽样分布三 均值抽样分布3.1 有限母体无放回抽样3.2 有限母体有放回抽样3.3 无限母体 四、比例抽样分布五、和差抽样分布 一、说明 上文中叙述母体和抽样的设计&#xff1b;以及抽样分布的概念&#xff0c;本篇将这种关系定量化&#xff0c;专门针对抽样的…

智能安全时代:AI如何重塑我们对网络威胁的应对

在数字化时代&#xff0c;网络安全已成为维护国家安全、企业利益和个人隐私的重要屏障。随着技术的不断进步&#xff0c;人工智能&#xff08;AI&#xff09;已经成为增强网络安全防护的关键工具。本文将探讨人工智能如何通过其独特的能力&#xff0c;为网络安全领域带来革命性…

ThreeJS:本地部署官网文档与案例

部署方式 部署之前请确保已经配置好node.js环境。 1. 下载ThreeJS源码 ThreeJS的GitHub地址&#xff1a;GitHub - mrdoob/three.js: JavaScript 3D Library.&#xff0c;可以简单查看ThreeJS当前版本&#xff1a;r164&#xff0c; 我们可以选择对应的版本&#xff08;此处为r1…

利用大语言模型(KIMI)构建控制信息模型

数字化的核心是数字化建模&#xff0c;为一个事物构建数字模型是一项十分复杂的工作。不同的应用场景&#xff0c;对事物的关注重点的不同的。例如&#xff0c;对于一个智能传感器而言&#xff0c;从商业的角度看&#xff0c;产品的信息模型中应该包括产品的类型&#xff0c;名…

主机win10,VMware 装了ubuntu,ubuntu传文件到主机

亲测可用&#xff0c;1分钟搞定&#xff0c;不能用你打死我 使用 FileZilla 工具互传 FileZilla是一款免费的工具&#xff0c;是基于 FTP 协议进行文件互传的&#xff0c;在传输过程中我们的ubuntu是作为服务器&#xff0c; FileZilla 工具则是作为客户端。 1 ubuntu安装 FTP…

redis

reids 基本概念特性 安装命令lua 脚本EVALSHA命令例子lua脚本摘要参考 基本 概念 redis: REmote DIctionary Server key-value 存储系统&#xff0c;非关系型数据库。 开源的使用 ANSI C 语言编写 支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库&am…

Windows Server 评估版转换(升级)为完整版

临时方法 获取 Windows Server 的剩余宽限期 Slmgr /dliWindows Server免费试用期可以使用以下命令合法延长5次&#xff0c;共180天&#xff1a; slmgr /rearm这意味着所评估的 Windows Server 的最长可用时间为 3 年 ( 180 days * 6)。 试用期到期后&#xff0c;Windows S…

PC通过串口发送指令控制LED+串口中断

如何让单片机接收数据&#xff1f; 首先要打开SCON中的串行接收控制位REN。当REN1时为允许接收状态&#xff0c;可以接收信息。 因此令SCON 0x50&#xff1b; 怎么知道收到数据&#xff1f; 利用RI接收中断请求标志位。当串行接收到第8位结束时由内部硬件自动置为RI1&#…

UDP的报文结构和注意事项

目录 正文&#xff1a; 1.概述 2.UDP的报文结构 3.注意事项 总结&#xff1a; 正文&#xff1a; 1.概述 UDP&#xff08;User Datagram Protocol&#xff09;是一种无连接的传输层协议&#xff0c;它提供了一种简单的数据传输服务&#xff0c;不保证数据的可靠传输。在网…

《架构即未来》读后感

目录 一、引言 二、《架构即未来》读后感 1、主题的简要介绍 2、我的看法和理解 3、作者的优点和传递的信息 4、思想如何适用于当今社会 三、《架构即未来》对于企业发展的影响具体体现在哪些方面&#xff1f; 一、引言 任何一个持续成长的公司最终都需要解决系统、组织…

tomcat篇-windows 运行tomcat的startup.bat时,终端打印的中文显示为乱码

当运行Tomcat的startup.bat时&#xff0c;如果终端中中文显示为乱码&#xff0c;这通常是因为Tomcat使用的日志输出编码与Windows命令行默认的编码不匹配。针对这一问题&#xff0c;你可以尝试以下步骤来解决&#xff1a; 1、执行startup.bat&#xff0c;在输出的窗口右击&…

SpringCloud学习笔记(二)Ribbon负载均衡、Nacos注册中心、Nacos与Eureka的区别

文章目录 4 Ribbon负载均衡4.1 负载均衡原理4.2 源码解读4.3 负载均衡策略4.3.1 内置的负载均衡策略4.3.2 自定义负载均衡策略4.3.2.1 方式一&#xff1a;定义IRule4.3.2.2 方式二&#xff1a;配置文件 4.4 饥饿加载 5 Nacos注册中心5.1 认识和安装Nacos5.2 服务注册到Nacos5.3…

Window11安装vim编辑器

我们在做git操作的时候&#xff0c;很多文字编辑工作会默认打开 Vim 编辑器来进行操作。 Vim 是一个高度可配置的文本编辑器&#xff0c;旨在让创建和更改任何类型的文本变得非常高效。大多数 UNIX 系统和 Apple OS X 都将它作为vi包含在内&#xff0c;用惯了Linux中的Vim编辑器…

与 Apollo 共创生态:企业解决方案Apollo X 9.0,七载同舟,携手远航,视频简说

目录 介绍背景方案与项目Apollo 开源项目Apollo X 企业解决方案落地因素助力企业落地流程 预置套件需求定义功能定义场景用例融合技术面向园区功能安全Cyber RT企业硬件套件 开发工具链研发迭代范式协同研发工具链标定工具地图工具仿真平台数据闭环 企业合作模式合作方式 共创计…

在vue2中,什么是双向绑定,为什么vue3要进行优化?

一、什么是双向绑定 我们先从单向绑定切入单向绑定非常简单&#xff0c;就是把Model绑定到View&#xff0c;当我们用JavaScript代码更新Model时&#xff0c;View就会自动更新双向绑定就很容易联想到了&#xff0c;在单向绑定的基础上&#xff0c;用户更新了View&#xff0c;Mo…

使用nodejs和python脚本实现爬虫程序,并将抓取数据生成词云图看板

创建项目&#xff0c;初始化目录结构。 创建项目名称为pachong。运行 npm init -y 初始化项目。修改package.json文件中的type属性为module。安装 npm 包&#xff1a;npm install puppeteer #爬虫 | 自动化UI测试首先确保你的电脑上有python3环境安装两个python包 pip instal…

备忘录模式(行为型)

目录 一、前言 二、备忘录模式 三、总结 一、前言 备忘录模式(Memento Pattern&#xff09;是一种行为型设计模式&#xff0c;在不破坏封装性的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对象之外保存这个状态&#xff0c;这样可以在之后将该对象恢复到原…

第六十九章 使用 NSD (UNIX® Linux macOS) - 示例 2:两个 Web 应用程序

文章目录 第六十九章 使用 NSD (UNIX Linux macOS) - 示例 2&#xff1a;两个 Web 应用程序示例 2&#xff1a;两个 Web 应用程序将负载分散到多个 NSD 进程上授予 NSD 管理员权限 第六十九章 使用 NSD (UNIX Linux macOS) - 示例 2&#xff1a;两个 Web 应用程序 示例 2&…

十大排序算法之——插入排序算法(Java实现)及思路讲解

插入排序是一种简单直观的排序算法&#xff0c;它的工作原理是通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后向前扫描&#xff0c;找到相应位置并插入。插入排序在实现上&#xff0c;通常采用in-place排序&#xff08;即只需用到O(1)的额外空间的…