【Java EE进阶 --- SpringBoot】SpringBoot配置文件 - 指南


欢迎来到我的CSDN博客:Optimistic _ chen
一名热爱技术与分享的全栈开发者,在这里记录成长,专注分享编程技术与实战经验,助力你的技术成长之路,与你共同进步!


我的专栏推荐

专栏内容特色适合人群
C语言从入门到精通系统讲解基础语法、指针、内存管理、项目实战零基础新手、考研党、复习
Java基础语法系统解释了基础语法、类与对象、继承Java初学者
Java核心技术面向对象、集合框架、多线程、网络编程、新特性解析有一定语法基础的开发者
Java EE 进阶实战Servlet、JSP、SpringBoot、MyBatis、项目案例拆解想快速入门Java Web开发的同学
Java数据结构与算法图解数据结构、LeetCode刷题解析、大厂面试算法题面试备战、算法爱好者、计算机专业学生

我的承诺:
✅ 文章配套代码:每篇技术文章都提供完整的可运行代码示例

✅ 持续更新:专栏内容定期更新,紧跟技术趋势

✅ 答疑交流:欢迎在文章评论区留言讨论,我会及时回复(支持互粉)


关注我,解锁更多技术干货!
⏳ 每天进步一点点,未来惊艳所有人!✍️ 持续更新中,记得⭐收藏关注⭐不迷路 ✨

标签:#技术博客#编程学习#Java#C语言#算法#程序员

配置文件

配置文件(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: 1
name: zhangsan
age: 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
{
@Autowired
private 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: 150
height: 50
session:
key: CAPTCHA_SESSION_KEY
date: 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;
@Data
public 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
{
@Autowired
private 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);
//存储验证码session
session.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
收藏本文,下次需要时不迷路!

我们下期再见! 持续更新中……


悄悄说:点击主页有更多精彩内容哦~

posted @ 2025-09-16 13:37  yjbjingcha  阅读(14)  评论(0)    收藏  举报