首页 > 其他分享 >Spring Boot 配置文件

Spring Boot 配置文件

时间:2024-11-08 16:16:13浏览次数:6  
标签:配置文件 Spring 配置 Boot 验证码 properties captcha import yml

 博主主页: 码农派大星.

    数据结构专栏:Java数据结构

 数据库专栏:MySQL数据库

JavaEE专栏:JavaEE

软件测试专栏:软件测试

关注博主带你了解更多知识

目录

1. SpringBoot配置⽂件

1.1 很多项⽬或者框架的配置信息也放在配置⽂件中,⽐如:

2. 配置文件快速入手

3. 配置⽂件的格式 

3.1 说明 

4. properties 配置⽂件说明 

4.1 properties 基本语法 

4.2 读取配置⽂件 

5. yml配置⽂件说明 

5.1 yml基本语法

 5.2 yml配置读取

5.2.1配置对象

 5.2.2配置集合

5.2.3配置Map

5.3 注意事项:value值加单双引号

5.4 yml优缺点

6.验证码案例

6.1 需求

6.2 约定前后端交互接⼝ 

需求分析

接⼝定义

请求:

响应: 

6.3 借助Hutool⼯具

6.4 实现服务器端代码

 6.5 调整前端代码

6.6 验证结果

7. 总结 


1. SpringBoot配置⽂件

配置⽂件主要是为了解决硬编码带来的问题,把可能会发⽣改变的信息,放在⼀个集中的地⽅,当我们启动某个程序时,应⽤程序从配置⽂件中读取数据,并加载运⾏.

在 Spring Boot 应用中,配置文件是用来定义应用配置的重要部分,包括数据库连接信息、服务地址、第三方 API 密钥等。Spring Boot 支持多种类型的配置文件,最常用的是 yml 和 properties 文件

1.1 很多项⽬或者框架的配置信息也放在配置⽂件中,⽐如:

• 项⽬的启动端⼝

• 数据库的连接信息(包含⽤⼾名和密码的设置)

• 第三⽅系统的调⽤密钥等信息 • ⽤于发现和定位问题的普通⽇志和异常⽇志等

2. 配置文件快速入手

SpringBoot内置了Tomcat服务器,默认端⼝号是8080, 但是⽤⼾电脑上8080端⼝号有可能就被其他 应⽤程序占⽤了, 所以SpringBoot需要⽀持让⽤⼾⾃定义端⼝号

我们可以通过配置⽂件来修改服务的端⼝号:

修改 application.properties ⽂件:

server.port=10086

显⽰Tomcat启动端⼝号为10086

3. 配置⽂件的格式 

Spring Boot 配置⽂件有以下三种:

application.properties

application.yml

application.yaml

yml为yaml的简写,实际开发中出现频率最⾼. 使⽤ yaml和yml的使⽤⽅式⼀样

3.1 说明 

1 .properties 和 .yml 可以并存在于⼀个项⽬中,但当两个并存时,两个配置都会加载.如果配置⽂件内容有冲突,则以 .properties 优先级更⾼.

2 . 虽然理论上来讲 .properties 可以和 .properties 和 .yml .properties 为主,也就是 .yml 共存,但实际的业务当中,我们通常会采取⼀种 统⼀的配置⽂件格式,这样可以更好的维护

4. properties 配置⽂件说明 

properties 配置⽂件是最早期的配置⽂件格式,也是创建SpringBoot项⽬默认的配置⽂件

4.1 properties 基本语法 

properties 是以键值的形式配置的,key和value之间是以"="连接的

spring.application.name=config-demo

font.size=14px

4.2 读取配置⽂件 

在项⽬中,想要主动的读取配置⽂件中的内容,可以使⽤ @Value 注解使⽤" ${} "的格式读取

@RequestMapping("/prop")
@RestController
public class PropertiesController {
    @Value("${font.size}")
    private String fontSize;

    @RequestMapping("/readValue")
    public String readValue(){
        return "fontSize:" + fontSize;
    }
}

最终执行效果: 

5. yml配置⽂件说明 

5.1 yml基本语法

yml是树形结构的配置⽂件,它的基础语法是"key:value".

key和value之间使⽤英⽂冒号加空格的⽅式组成,空格不可省略

mykey: value1

 5.2 yml配置读取

5.2.1配置对象

 student:
   id: 1
   name: Java
   age: 18

如果配置的是一个对象,那么就不能使用@Value来读取,应该使用@ConfigurationProperties 

@ConfigurationProperties(prefix = "student")
 @Component
 @Data
 public class Student {
 private int id;
 private String name;
 private int age;
 }

 5.2.2配置集合

//配置文件
 dbtypes:
   name:
	 - mysql
	 - sqlserver
	 - db2
//其他类	 
@ConfigurationProperties("dbtypes")
 @Data
 public class ListConfig {
 private List<String> name;
 }

5.2.3配置Map

//配置文件
 maptypes:
   map:
 	k1: kk1
 	k2: kk2
 	k3: kk3
//其他类
@Component
 @ConfigurationProperties("maptypes")
 @Data
 public class MapConfig {
 private HashMap<String,String> map;
 }

5.3 注意事项:value值加单双引号

 string:
 str1: Hello \n Spring Boot.
 str2: 'Hello \n Spring Boot.'
 str3: "Hello \n Spring Boot."

字符串默认不⽤加上单引号或者双引号。

单引号会转义特殊字符,使其失去特殊功能,始终是⼀个普通的字符串.

双引号不会转义字符串⾥⾯的特殊字符,特殊字符会表⽰本⾝的含义 

5.4 yml优缺点

优点:

1. 可读性⾼,写法简单, 易于理解

2. ⽀持更多的数据类型,可以简单表达对象,数组,List,Map等数据形态.

3. ⽀持更多的编程语⾔,不⽌是Java中可以使⽤,在Golang,Python,Ruby,JavaScript中也可以使⽤

缺点:

1.不适合写复杂的配置⽂件

2. 对格式有较强的要求 

6.验证码案例

6.1 需求

1. ⻚⾯⽣成验证码

2. 输⼊验证码,点击提交,验证⽤⼾输⼊验证码是否正确,正确则进⾏⻚⾯跳转

6.2 约定前后端交互接⼝ 

需求分析

后端需要提供两个服务

1. ⽣成验证码,并返回验证码

2. 校验验证码是否正确:校验验证码是否正确

接⼝定义

请求:

1. ⽣成验证码

请求URL: /captcha/get

浏览器给服务器发送⼀个/captcha/get这样的请求,服务器返回⼀个图⽚,浏览器显⽰在⻚⾯上

2. 校验验证码是否正确 

请求:/captcha/check

captcha: ⽤⼾输⼊的验证码

响应: 
 true

6.3 借助Hutool⼯具

验证码的实现,使⽤Hutool提供的⼩⼯具来实现 

 引⼊依赖

<dependency>
 <groupId>cn.hutool</groupId>
 <artifactId>hutool-captcha</artifactId>
 <version>5.8.22</version>
 </dependency>

6.4 实现服务器端代码


import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.ICaptcha;
import cn.hutool.captcha.LineCaptcha;
import cn.hutool.core.lang.Console;
import com.VerificationCode.demo.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;
@RequestMapping("/captcha")
@RestController
public class VerificationController {
    @Autowired
    private CaptchaProperties captchaProperties;
    private long VALID_TIME = 60*1000;

    @RequestMapping("/get")
    public void getCaptcha(HttpSession session,HttpServletResponse response) throws IOException {

        ICaptcha captcha = CaptchaUtil.createLineCaptcha(
                captchaProperties.getWidth(), captchaProperties.getHeight());

        captcha.write(response.getOutputStream());
        //禁止缓存
        response.setHeader("Prama","No-cache");
        //设置返回格式
        response.setContentType(("/image.jpeg"));
        //打印验证码
        System.out.println(captcha.getCode());
        //存储session
        session.setAttribute(captchaProperties.getSession().getCode(),captcha.getCode());
        session.setAttribute(captchaProperties.getSession().getDate(),System.currentTimeMillis());
        response.getOutputStream().close();
        //Servlet的OutputStream记得自行关闭哦!
    }

    @RequestMapping("/check")
    public Boolean check(String captchaCode,HttpSession session){
        //参数校验
        //判断用户输入是否和session一致
        //判断是否在有效期内
        if(!StringUtils.hasLength(captchaCode)){
            return false;
        }
        String sessionCode = (String)session.getAttribute(captchaProperties.getSession().getCode());
        Long sessionDate = (Long)session.getAttribute(captchaProperties.getSession().getDate());
        if(captchaCode.equals(sessionCode) && sessionDate != null && System.currentTimeMillis()-sessionDate
                <  VALID_TIME ){

            return true;
        }
        return false;


    }

}

把配置项挪到配置⽂件中

captcha:
  width: 100
  height: 40
  session:
    code: SESSION_CODE
    date: SESSION_DATE

把⽣成的验证码存储在Session中,校验时使⽤

验证码配置项对应的Java对象 

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Configuration
@ConfigurationProperties(prefix = "captcha")
@Data
public class CaptchaProperties {
    private Integer width;
    private Integer height;
    private Session session;
@Data
   public static class Session{
        private String code;
        private String date;
    }
}

 6.5 调整前端代码

<script>
    
    $("#verificationCodeImg").click(function(){
      $(this).hide().attr('src', '/captcha/get?dt=' + new Date().getTime()).fadeIn();
    });

    $("#checkCaptcha").click(function () {

      $.ajax({
        type:"post",
        url: "/captcha/check",
        data:{
          captchaCode: $("#inputCaptcha").val()
        },
        success:function(result){
          if(result){
            location.href = "success.html";
          }else{
            alert("验证错误,码有问题!")
          }
        }
      });
        
      
    });

  </script>

6.6 验证结果

7. 总结 

1. properties 是以key=value的形式配置的键值类型的配置⽂件,yml使⽤的是树形配置⽅式.

2. 读取配置⽂件内容,使⽤ @Value 注解,注解内使⽤" ${} "的格式读取.

3. yml层级之间使⽤换⾏缩进的⽅式配置,key和value之间使⽤":"加空格的⽅式设置,并且空格不可省略.

4. properties 为早期并且默认的配置⽂件格式,其配置存在⼀定的冗余数据,使⽤yml可以很好的解决 数据冗余的问题,但不适合复杂配置.

5. yml可以和properties共存,但⼀个项⽬中建议使⽤⼀种配置类型⽂件

标签:配置文件,Spring,配置,Boot,验证码,properties,captcha,import,yml
From: https://blog.csdn.net/jj666mhhh/article/details/143393038

相关文章

  • Springboot在线智慧办公系统8t202(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表员工,会议,云文档,通讯录,打卡签到,汇报活动,请假条,工资单,费用报销,付款凭证,采购申请,项目审批报告,领导,出差活动开题报告内容一、研究背景随着信息技术的......
  • Springboot在线医院服务系统ow890(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,医生,护工,门诊信息,门诊预约,病历信息,药品信息,开药信息,病房信息,住院信息,护工安排,护工排班,评价医生,评价护工,病症介绍,问诊信息,药品入库,药品出库......
  • 十七:Spring Boot (2)-- spring-boot-starter-web 应用
    目录1.spring-boot-starter-web简介1.1作用与功能:1.2引入方式:1.3包含的核心依赖:2.自动配置原理3.内嵌Servlet容器3.1默认Tomcat配置:3.2替换容器(Jetty或Undertow):4.构建RESTfulWeb服务:4.1 什么是RESTfulWeb服务4.2创建REST控制器5.自动......
  • 复制下来就能跑:Java智能问答系统-介绍与代码实践 - 基于springboot_springai_国产大模
    本文的目的是在5分钟内能把智能问答系统的原理和实践讲明白代码可执行,复制粘贴即可,可以快速跑起来。智能问答系统简介智能问答系统是一种人工智能应用,它能够理解用户提出的问题,并通过自然语言处理技术来分析和理解问题的含义。随后,系统会在其知识库中搜索相关信息,以生成......
  • 计算机毕业设计 | SpringBoot慈善公益平台 爱心互助活动发布管理系统(附源码)
    1,项目介绍爱慈善公益平台(love-charity)是一个基于SpringBoot开发的标准JavaWeb项目。整体页面非常的简约大气,项目的完整度较高,是一个偏向公益论坛的系统。非常适合刚刚接触学习SpringBoot的技术小白学习,也非常适合学校中的项目答辩或者毕业设计。2,技术分析前端技术......
  • 计算机毕业设计 | SpringBoot智慧⾼校学术报告系统 AI写作大模型生成平台(附源码)
    1,项目介绍智慧⾼校学术报告系统是⼀个基于SpringBoot开发的标准JavaWeb项⽬。系统整体⻚⾯设计简约⼤⽓,巧妙融合了⽬前备受瞩⽬的AIGC⽣成式AI技术,选择了阿⾥通⽤千问⼤语⾔模型,以智能⽣成趣味报告标题和润⾊报告内容等⽅式,提升系统的整体品味。系统涵盖了丰富的......
  • spring6初体验(一、新建spring framework工程)
     初学spring6,最重要的是新建一个项目。本次工程使用IDEA2024编译器软件,同过maven进行构建。此博客可以创建多个spring项目(重复三过程),是多项目的创建方式一、准备一个空项目。二、为项目设置SDK点击文件选择项目设置,设置你的SDK 三、正式创建spring61.选择新建......
  • 详解Java之Spring MVC篇二
    目录获取Cookie/Session理解Cookie理解SessionCookie和Session的区别获取Cookie获取Session获取Header获取User-Agent获取Cookie/Session理解CookieHTTP协议自身是“无状态”协议,但是在实际开发中,我们很多时候是需要知道请求之间的关联关系的。上述图中的"令......
  • SpringBoot物流信息管理系统jeg7v 带论文文档1万字以上,文末可获取,
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统内容:用户,站点管理,网点信息,计费标准,订单信息,车辆信息开题报告内容一、研究背景与意义随着信息技术的飞速发展,物流行业正逐步向信息化、智能化转型。物......
  • 最新毕设-SpringBoot-求职推荐系统-55000(免费领项目)可做计算机毕业设计JAVA、PHP、爬
    摘 要当前社会竞争激烈,求职市场信息众多,但信息不对称、筛选困难的问题依然存在。因此,设计开发一款求职推荐系统是顺应时代发展的必然选择。该求职推荐系统利用Java编程语言,使用springboot技术框架,采取MySQL数据库实现系统的各项功能,具有便捷高效、安全友好的特点,促进求职招聘......