欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > Spring配置文件

Spring配置文件

2025/6/6 23:25:16 来源:https://blog.csdn.net/weixin_74744611/article/details/145996465  浏览:    关键词:Spring配置文件

1.配置文件的作用

我们的计算机上存储了成千上万的配置文件,我们使用的应用都离不开配置文件.

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

小知识:

硬编码:硬编码就是将数据直接嵌入到程序或者其他的可执行文件的源代码中,也就是我们常说的"代码写死".比如手机字体大小,直接在我们的程序中固定字体大小,所有的用户都是同一个字体大小.但是用户可能有不同的喜好,我们可以把手机字体大小放在配置文件中华,当程序启动时,读取配置.以用户设置的大小来显示

2.Spring配置文件

SpringBoot⽀持并定义了配置⽂件的格式, 也在另⼀个层⾯达到了规范其他框架集成到SpringBoot的⽬的.
很多项⽬或者框架的配置信息也放在配置⽂件中, ⽐如:
项⽬的启动端⼝
数据库的连接信息(包含⽤⼾名和密码的设置)
第三⽅系统的调⽤密钥等信息
⽤于发现和定位问题的普通⽇志和异常⽇志等.

上面红色的框中就是我们Spring Boot的配置文件

2.1配置文件的格式

Spring Boot的配置文件分为三种

application.properties

application.yml

application.yaml

其中appliation.yml是application.ymal的简写形式,他们是一个东西.但是我们一般都用application.yml.

当应⽤程序启动时, Spring Boot会⾃动从classpath路径找到并加载 .application.properties 和 application.yaml 或者 application.yml ⽂件.
他们两者其实都是配置文件,只是yml类似于properties的升级版,表示数据的格式发生了变化.
application.yml的数据格式更加简单,可读性更高.

2.1.1properties的配置文件说明

数据格式

spring.application.name=demo11
server.port=9090
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&
spring.datasource.username=root
spring.datasource.password=root

2.2.2读取配置文件

spring.application.name=demo11
server.port=9090
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&
spring.datasource.username=root
spring.datasource.password=rootmykey.key=souty

这里我们使用@Value注解.来将配置文件中的数据读取到程序中,括号中包括'$'符号,以及配置文件中的类型.

2.2.3properties缺点分析

spring.application.name=demo11
server.port=9090
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&
spring.datasource.username=root
spring.datasource.password=rootmykey.key=souty

这里我们看到properties的可读性不是很高.

3.yml的配置文件说明

yml是yaml的缩写

3.1yml的基本语法

它的基础语法"key: value".

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

基础语法格式如下:

spring:application:name: captcha-demo2captchas:width: 200height: 80session:key: "captcha_session_key"time: "captcha_session_time"

3.2yml的使用

mytypes:type: post

注意:数据的格式,空格冒号缺一不可.

3.3value值的单双引号

string: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("/getStr")public void priStr(){System.out.println(str1);System.out.println(str2);System.out.println(str3);}

上述结果我们可以看出:

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

单引号会转义特殊字符,使其失去特殊功能

双引号不会转义字符

3.4配置对象

student:id: 111name: zhangsanage: 20

我们要定义一个对象来接收数据,这里我们使用另外一个注解@ConfigurationProperties,并在括号中指明key.

 

3.5配置集合

定义一个集合用来接收数据,使用@ConfigurationProperties注解将数据放入集合中,并在括号内指明key

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

3.6yml的优缺点

优点:

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

支持更多的参数类型,如对象,数组,List等

支持更多的编程语言

缺点:不适合写复杂的配置文件

4.验证码案例

首先我们要使用Hutools来帮助我们实现一个验证码.

引入依赖

  <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.34</version></dependency>

代码展示:
 

package com.example.demo.controller;import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.LineCaptcha;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.io.IOException;@RestController
@RequestMapping("/res")
public class CaptchaController {private final static long VAILD_CAPTCHA_TIMEOUT=60*1000;//1.首先我们要设置一个二维码并且返回给前端@RequestMapping("/get")public void getCap(HttpServletResponse response, HttpSession session) throws IOException {//生成验证码LineCaptcha captcha= CaptchaUtil.createLineCaptcha(200,80);//将验证码返回给前端captcha.write(response.getOutputStream());//如果多个用户同时输入验证码,可能无法校验,这里我们使用学过的session,通过session来存储用户的验证码String code = captcha.getCode();session.setAttribute("captcha_session_key",code);session.setAttribute("captcha_session_time",System.currentTimeMillis());}//2.校验@RequestMapping("/check")public Boolean check(String inputcode,HttpSession session){//将session结果拿出来和用户输入的进行比对//我们知道二维码也是有时间限制的,所以我们这里也要设置时间限制//如何设置呢?就用通过session存储二维码的时间开始计算到当前时间,不超过某个阈值即可String saveCode = (String) session.getAttribute("captcha_session_key");long savetime = (long) session.getAttribute("captcha_session_time");//当用户输入为空直接返回if (inputcode==null){return false;}//比对+判断是否是在时间之内if (System.currentTimeMillis()-savetime<VAILD_CAPTCHA_TIMEOUT){if(saveCode.equalsIgnoreCase(inputcode)){return true;}}return false;}
}

代码优化:将一些不变的量放入配置文件中

captcha:width: 200height: 80VAILD_CAPTCHA_TIMEOUT: 600000session:key: "captcha_session_key"time: "captcha_session_time"
package com.example.demo.controller;import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.LineCaptcha;
import com.example.demo.model.CaptchaPractices;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.io.IOException;@RestController
@RequestMapping("/res")
public class CaptchaController {@Autowiredprivate CaptchaPractices captchaPractices;//1.首先我们要设置一个二维码并且返回给前端@RequestMapping("/get")public void getCap(HttpServletResponse response, HttpSession session) throws IOException {//生成验证码LineCaptcha captcha= CaptchaUtil.createLineCaptcha(captchaPractices.getWidth(),captchaPractices.getHeight());//将验证码返回给前端captcha.write(response.getOutputStream());//如果多个用户同时输入验证码,可能无法校验,这里我们使用学过的session,通过session来存储用户的验证码String code = captcha.getCode();session.setAttribute(captchaPractices.getSession().getKey(),code);session.setAttribute(captchaPractices.getSession().getTime(),System.currentTimeMillis());//关闭outputStreamresponse.getOutputStream().close();}//2.校验@RequestMapping("/check")public Boolean check(String inputcode,HttpSession session){//将session结果拿出来和用户输入的进行比对//我们知道二维码也是有时间限制的,所以我们这里也要设置时间限制//如何设置呢?就用通过session存储二维码的时间开始计算到当前时间,不超过某个阈值即可String saveCode = (String) session.getAttribute(captchaPractices.getSession().getKey());long savetime = (long) session.getAttribute(captchaPractices.getSession().getTime());//当用户输入为空直接返回if (inputcode==null){return false;}//比对+判断是否是在时间之内if (System.currentTimeMillis()-savetime<captchaPractices.getVAILD_CAPTCHA_TIMEOUT(){if(saveCode.equalsIgnoreCase(inputcode)){return true;}}return false;}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词