首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【Java EE进阶 --- SpringBoot】SpringBoot配置文件

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

作者头像
optimistic_chen
发布2026-01-14 20:26:45
发布2026-01-14 20:26:45
1200
举报

配置文件

配置文件(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

代码语言:javascript
复制
@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中配置对象:

代码语言:javascript
复制
person:
  id: 1
  name: zhangsan
  age: 12

这个时候就不能⽤@Value 来读取配置中的对象了,此时要使⽤另⼀个注解@ConfigurationProperties 来读取,

代码语言:javascript
复制
@Configuration
@Data
@ConfigurationProperties(prefix = "person")//从配置文件获取对象值
public class Person {
    private Integer id;
    private String name;
    private Integer age;
}

调用类:

代码语言:javascript
复制
@ResponseBody
@Controller
public class PersonController {
    @Autowired
    private Person person;

    @RequestMapping("/person")
    public String person(){
        return person.toString();
    }
}
在这里插入图片描述
在这里插入图片描述

总结:可读性高,支持多种数据类型,支持更多编程语言

案例练习

验证码

页面生成验证码,输入验证码,点击提交,验证用户输入验证码是否正确

引入一个Hutool的工具:Hutool是⼀个Java⼯具包类库,对⽂件、流、加密解密、转码、正则、线程、XML等JDK⽅法进⾏封装,组成各种Util⼯具类。

后端代码

导入依赖

代码语言:javascript
复制
<dependency>
		<groupId>cn.hutool</groupId>
		<artifactId>hutool-captcha</artifactId>
		<version>5.8.36</version>
</dependency>

把配置项写到配置问件中application.yml

代码语言:javascript
复制
spring:
  application:
    name: spring-captcha-demo
captcha:
    width: 150
    height: 50
    session:
      key: CAPTCHA_SESSION_KEY
      date: CAPTCHA_SESSION_DATE

配置项对应的Java对象

代码语言:javascript
复制
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层 实现验证码

代码语言:javascript
复制
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);
        }
    }
在这里插入图片描述
在这里插入图片描述

校验验证码

代码语言:javascript
复制
    //校验验证码
    @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;
    }
}
在这里插入图片描述
在这里插入图片描述
前端代码
代码语言:javascript
复制
<!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>
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
<!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>
在这里插入图片描述
在这里插入图片描述

完结撒花!🎉

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-01-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 配置文件
  • SpringBoot 配置文件
    • properties配置文件
    • yml配置文件
  • 案例练习
    • 验证码
      • 后端代码
      • 前端代码
  • 完结撒花!🎉
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档