最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaEE之SpringBoot配置文件的使用及說明

 更新時間:2026年01月08日 09:26:05   作者:蘇小瀚  
本文主要介紹了Spring Boot中配置文件的使用,包括application.properties和application.yml兩種格式的配置文件的語法、讀取方式以及優(yōu)缺點,同時,還通過一個驗證碼案例練習(xí),展示了如何使用Spring Boot和hutool工具類包實現(xiàn)驗證碼功能

1. 配置文件的作用

我們在使用Spring Boot框架時候,內(nèi)置了Tomcat,啟動端口號為8080,如果該端口號被占用,此時就可以在配置文件中設(shè)置指定端口號,配置文件里面也可以設(shè)置數(shù)據(jù)庫的連接信息等內(nèi)容。

2. 配置文件的格式

Spring Boot提供了三種配置文件的格式:

  • application.properties
  • application.yaml
  • application.yml

這里的yml是yaml的縮寫,我們一般使用yml后綴的配置文件,這兩種配置文件的語法一樣。

如果一個項目同時存在properties和yml兩種配置文件,如果配置信息沖突會以properties配置文件的信息為主。

3. properties配置文件介紹

3.1 properties語法

該配置文件里面的信息都是以 鍵值對的形式存在的,中間使用=連接,如果要注釋,使用#,每個單詞需要小寫,并且每個單詞之間使用 . 來分割。

spring.application.name=spring-ioc-demo
#配置項目端口號
server.port=8090

我們還可以自定義配置,自己起一個建名,對應(yīng)一個值。

key=1

3.2 讀取配置文件

我們可以在Java代碼中讀取配置文件中的內(nèi)容,我們需要使用@Value注解,然后搭配${}使用來獲取配置信息:

@RequestMapping("/proper")
@ResponseBody
@Controller
public class propertiesController {
    @Value("${key}")
    private String key;

    @RequestMapping("/read")
    public String getValue() {
        return "獲取配置信息" + key;
    }
}

如果我們想要直接在控制臺看到結(jié)果,我們可以使用@PostConstruct注解,這是一個初始化注解,就是在初始化時候,執(zhí)行該注解的方法。

@RequestMapping("/proper")
@ResponseBody
@Controller
public class propertiesController {
    @Value("${key}")
    private String key;

    @PostConstruct
    public void getValue1() {
        System.out.println("獲取配置信息: " + key);
    }
}

3.3. properties的缺點

spring.datasource.url=jdbc:mysql://localhost:3306/your_database_name?useSSL=false&serverTimezone=UTC
spring.datasource.username=your_username
spring.datasource.password=your_password

這是數(shù)據(jù)庫的配置信息,我們可以發(fā)現(xiàn)通過properties的語法來寫的配置信息會有很多冗余的內(nèi)容,此時就可以使用yml配置文件來解決這個問題。

4. yml配置文件介紹

4.1 yml語法

yml的語法是:key和value之間通過 英文冒號 + 空格 分開,然后設(shè)置配置文件,不同單詞之間會換行:

server:
  port: 8080
key: 1

比如上面的數(shù)據(jù)庫配置文件在yml里面的格式就是:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/your_database_name?useSSL=false&serverTimezone=UTC
    username: name
    password: password

4.2 使用yml配置不同的數(shù)據(jù)類型

# 字符串
string:
  value: hello
# 布爾值
boolean:
  value: true
# 整數(shù)
int:
  value: 11
# 浮點數(shù)
float:
  value: 3.1415
# null ~表示null
null2:
  value: ~
# 空字符串 可以使用'' 或者 ""
empty:
  value: ''

4.3 yml配置的讀取(使用到初始化注解@PostConstruct)

yml的讀取跟properties一樣都是使用@Value注解來讀取的·。

yml配置文件里面的代碼:

name: zhangsan
age: 12
@ResponseBody
@Controller
public class ymlController {
    @Value("${name}")
    private String name;
    @Value("${age}")
    private int age;

    @PostConstruct
    public void getYml() {
        System.out.println("name=" + name + ", age=" + age);
    }
}

4.4 配置對象(@ConfigurationProperties注解)

yml還可以設(shè)置對象:

person:
  id: 1
  name: zhangsan
  age: 20

Person類:

通過@ConfigurationProerties注解來將配置文件里面的對象屬性放到該類對應(yīng)的屬性中,并使用@Configuration注解將該類交給容器管理,

@ConfigurationProperties(prefix = "person")
@Configuration
@Data
public class Person {
    private int id;
    private String name;
    private int age;
}

使用該類:

通過@Autowied注解注入person對象

@ResponseBody
@Controller
public class ymlController {
    @Autowired
    private Person person;

    @PostConstruct
    public void getYml() {
        System.out.println("person: " + person);
    }
}

4.5 配置集合

yml配置代碼:

#集合
dbtypes:
  name:
    - hello1
    - hello2
    - hello3

這里創(chuàng)建一個類,包含集合屬性來接受。

@ConfigurationProperties(prefix = "dbtypes")
@Configuration
@Data
public class DbTypes {
    private List<String> name;
}

最后可以成功的使用該對象:

@ResponseBody
@Controller
public class ymlController {
    @Autowired
    private DbTypes dbTypes;

    @PostConstruct
    public void getYml() {
        System.out.println("dbTypes: " + dbTypes);
    }
}

4.6 配置Map

map的配置文件:

#Map
dbtypes:
  ball:
    k1: v1
    k2: v2
    k3: v3

使用Map類型來接收:

@ConfigurationProperties(prefix = "dbtypes")
@Configuration
@Data
public class DbTypes {
    private Map<String, String> ball;
}

最后成功注入:

@ResponseBody
@Controller
public class ymlController {
    @Autowired
    private DbTypes dbTypes;

    @PostConstruct
    public void getYml() {
        System.out.println("dbTypes: " + dbTypes);
    }
}

4.7 yml的優(yōu)缺點

優(yōu)點:

  • 可讀性好,寫法簡單,容易理解。
  • 可以適用于多種編程語言。
  • 可以表示更多的數(shù)據(jù)類型,比如:對象,集合,Map等類型。

缺點:

  • 對于一些比較復(fù)雜的配置文件,編寫也比較困難,需要注意格式,可讀性也會差點。
  • 對格式要求很嚴(yán)格。

5. 驗證碼案例練習(xí)

5.1 需求

需要我們輸入驗證碼,然后點擊提交,驗證碼匹配就跳轉(zhuǎn)到新頁面,不正確就彈窗。

5.2 hutool工具介紹

在我們實現(xiàn)驗證碼功能之前,先介紹一個Java開發(fā)工具類包,這里面包含了很多的工具類,通過靜態(tài)方法實現(xiàn),也包含生成驗證碼的工具類

官網(wǎng)如下:官網(wǎng)

我們就可以使用它提供的方法來生成驗證碼,之類需要引入依賴,在官方文檔中有,我們使用下面的就行。

生成驗證碼的類包含很多方法:

5.3 接口定義

生成驗證碼:

  • 請求:/captcha/getCaptcha
  • 響應(yīng):驗證碼的圖片內(nèi)容

檢驗驗證碼:

  • 請求:/captcha/check
  • 請求參數(shù):captcha= 用戶輸入的驗證碼
  • 響應(yīng):true或者false

5.4 后端代碼實現(xiàn)

生成驗證碼接口和判斷驗證碼是否正確的接口代碼:

package com.sias.captcha.controller;

import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.ShearCaptcha;
import com.sias.captcha.model.CaptchaProperties;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.io.IOException;
import java.util.Date;

@RequestMapping("/captcha")
@Controller
@ResponseBody
public class CaptchaController {

    @Autowired
    private CaptchaProperties captchaProperties;

    //定義過期時間(1分鐘)
    private static final Long VALID_TIME = 60 * 1000L;

    @RequestMapping("/getCaptcha")
    public void getCaptcha(HttpServletResponse response, HttpSession session) {
        //設(shè)置響應(yīng)數(shù)據(jù)類型
        response.setContentType("image/jpeg");
        try {
            //生成驗證碼
            //定義圖形驗證碼的長、寬、驗證碼字符數(shù)、干擾線寬度
            ShearCaptcha captcha = CaptchaUtil.createShearCaptcha(captchaProperties.getWidth(), captchaProperties.getHeight(), 4, 4);
            String code = captcha.getCode();
            session.setAttribute(captchaProperties.getSession().getKey(), code);
            session.setAttribute(captchaProperties.getSession().getDate(), new Date());
            //將驗證碼圖片放到響應(yīng)中
            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;
        }
        String code = (String)session.getAttribute(captchaProperties.getSession().getKey());
        Date date = (Date)session.getAttribute(captchaProperties.getSession().getDate());

        if(captcha.equalsIgnoreCase(code) && date != null &&
                System.currentTimeMillis() - date.getTime() < VALID_TIME) {
            return true;
        }
        return false;
    }
}

這里使用了配置文件來設(shè)置一些數(shù)據(jù),比如,驗證碼框的長和寬,驗證碼的內(nèi)容和生成驗證碼的時間存在session里面的key名字。這里我們就需要創(chuàng)建一個類來管理這些屬性。

注意:

這里的內(nèi)部類要使用靜態(tài)的,因為我們把CaptchaProrerties類交給Spring管理,如果內(nèi)部類是非靜態(tài)的,創(chuàng)建就依賴于外部類,此時外部類對象還沒有創(chuàng)建,無法創(chuàng)建內(nèi)部類對象。

@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;
    }
}

配置文件里面的內(nèi)容:

captcha:
  width: 150
  height: 50
  session:
    key: CAPTCHA_SESSION_KEY
    date: CAPTCHA_SESSION_DATE

5.5. 前端代碼實現(xiàn)

index.html頁面:

<!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>

success.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>

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 深入理解spring boot 監(jiān)控

    深入理解spring boot 監(jiān)控

    今天通過本文給大家介紹關(guān)于spring boot 監(jiān)控的相關(guān)知識,引入jar包的實例代碼文中也給大家詳細(xì)介紹,對spring boot 監(jiān)控相關(guān)知識感興趣的朋友一起看看吧
    2021-10-10
  • SpringBoot中如何統(tǒng)一接口返回與全局異常處理詳解

    SpringBoot中如何統(tǒng)一接口返回與全局異常處理詳解

    全局異常處理是個比較重要的功能,一般在項目里都會用到,這篇文章主要給大家介紹了關(guān)于SpringBoot中如何統(tǒng)一接口返回與全局異常處理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • 詳解SpringBoot+Mybatis實現(xiàn)動態(tài)數(shù)據(jù)源切換

    詳解SpringBoot+Mybatis實現(xiàn)動態(tài)數(shù)據(jù)源切換

    這篇文章主要介紹了詳解SpringBoot+Mybatis實現(xiàn)動態(tài)數(shù)據(jù)源切換,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • java中char類型轉(zhuǎn)換成int類型的2種方法

    java中char類型轉(zhuǎn)換成int類型的2種方法

    這篇文章主要給大家介紹了關(guān)于java中char類型轉(zhuǎn)換成int類型的2種方法,因為java是一門強(qiáng)類型語言,所以在數(shù)據(jù)運(yùn)算中會存在類型轉(zhuǎn)換,需要的朋友可以參考下
    2023-07-07
  • Java中四種訪問控制權(quán)限解析(private、default、protected、public)

    Java中四種訪問控制權(quán)限解析(private、default、protected、public)

    java當(dāng)中有4種訪問修飾限定符privat、default(默認(rèn)訪問權(quán)限),protected以及public,本文就詳細(xì)的介紹一下這四種方法的具體使用,感興趣的可以了解一下
    2023-05-05
  • springboot+camunda實現(xiàn)工作流的流程分析

    springboot+camunda實現(xiàn)工作流的流程分析

    Camunda是基于Java語言,支持BPMN標(biāo)準(zhǔn)的工作流和流程自動化框架,并且還支持CMMN規(guī)范,DMN規(guī)范,本文給大家介紹springboot+camunda實現(xiàn)工作流的流程分析,感興趣的朋友一起看看吧
    2021-12-12
  • Java數(shù)據(jù)結(jié)構(gòu)之實現(xiàn)哈希表的分離鏈接法

    Java數(shù)據(jù)結(jié)構(gòu)之實現(xiàn)哈希表的分離鏈接法

    今天給大家?guī)淼氖顷P(guān)于Java數(shù)據(jù)結(jié)構(gòu)的相關(guān)知識,文章圍繞著Java哈希表的分離鏈接法展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • SpringBoot整合Jasypt使用自定義注解+AOP實現(xiàn)敏感字段加解密

    SpringBoot整合Jasypt使用自定義注解+AOP實現(xiàn)敏感字段加解密

    這篇文章主要為大家詳細(xì)介紹了SpringBoot整合Jasypt使用自定義注解+AOP實現(xiàn)敏感字段加解密的相關(guān)知識,文中的示例代碼講解詳細(xì),有需要的小伙伴可以了解下
    2025-09-09
  • Springboot+Mybatis+logback打印sql腳本日志實現(xiàn)過程

    Springboot+Mybatis+logback打印sql腳本日志實現(xiàn)過程

    在SpringBoot項目中,通過配置`application.yml`和`logback-spring.xml`文件,可以在控制臺和日志文件中打印SQL腳本日志,關(guān)鍵在于配置logback-spring.xml中的`name`屬性為mapper類所在路徑
    2026-01-01
  • Java基礎(chǔ)-Java編程語言發(fā)展史

    Java基礎(chǔ)-Java編程語言發(fā)展史

    這篇文章主要介紹了Java基礎(chǔ)-Java編程語言發(fā)展簡史,Java源自Sun公司的一個叫Green的項目,其原先的目的是為家用電子消費(fèi)產(chǎn)品開發(fā)一個分布式代碼系統(tǒng),這樣就可以將通信和控制信息發(fā)給電冰箱、電視機(jī)、烤面包機(jī)等家用電器,對它們進(jìn)行控制和信息交流,需要的朋友可以參考一下
    2022-01-01

最新評論

乌鲁木齐县| 体育| 剑阁县| 榆社县| 和顺县| 沙坪坝区| 平顶山市| 师宗县| 乐山市| 景谷| 孝感市| 乐至县| 息烽县| 双柏县| 新田县| 绥阳县| 泽库县| 弋阳县| 铜鼓县| 庆城县| 山阴县| 锡林郭勒盟| 溧阳市| 正宁县| 荔波县| 理塘县| 新津县| 万年县| 微博| 潞西市| 宜都市| 泰宁县| 盘山县| 阿克陶县| 盐边县| 缙云县| 三河市| 高密市| 秦皇岛市| 宁乡县| 布尔津县|