当前位置: 首页 > news >正文

Java Spring配置

文章目录

  • Spring配置
    • 配置文件
      • properties的配置
      • yml文件
      • 配置对象
      • 配置集合
      • 配置map
      • yml的优缺点
    • 综合性练习
      • 验证码的案例

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

// # 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文件的配置:
# 修改端口号
server:port: 9091
# 数据相关的配置
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=falseusername: rootpassword: root

在这里插入图片描述

  1. banner.txt是Spring的广告条配置,也可以自己修改这些广告条配置

下面这个就是Spring默认的广告条:
在这里插入图片描述
4. 想要查看 Spring Boot 更多系统配置项,访问官网:查看更多的配置文件
5. 在线banner.txt生成网站:banner生成
6. yml文件如何获取属性值:
在这里插入图片描述
7. 初始化方法打印配置文件中的内容:

domes:key1: hello,key1key2: key2key3: key3// Spring在对外提供方法之前,先进行初始化打印// 在tomcat启动前进行打印,不用在网页通过url上进行打印// 在初始化的时候进行打印@PostConstructpublic void init(){System.out.println("key1: " + key1);System.out.println("key2: " + key2);System.out.println("key3: " + key3);}

在这里插入图片描述
8. 配置文件会自动地进行类型的转换:
在这里插入图片描述
9. 表明key3是一个null,而不是一个空串
在这里插入图片描述
10. 表明key3是一个空串,而不是null
表示一个空串,建议写成如下这样:

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

在这里插入图片描述
总结:yml文件内容的特殊配置
在这里插入图片描述
11. 使用单引号和双引号的区别:

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

转义的意思,每个人的理解都不一样,如果面试官认为 \n 是换行为转义的,没有换行就是没有转义的,也是可以的
在这里插入图片描述

配置对象

  1. 配置,配置内容的读取,注入
    在这里插入图片描述
    Student类:
// @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集合
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包

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

        <dependency><groupId>com.oopsguy.kaptcha</groupId><artifactId>kaptcha-spring-boot-starter</artifactId><version>1.0.0-beta-2</version></dependency>

在这里插入图片描述
5. 验证码的配置文件

kaptcha:image:width: 100height: 60textproducer:font:size: 36items:# home captchaadmin:path: /admin/captchasession:key:  HOME_KAPTCHA_SESSION_KEYdate: HOME_KAPTCHA_SESSION_DATE

显示的效果:
在这里插入图片描述
6. 后端进行验证码的验证工作:

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. 比对日期if(saveDate == null || System.currentTimeMillis() - saveDate.getTime() < SESSION_TIMEOUT){return true;}}return false;}
}

断点快捷键:
F8 下一步

效果展示:
在这里插入图片描述
成功跳转:
在这里插入图片描述
跳转失败:
在这里插入图片描述

http://www.dtcms.com/a/490706.html

相关文章:

  • 【多进线程】python多进线程与通信
  • 低代码新建表单实操:纯表单 / 列表表单配置 + 表名避坑
  • 前端做数据表格的网站网站建设与运营市场风险
  • 从入门到精通:深度探索RT-Thread物联网操作系统
  • GPUStack:开源GPU集群管理工具,解锁AI模型高效运行新可能
  • LeetCode算法日记 - Day 74: 按摩师、打家劫舍II
  • centos离线包获取-附centos7主流离线包资源
  • 电子商务网站建设哪好网站内链建设
  • 网站建设的主题软媒win7优化大师
  • 人力网站建设的建议软文平台发布
  • 【35】MFC入门到精通——MFC运行 不显示对话框 MFC界面不显示
  • 开源 C++ QT QML 开发(二十一)多媒体--视频播放
  • PMBT2222A,215 开关晶体管功率二极管 NXP安世半导体 音频放大电路 LED驱动 应用
  • 大语言模型(LLM)入门笔记:嵌入向量与位置信息
  • 网站设计济南做网站的一定要开80或8080端口
  • 【Spring Boot从入门到精通】原理、实战与最佳实践
  • uni-app 入门学习教程,从入门到精通,uni-app 基础知识详解 (2)
  • Pyspark分布式访问NebulaGraph图数据库
  • FPGA----petalinux的Ubuntu文件系统移植
  • 宜昌网站建设厂家wordpress 扁担
  • TensorFlow2 Python深度学习 - 卷积神经网络示例2-使用Fashion MNIST识别时装示例
  • Eureka: Human-Level Reward Design via Coding Large Language Models 译读笔记
  • 随时随地看监控:我的UptimeKuma远程访问改造记
  • 关于网站篡改应急演练剧本编写(模拟真实场景)
  • 河北省企业网站建设公司企业管理系统软件有哪些
  • JVM的classpath
  • RVO优化
  • ethercat 环型拓扑(Ring Topology)
  • 颠覆PD快充、工业控制与智能家电等领域高CTR,高隔离电压高可靠性光电耦合器OCT1018/OCT1019
  • 【机器学习入门】8.1 降维的概念和意义:一文读懂降维的概念与意义 —— 从 “维度灾难” 到低维嵌入