【Java EE进阶 --- SpringBoot】SpringBoot配置文件
🚀 欢迎来到我的CSDN博客:Optimistic _ chen
✨ 一名热爱技术与分享的全栈开发者,在这里记录成长,专注分享编程技术与实战经验,助力你的技术成长之路,与你共同进步!
🚀我的专栏推荐:
专栏 | 内容特色 | 适合人群 |
---|---|---|
🔥C语言从入门到精通 | 系统讲解基础语法、指针、内存管理、项目实战 | 零基础新手、考研党、复习 |
🔥Java基础语法 | 系统解释了基础语法、类与对象、继承 | Java初学者 |
🔥Java核心技术 | 面向对象、集合框架、多线程、网络编程、新特性解析 | 有一定语法基础的开发者 |
🔥Java EE 进阶实战 | Servlet、JSP、SpringBoot、MyBatis、项目案例拆解 | 想快速入门Java Web开发的同学 |
🔥Java数据结构与算法 | 图解数据结构、LeetCode刷题解析、大厂面试算法题 | 面试备战、算法爱好者、计算机专业学生 |
🚀我的承诺:
✅ 文章配套代码:每篇技术文章都提供完整的可运行代码示例
✅ 持续更新:专栏内容定期更新,紧跟技术趋势
✅ 答疑交流:欢迎在文章评论区留言讨论,我会及时回复(支持互粉)
🚀 关注我,解锁更多技术干货!
⏳ 每天进步一点点,未来惊艳所有人!✍️ 持续更新中,记得⭐收藏关注⭐不迷路 ✨
📌 标签:#技术博客 #编程学习 #Java #C语言 #算法 #程序员
文章目录
- 配置文件
- SpringBoot 配置文件
- properties配置文件
- yml配置文件
- 案例练习
- 验证码
- 后端代码
- 前端代码
- 完结撒花!🎉
配置文件
配置文件(Configuration File)是一种用于存储程序运行所需参数和设置的文件。它通常以纯文本形式存在,允许用户通过编辑文件内容来调整程序的行为,而无需修改程序代码。
作用:配置文件的主要功能是提供灵活性和可定制性。它可以定义程序的运行参数、存储路径、网络设置、用户偏好等。配置文件有多种格式,常见的是:*.config, *.xml等等
具体体现在解决硬编码 (硬编码是将数据直接嵌⼊到程序或其他可执⾏对象的源代码中, 也就是参数固定) 问题, 把可能会改变的信息,放在一个集中的地方,启动程序后,从配置文件中读取数据并加载运行。
举个例子:手机设置里有很多可以设置的项目,比如,屏幕翻转、字体大小等等。用户根据不同的习惯设置不同的大小,当手机启动时,读取配置,以⽤⼾设置的字体⼤⼩来显⽰。 |
SpringBoot 配置文件
SpringBoot支持并定义了配置文件的格式,很多项目的配置信息也放在配置文件中:比如,项目的启动端口、数据库的连接信息、依赖的配置等等。
在SpringBoot创建项目时,就已经创建好了配置文件:
我们SpringBoot集成了Tomcat服务器,默认端口号8080,启动程序:
SpringBoot创建的配置文件一般都是application.properties,上图显示的application.yml是我修改后的文件,只需要改一下后缀即可。
解释:理论上说,.properties和.yml可以并存于一个项目中,两个配置文件都会加载,如果有冲突,以.properties为主。但是尽可能的还是使用一种配置文件更好。
properties配置文件
properties 配置⽂件是最早期的配置⽂件格式,也是创建SpringBoot项⽬默认的配置⽂件
语法:properties是以键值对的形式配置的,Key=Value
#配置项目端口号
server.port=8080
读取配置文件:项目中,想要主动读取配置文件中的内容,可以使用 @Value注解来实现。
properties配置:
my.key=10
@Controller
@ResponseBody
public class PropertiesController {@Value("${my.key}")private Integer myKey;@RequestMapping("/key")public String key(){return "读取到值:"+myKey;}
}
我们知道,properties配置是以Key-Value形式配置的,那么不可避免的会有很多冗余的信息,所以就出现了yml文件来解决这个问题。
yml配置文件
语法:yml是树形结构的配置文件,Key: Value
注意:Key和Value之间使用英文冒号+空格的方式组成
对比一下两种配置文件连接数据库的对比:
yml读取配置的⽅式和properties相同,使⽤@Value 注解即可。
还可以在yml中配置对象:
person:id: 1name: zhangsanage: 12
这个时候就不能⽤@Value 来读取配置中的对象了,此时要使⽤另⼀个注解@ConfigurationProperties 来读取,
@Configuration
@Data
@ConfigurationProperties(prefix = "person")//从配置文件获取对象值
public class Person {private Integer id;private String name;private Integer age;
}
调用类:
@ResponseBody
@Controller
public class PersonController {@Autowiredprivate Person person;@RequestMapping("/person")public String person(){return person.toString();}
}
总结:可读性高,支持多种数据类型,支持更多编程语言
案例练习
验证码
页面生成验证码,输入验证码,点击提交,验证用户输入验证码是否正确
引入一个Hutool的工具:Hutool是⼀个Java⼯具包类库,对⽂件、流、加密解密、转码、正则、线程、XML等JDK⽅法进⾏封装,组成各种Util⼯具类。
后端代码
导入依赖
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-captcha</artifactId><version>5.8.36</version>
</dependency>
把配置项写到配置问件中application.yml
spring:application:name: spring-captcha-demo
captcha:width: 150height: 50session:key: CAPTCHA_SESSION_KEYdate: CAPTCHA_SESSION_DATE
配置项对应的Java对象
package com.zc.captcha.model;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;@ConfigurationProperties(prefix = "captcha")
@Configuration
@Data
public class CaptchaProperties {private Integer width;private Integer height;private Session session;@Datapublic static class Session{private String key;private String date;}
}
Controller层
实现验证码
package com.zc.captcha.Controller;import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.LineCaptcha;
import cn.hutool.captcha.ShearCaptcha;
import com.zc.captcha.model.CaptchaProperties;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.io.IOException;
import java.util.Date;
@RequestMapping("/captcha")
@RestController
public class CaptchaController {@Autowiredprivate CaptchaProperties captchaProperties;// 验证码有效时间30分钟private final static Long VALID_TIME=30*60*1000L;//生成验证码@RequestMapping("/getCaptcha")public void getCaptcha(HttpSession session, HttpServletResponse response){response.setContentType("image/jpeg");//设置响应类型为JPEG图片response.setHeader("Pragma","No-cache");//禁止缓存//生成验证码try {ShearCaptcha captcha=CaptchaUtil.createShearCaptcha(captchaProperties.getWidth(), captchaProperties.getHeight());//设置验证码干扰项String code=captcha.getCode();//获取验证码文本session.setAttribute(captchaProperties.getSession().getKey(),code);//存储验证码sessionsession.setAttribute(captchaProperties.getSession().getDate(),new Date());//存储验证码生成时间captcha.write(response.getOutputStream());//输出图片} catch (IOException e) {throw new RuntimeException(e);}}
校验验证码
//校验验证码@RequestMapping("/check")public boolean check(String captcha,HttpSession session){if(!StringUtils.hasLength(captcha)){ // 检查输入是否为空return false;}//session中获取存储的验证码和生成时间String code=(String) session.getAttribute(captchaProperties.getSession().getKey());Date date=(Date) session.getAttribute(captchaProperties.getSession().getDate());//忽略大小写比较且未过期if(captcha.equalsIgnoreCase(code)&&System.currentTimeMillis()-date.getTime()<VALID_TIME){return true;}return false;}
}
前端代码
<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8"><meta http-equiv="Cache-Control" content="no-cache,no-store,must-revalidate"/><meta http-equiv="Pragma" content="no-cache"/><meta http-equiv="Expires" content="0"/><title>验证码</title><style>#inputCaptcha {height: 30px;vertical-align: middle; }#verificationCodeImg{vertical-align: middle; }#checkCaptcha{height: 40px;width: 100px;}</style>
</head><body><h1>输入验证码</h1><div id="confirm"><input type="text" name="inputCaptcha" id="inputCaptcha"><img id="verificationCodeImg" src="/captcha/getCaptcha" style="cursor: pointer;" title="看不清?换一张" /><input type="button" value="提交" id="checkCaptcha"></div><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script><script>$("#verificationCodeImg").click(function(){$(this).hide().attr('src', '/captcha/getCaptcha?dt=' + new Date().getTime()).fadeIn();});$("#checkCaptcha").click(function () {$.ajax({type:"post",url:"/captcha/check",data:{captcha:$("#inputCaptcha").val()},success:function(result){if(result){location.href="success.html";}else{alert("验证码错误,请重新输入");}}});});</script>
</body></html>
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>验证成功页</title>
</head>
<body><h1>验证成功</h1>
</body>
</html>
完结撒花!🎉
如果这篇博客对你有帮助,不妨点个赞支持一下吧!👍
你的鼓励是我创作的最大动力~
✨ 想获取更多干货? 欢迎关注我的专栏 → optimistic_chen
📌 收藏本文,下次需要时不迷路!
我们下期再见!💫 持续更新中……
悄悄说:点击主页有更多精彩内容哦~ 😊