【JavaEE 进阶(四)】SpringBoot配置文件

❣博主主页: 33的博客
▶️文章专栏分类:JavaEE◀️
🚚我的代码仓库: 33的代码仓库🚚
🫵🫵🫵关注我带你了解更多进阶知识

在这里插入图片描述

1.前言

计算机上有数以千计的配置⽂件,我们使⽤的绝⼤多数软件,如浏览器,微信,Idea, 甚至电脑,⼿机,都离不开配置⽂件.我们可能永远不会直接与其中的⼤部分⽂件打交道,但它们确实以不同的形式散落在我们的计算机上,例如C:\Users,C:\Windows⽂件夹,以及各种*.config,*.xml⽂件配置⽂件主要是为了解决硬编码带来的问题,把可能会发⽣改变的信息,放在⼀个集中的地方,当我们启动某个程序时,应用程序从配置⽂件中读取数据,并加载运行,那么接下来我们就学习SpringBoot配置文件。

2.配置文件快速入手

其实在之前我们已经接触过配置文件了,当启动服务器端口冲突的时候,我们就可以通过配置文件解决,只需要把配置文件中的端口号换成其他端口号即可。
修改application.properties文件

server.port=9090

在这里插入图片描述

3.配置文件格式

SpringBoot配置文件有三种格式

  • application.properties
  • application.yml
  • application.yaml
    yml是yaml的简写,在实际开发中使用频率较高。当程序启动时,SpringBoot会自动从resources路径中,找到 application.properties、application.yml或者 application.yaml的文件进行加载。
    注意
    .properties与.yml可以同时存在,当并存时,两个配置都会加载,如果配置文件有冲突,会以 .properties为主。

4.properties

4.1基本语法

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

server.port=8080

4.2读取配置文件

可以使⽤@Value 注解使⽤" ${} "的格式读取,如下代码所示:

//配置文件中
mykey.key1 = book
//其他类中
 @Value("${mykey.key1}")
 private String key1;

4.3缺点分析

properties 配置是以key-value的形式配置的,会有许多冗余信息:
在这里插入图片描述
如果要解决信息的冗余就可以使用yml配置⽂件。

5.yml配置文件

5.1基本语法

基础语法是:“key:value”.
key和value之间必须使用英文冒号+空格!!!
在这里插入图片描述

5.2配置读取

//配置文件
string:
 hello: book
//其他类
  @Value("${string.hello}")
 private String hello;

字符串默认不⽤加上单引号或者双引号。
单引号会转义特殊字符,使其失去特殊功能,始终是⼀个普通的字符串.
双引号不会转义字符串⾥⾯的特殊字符,特殊字符会表⽰本⾝的含义

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

在这里插入图片描述

5.3配置对象

 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.4配置集合

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

5.5配置Map

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

5.6yml优缺点

优点:
1.可读性⾼,写法简单, 易于理解
2.⽀持更多的数据类型,可以简单表达对象,数组,List,Map等数据形态

缺点:
1.不适合写复杂的配置文件
2. 对格式有较强的要求

6.验证码案例

博主使用的是Hutool工具库其中包含了图片验证码,只需要引入对应的依赖即可。

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.26</version>
</dependency>

配置文件

spring:
  application:
   name: captcha
captcha:
  width: 200
  height: 100
  session:
    key: "captcha_session_key"
    date: "captcha_session_date"

captcha类

package com.example.captcha.model;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@ConfigurationProperties("captcha")
@Component
@Data
public class Captcha {
    private Integer width;
    private Integer height;
    private Session session;
    @Data
    public static class Session{
      private  String key;
      private  String date;
    }
}

CaptchaController类

package com.example.captcha.Controller;

import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.LineCaptcha;
import com.example.captcha.model.Captcha;
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 CaptchaController {
    private final static long session_volid_timeout=60*1000;
    @Autowired
    private Captcha captcha;
    @RequestMapping("/get")
    public void getCaptcha(HttpSession session,HttpServletResponse response){
        LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(captcha.getWidth(), captcha.getHeight());
        try {
            lineCaptcha.write(response.getOutputStream());
            session.setAttribute(captcha.getSession().getKey(),lineCaptcha.getCode());
            session.setAttribute(captcha.getSession().getDate(),System.currentTimeMillis());
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    @RequestMapping("/check")
    public Boolean checkCaptcha(String inputCode,HttpSession session){
        if(!StringUtils.hasLength(inputCode)){
            return false;
        }
        String key=(String) session.getAttribute(captcha.getSession().getKey());
        long date=(long)session.getAttribute(captcha.getSession().getDate());
        if(inputCode.equals(key)&&key!=null&&System.currentTimeMillis()-date< session_volid_timeout){
            return  true;
        }
        return false;
    }
}

7.总结

properties 是以key=value的形式配置的键值类型的配置⽂件,yml使⽤的是树形配置⽅式.读取配置⽂件内容,使用@Value 注解,注解内使⽤"${} “的格式读取. yml层级之间使⽤换⾏缩进的⽅式配置,key和value之间使⽤”:"(英⽂冒号)加空格的⽅式设置,并且空格不可省略. properties 为早期并且默认的配置⽂件格式,其配置存在⼀定的冗余数据,使⽤yml可以很好的解决数据冗余的问题,但不适合复杂配置.

下期预告:SpringBoot日志

  • 53
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 43
    评论
评论 43
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值