Java Spring配置

文章目录

Spring配置

配置文件

  1. 配置文件最重要的目的:解决硬编码(代码写死)的问题

比如在数据库中你的账号,密码是写死在你的代码中的,别人要使用你的数据库,就需要你把源码给别人,这是很麻烦的,所以才有了配置文件

  1. SpringBoot的配置文件,有三种格式:
    (1) properties
    (2) yaml
    (3) yml(yaml的简写)
    yaml和yml其实是同一个文件,只是后缀名不一样

事实上:SpringBoot只支持3个文件

1.application.properties

2.application.yaml

3.application.yml

企业中更多的是使用application.yml

但是idea会给我们自动配置application.properties

  1. 如果项目中,同时存在properties和yml配置文件,properties的优先级更高
    同时存在时,两个文件都生效,如果两个文件中,都包含同一个配置,以properties为主

企业开发中,通常只使用其中一个文件

properties的配置

注释通常使用快捷键:ctrl + / == # 或者是 == //

  1. properties的基本语法:

key value的形式,以 = 分割

key 的格式建议是小写,单词之间使用 . 分割

properties文件的配置:

java 复制代码
// # server.port=8080
// #
// #server.port = 9090
# 配置数据库连接信息
server.port=8080
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root

// #自定义配置
// demos.key1 = hello,properties
  1. properties文件获取属性值:

如果去掉$,就会把 " "中的值赋值给当前变量

这里是赋值给key,如果没有去掉 ,就是拿到配置文件中的值,** 就相当于是取地址**

自定义配置:

  1. properties的缺点分析:
    这些配置文件比较冗余

yml文件

  1. yml文件比较严格,value(值前面必须要有一个空格)
  2. yml文件的配置:
java 复制代码
# 修改端口号
server:
  port: 9091
# 数据相关的配置
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=false
    username: root
    password: root
  1. banner.txt是Spring的广告条配置,也可以自己修改这些广告条配置

下面这个就是Spring默认的广告条:

  1. 想要查看 Spring Boot 更多系统配置项,访问官网:查看更多的配置文件

  2. 在线banner.txt生成网站:banner生成

  3. yml文件如何获取属性值:

  4. 初始化方法打印配置文件中的内容:

java 复制代码
domes:
  key1: hello,key1
  key2: key2
  key3: key3

    // Spring在对外提供方法之前,先进行初始化打印
    // 在tomcat启动前进行打印,不用在网页通过url上进行打印
    // 在初始化的时候进行打印
    @PostConstruct
    public void init(){
        System.out.println("key1: " + key1);
        System.out.println("key2: " + key2);
        System.out.println("key3: " + key3);
    }
  1. 配置文件会自动地进行类型的转换:

  2. 表明key3是一个null,而不是一个空串

  3. 表明key3是一个空串,而不是null

表示一个空串,建议写成如下这样:

java 复制代码
// 这两种都可以表示空串
key3: ''
key3: ""
// 不建议写成如下这样
key3: 

总结:yml文件内容的特殊配置

  1. 使用单引号和双引号的区别:
java 复制代码
string:
str1: Hello \n Spring Boot.
str2: 'Hello \n Spring Boot.'
str3: "Hello \n Spring Boot."

转义的意思,每个人的理解都不一样,如果面试官认为 \n 是换行为转义的,没有换行就是没有转义的,也是可以的

配置对象

  1. 配置,配置内容的读取,注入

    Student类:
java 复制代码
// @Component交给Spring进行管理
@Component
// 让配置文件中的对象和我们本身的对象进行映射
// @ConfigurationProperties从配置文件中读取数据,并且对属性进行赋值
// 读取以student为前缀的数据
@ConfigurationProperties(prefix = "student")
// @Data帮我们进行写get和set方法
@Data
public class Student {
    private Integer id;
    private String name;
    private Integer age;
}

配置集合

  1. 配置文件也可以配置list集合
java 复制代码
dbtypes:
name:
   - mysql
   - sqlserver
   - db2
  1. yml配置集合的过程:


    在YmlController文件中进行打印:

配置map

  1. 过程:

yml的优缺点

  1. 优点和缺点:
  2. 缺点的例子:
    如果是复杂的配置,yml的可读性就比较差了

    总结:
    (1) 学习修改项目的端口号
    (2) 学习properties和yml的语法
    (3) 使用yml 配置对象,集合,map

yml也可以使用 . 进行分割

综合性练习

验证码的案例

  1. 验证码的插件:Kaptcha 插件,根据后端生成的验证码

  2. 验证码的实现:

    客户端和服务器端都可以生成(主要的思路):

    (1) 生成内容(根据词库)

    (2) 生成干扰项

    (3) 二者组成一个图片,返回

目的:重新获取请求,不让浏览器进行缓存,目的是每次都请求,都获取不一样的验证码

  1. get&post的区别:
    (1) 查询的字符串的位置(get在url中,post在正文中,但是不是绝对的)
    (2) get 有可能缓存(可能页面没有改变时,发现和上次一样就不进行重新获取页面,就进行拿取上次的缓存了)
  2. 需要引入的jar包

可以再网页上显示一个变化的验证码

java 复制代码
        <dependency>
            <groupId>com.oopsguy.kaptcha</groupId>
            <artifactId>kaptcha-spring-boot-starter</artifactId>
            <version>1.0.0-beta-2</version>
        </dependency>
  1. 验证码的配置文件
java 复制代码
kaptcha:
  image:
    width: 100
    height: 60
  textproducer:
    font:
      size: 36
  items:
    # home captcha
    admin:
      path: /admin/captcha
      session:
        key:  HOME_KAPTCHA_SESSION_KEY
        date: HOME_KAPTCHA_SESSION_DATE

显示的效果:

  1. 后端进行验证码的验证工作:
java 复制代码
package com.rzj.demo.controller;

import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpSession;
import java.util.Date;

@RequestMapping("/admin")
@RestController
public class CaptchaController {
    // 企业标准:
    // 常量定义: key: 单词全部大写,单词之间使用下划线分割
    //         value: 通常是小写,以下划线分割
    private final static String KAPTCHA_SESSION_KEY = "HOME_KAPTCHA_SESSION_KEY";
    // 使用毫秒,定义一分钟就过期,时间通常使用表达式写
    private static final Long SESSION_TIMEOUT = 60 * 1000L;
    private static final String KAPTCHA_SESSION_DATE = "HOME_KAPTCHA_SESSION_DATE";
    // 进行验证码的验证
    // 验证成功: true
    // 验证失败: false

    /*
        1. 从Session中获取到后端生成的验证码
        2. 对比前端传过来的验证码是否和Session中的验证码是一样的
     */
    @RequestMapping("/check")
    public Boolean check(String captcha, HttpSession session){
         // 前端传过来的验证码是空的
        if(!StringUtils.hasLength(captcha)){
            return false;
        }
        // 1. 从Session获取验证码
        String saveCaptcha =(String)session.getAttribute(KAPTCHA_SESSION_KEY);
        Date saveDate = (Date) session.getAttribute(KAPTCHA_SESSION_DATE);
        // 2. 比对验证码
        if(captcha.equals(saveCaptcha)){
            // 3. 比对日期
            // 如果未定义日期就永久生效,日期永远为null
            if(saveDate == null || System.currentTimeMillis() - saveDate.getTime() < SESSION_TIMEOUT){
                return true;
            }
        }
        return false;
    }
}

断点快捷键:

F8 下一步

效果展示:

成功跳转:

跳转失败:

相关推荐
咖啡Beans15 小时前
SpringBoot2.7集成Swagger3.0
java·swagger
一念&15 小时前
每日一个C语言知识:C 数组
c语言·开发语言·算法
小年糕是糕手15 小时前
【数据结构】单链表“0”基础知识讲解 + 实战演练
c语言·开发语言·数据结构·c++·学习·算法·链表
聪明的笨猪猪15 小时前
Java JVM “垃圾回收(GC)”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
疯狂吧小飞牛15 小时前
Lua C API 中的 lua_rawseti 与 lua_rawgeti 介绍
c语言·开发语言·lua
Tony Bai15 小时前
【Go 网络编程全解】06 UDP 数据报编程:速度、不可靠与应用层弥补
开发语言·网络·后端·golang·udp
半夏知半秋15 小时前
lua对象池管理工具剖析
服务器·开发语言·后端·学习·lua
大飞记Python15 小时前
Windows10停服!7-Zip被爆组合漏洞|附安全指南
开发语言
浪裡遊16 小时前
MUI组件库与主题系统全面指南
开发语言·前端·javascript·vue.js·react.js·前端框架·node.js
Moniane16 小时前
时序数据库全面重构指南
java·后端·struts