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

Java学习Day56:暴打舔狗!(SpringBoot)

1.springboot简介

  • 核心能力:Spring容器、日志、自动配置AutoCongfiguration、Starters

  • web应用的能力:MVC、嵌入式Web服务器

  • 数据访问(持久化):关系型数据库、非关系型数据库

  • 强大的整合其他技术的能力

    • 只要是Java中牛逼的技术,在SpringBoot中都有良好的支持

  • 测试:强悍的应用测试

2.springboot版本问题

Spring Boot 的3.1.0正式发行版,使用Java 17,对应的Spring版本是6.0.9。

Servlet容器版本:

SpringBoot 支持如下的嵌入式Servlet容器,Spring Boot应用程序最低支持到Servlet 3.1的容器。

NameServlet Version
Tomcat10.16.0
Tomcat 9.04.0
Jetty 9.43.1
Undertow 2.04.0

3.springboot快速入门

  1. 创建Maven工程(使用java即可,使用springboot可能会出现版本问题)

  2. pom.xml文件中配置起步依赖

 <!--继承SpringBoot父POM文件-->

<!--web 开发的相关依赖-->

 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.0</version></parent>
  1. 编写SpringBoot启动引导类

@Configuration//配置类
@EnableAutoConfiguration//开启自动配置
@ComponentScan//包扫描
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class,args);}
}
  1. 编写Controller

  2. 访问http://localhost:8080/hello测试

4、SpringBoot原理分析

1.starters

==starters是依赖关系的整理和封装==。是一套依赖坐标的整合,可以让导入应用开发的依赖坐标更方便。

starter本质是一个pom.xml文件,里存储了很多坐标

利用依赖传递的特性:帮你把依赖打包了,starter

有了这些Starters,你获得Spring和其整合的所有技术的一站式服务。无需配置(自动配置)、无需复制粘贴依赖坐标,一个坐标即可完成所有入门级别操作。举例:Web开发,只需要导入spring-boot-starter-web

2.依赖管理的原理

BOM(Bill of Materials)依赖清单,是由Maven提供的功能,<dependencyMangament>

BOM内定义成套相互兼容的jar包版本集合

使用依赖时,只需依赖该BOM文件,即可放心的使用清单内的依赖jar包,且无需版本号。

BOM设计初衷:方便维护项目依赖版本升级

依赖管理(Dependency Management)

  1. 继承了spring-boot-starter-parent的好处和特点

    • 默认编译Java 17

    • 默认编码UTF-8

    • 通过spring-boot-denpendencies的pom管理所有公共Starter依赖的版本

    • spring-boot-denpendencies通过Maven的一个<dependency management>特性来实现版本管理

    • 随用随取,不用继承父类所有的starter依赖。

  2. POM文件中的Maven插件

    <!-- 作用:将一个SpringBoot的工程打包成为可执行的jar包 -->
    <build> 
    <plugins><plugin> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-maven-plugin</artifactId> 
    </plugin> 
    </plugins> 
    </build>
    

    如果想使用父pom文件中的任何插件,无需配置即可使用

3.自动配置(AutoConfiguration)原理

SpringBoot采用约定大于配置设计思想,将所有可能遇到的配置信息提前配置好,写在自动配置的jar包中。每个Starter基本都会有对应的自动配置。

SpringBoot帮我们将配置信息写好,存放在一个jar包中:spring-boot-autoconfigure-3.1.0.jar

jar包里,存放的都是配置类,让配置类生效的"规则类"

查看启动类注解@SpringBootApplication

追踪步骤:

  1. @SpringBootApplication

  2. @EnableAutoConfiguration

  3. @Import({AutoConfigurationImportSelector.class})

  4. org.springframework.boot.autoconfigure.AutoConfiguration.imports

  5. org.springframework.boot.autoconfigure.web.servlet.EmbeddedWebServerFactoryCustomizerAutoConfiguration

分析小节:

  • Starter:是一套依赖关系的整理和封装

    • 让我们更加专注于业务开发,无需关心依赖导入,依赖冲突,及依赖的版本

    • 在pom文件导入starter既可使用对应的功能

  • 依赖管理:依赖管理是对依赖坐标的抽取和复用,统一管理依赖坐标的版本。

    • 实现了依赖坐标的版本管理

    • starter随用随取

    • 避免了继承所有父类starter的依赖的臃肿

    • 避免了记忆所有starter的麻烦。

  • 自动配置:预先写入配置类,封装到AutoConfiguration的jar包中,按需求加载配置信息。

    • 基于约定大于配置的设计思想

    • 极大的降低了Spring应用配置的复杂度

    • 代码实现原理:@SpringBootApplication-->@EnableAutoConfiguration-->@AutoConfigurationPackage(spring-boot-autoconfigure-3.1.0.jar)

    • 原理的核心在于:spring-boot-autoconfigure-3.1.0.jar包

  • 当Spring Boot应用启动时,@EnableAutoConfiguration注解中的@Import(AutoConfigurationImportSelector.class)会导入AutoConfigurationImportSelector类。
  • AutoConfigurationImportSelector类的selectImports方法会扫描所有具有META-INF/spring.factories文件的jar包,并读取这些文件中与EnableAutoConfiguration对应的配置类列表。
  • 这些配置类(通常是xxxAutoConfiguration形式的类)会被加载到Spring容器中,作为自动配置的Bean。

5.SpringBoot的配置文件

yml配置文件规则:

  1. 大小写敏感

  2. 数据值前边必须有空格,作为分隔符

  3. 使用缩进表示层级关系:

  4. 缩进不允许使用tab,只允许空格

  5. 缩进的空格数不重要,只要相同层级的元素左对齐即可

  6. ‘#’表示注释,从这个字符一直到行尾,都会被解析器忽略。

  7. 数组和集合使用 “- ”表示数组每个元素

配置文件属性注入Bean@Value

6.SpringBoot与其他技术集成

1.集成MyBatis

依赖,其余都一样

<dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency><!--导入SpringBoot和MyBatis的整合包--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version></dependency>

2 集成Spring Data Redis

依赖

        <!--导入redis的整合包--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

配置文件

#配置redis数据库连接信息
spring:data:redis:host: localhostport: 6379

3.SpringBoot代码测试

<!--spring boot测试依赖-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>

4.springboot打jar包和war包

jar

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.x.x</version><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins>
</build>

war

<packaging>war</packaging><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope></dependency>
</dependencies>
  • 如果是 WAR 包,主类需要继承 SpringBootServletInitializer,并重写 configure 方法。
  • import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;@SpringBootApplication
    public class YourApplication extends SpringBootServletInitializer {public static void main(String[] args) {SpringApplication.run(YourApplication.class, args);}
    }
    

相关文章:

Java学习Day56:暴打舔狗!(SpringBoot)

1.springboot简介 核心能力&#xff1a;Spring容器、日志、自动配置AutoCongfiguration、Starters web应用的能力&#xff1a;MVC、嵌入式Web服务器 数据访问(持久化)&#xff1a;关系型数据库、非关系型数据库 强大的整合其他技术的能力 只要是Java中牛逼的技术&#xff0c…...

RSA加密算法实现

Java实现RSA加密算法示例,包括密钥对的生成、加密和解密过程。首先需要导入Java的加密库,这些功能主要通过java.security和javax.crypto包提供。先生成了一个RSA密钥对,包括一个公钥和一个私钥。然后使用公钥加密了一个字符串,并使用私钥解密了加密后的字符串。加密和解密的…...

大数据新视界 -- 大数据大厂之优化大数据计算框架 Tez 的实践指南

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

java 中 List<T> 类型数据在 postgreSql 数据库中存储

一 属性添加注解 在类上面添加注解&#xff1a; TableName(autoResultMap true) 在字段上面添加注解&#xff1a; TableField(value "list", typeHandler UserHandler.class) private List<User> list new ArrayList<>(); 二 创建 UserHandler 类…...

公共命名空间,2024年10月的笔记

首先&#xff0c;我国选择C做为竞赛语言&#xff0c;许多人学C&#xff0c;学习的结果是&#xff1a;看到“公共命名空间”&#xff0c;就幻想出一个私有命名空间&#xff0c;其实&#xff0c;公共命名空间和C的命名空间无关&#xff01; 超简源代码 已知序列v{1,2,3,4,5}&…...

frida脚本,自动化寻址JNI方法

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 1. 通过 ArtMethod 结构体找到 jni 方法在内存中的地址&#xff0c;并把寻址方法通过 rpc.exports 暴露给 Python 脚本调用 jni_addr.js let entry_point_fr…...

‌MySQL中‌between and的基本用法‌

文章目录 一、between and语法二、使用示例2.1、between and数值查询2.2、between and时间范围查询2.3、not between and示例 BETWEEN AND操作符可以用于数值、日期等类型的字段&#xff0c;包括边界值。 一、between and语法 MySQL中的BETWEEN AND操作符用于在两个值之间选择…...

Ceph 存储系统全解

1. 引言 什么是 Ceph&#xff1f; Ceph 是一个开源的分布式存储系统&#xff0c;旨在提供高性能、可扩展、无单点故障的统一存储平台。它可以同时支持对象存储、块存储和文件系统存储&#xff0c;能够满足不同存储需求的多种应用场景。Ceph 通过其强大的 RADOS&#xff08;可…...

C# ftp帮助类 项目实战优化版

上位机开发中有时要与客户的文件服务器进行数据交互。如Mapping文件下载。结果文件上传等。我在项目中就常用到。现在把项目实战代码进行分享一下。 功能列表&#xff1a;连接服务器&#xff0c;下载文件&#xff0c;上传文件&#xff0c;删除服务器文件&#xff0c;获取当前目…...

栈和队列相关|有效的括号|用队列实现栈|用栈实现队列|设计循环队列(C)

20. 有效的括号 判断左右括号是否匹配&#xff0c;匹配返回true&#xff0c;不匹配返回false 通过栈来实现&#xff0c;类型和顺序&#xff0c;数量都要匹配 控制数量通过size 每个右括号都要找最近的左括号去判断类型匹配不匹配&#xff0c;顺序匹配不匹配 最后来判断数量匹配…...

云原生后端开发教程

云原生后端开发教程 引言 随着云计算的普及&#xff0c;云原生架构逐渐成为现代软件开发的主流。云原生不仅仅是将应用部署到云上&#xff0c;而是一种构建和运行应用的方式&#xff0c;充分利用云计算的弹性和灵活性。本文将深入探讨云原生后端开发的核心概念、工具和实践&a…...

TortoiseSVN小乌龟下载安装(Windows11)

目录 TortoiseSVN 1.14.7工具下载安装 TortoiseSVN 1.14.7 工具 系统&#xff1a;Windows 11 下载 官网&#xff1a;https://tortoisesvn.subversion.org.cn/downloads.html如图选 TortoiseSVN 1.14.7 - 64 位 下载完成 安装 打开 next&#xff0c;next Browse&#xf…...

Android adb命令获取设备id

Android adb命令获取设备id 方式很多&#xff0c;以下均可获得Android device id&#xff1a; adb shell settings get secure android_id adb shell settings get secure android_id adb devices -l adb shell content query --uri content://settings/secure --where "…...

Skywalking教程一

Skywalking教程一 概述Skywalking功能特点&#xff1a; 概述 一个大型分布式系统架构&#xff0c;监控平台是必不可少的&#xff0c;常用的分布式系统监控平台有&#xff1a;SkyWalking和Prometheus。Skywalking是一款比较优秀的分布式系统监控平台&#xff0c;一款分布式系统…...

React中管理state的方式

使用useState 使用useReducer 既然已经有了useState&#xff0c;为什么还需要useReducer呢&#xff1f; 那么useReducer是如何将解决这些问题的呢&#xff1f; reducer是如何更新state的呢&#xff1f; reducer的工作方式非常类似JavaScript中的reduce方法&#xff0c;随着时…...

服务器数据恢复—RAID5阵列中部分成员盘重组RAID5阵列后如何恢复原raid5阵列数据?

服务器数据恢复环境&#xff1a; 一台服务器挂接一台存储&#xff0c;该存储中有一组由5块硬盘组建的RAID5阵列。 服务器故障&#xff1a; 存储raid5阵列中有一块硬盘掉线。由于RAID5的特性&#xff0c;阵列并没有出现问题。工作一段时间后&#xff0c;服务器出现故障&#xff…...

【Linux】文件切割排序 cut sort

文章目录 Linux文件切割命令&#xff1a;cut1. cut命令的基本用法2. cut命令的选项和参数3. cut命令的实际应用案例 Linux文件排序命令&#xff1a;sort1. sort命令的基本用法2. sort命令的选项和参数3. sort命令的实际应用案例 常见问题和解决方案1. cut和sort命令的联合使用2…...

零售EDI:HornBach EDI 项目案例

HornBach 是一家总部位于德国的家居和建筑材料零售商&#xff0c;成立于1968年。它以大型仓储式商店而闻名&#xff0c;提供广泛的产品&#xff0c;包括建筑材料、园艺、家居装饰和工具等。 近期我们帮助HornBach的供应商W公司成功实现了与HornBach的EDI直连&#xff0c;除了满…...

SpringBoot 集成RabbitMQ 实现钉钉日报定时发送功能

文章目录 一、RabbitMq 下载安装二、开发步骤&#xff1a;1.MAVEN 配置2. RabbitMqConfig 配置3. RabbitMqUtil 工具类4. DailyDelaySendConsumer 消费者监听5. 测试延迟发送 一、RabbitMq 下载安装 官网&#xff1a;https://www.rabbitmq.com/docs 二、开发步骤&#xff1a;…...

基于java ssm springboot女士电商平台系统源码+文档设计

基于java ssm springboot女士电商平台系统源码文档设计 &#x1f345; 作者主页 网顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系统…...

Matlab数字信号处理——基于改进小波变换的图像去噪方法(7种去噪算法)

1.基于小波变换的阈值收缩法去噪 该方法利用小波变换分离出信号中的噪声成分&#xff0c;并通过设置合适的阈值对小波系数进行收缩&#xff0c;保留主要信息的同时&#xff0c;去除噪声。 %基于小波变换的阈值收缩法去噪算法 clear clc Iimread(nana.png); X im2double(I); …...

leetcode hot100【LeetCode 70. 爬楼梯】java实现

LeetCode 70. 爬楼梯 题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 注意&#xff1a; 给定 n 是一个正整数。 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&…...

Java异常2

异常抛出的两种形式&#xff1a; 系统隐式抛出&#xff1b;int n10/0;—隐式抛出一个异常&#xff1b;手动抛出异常&#xff1a;throw new Exception(); import java.util.InputMismatchException; import java.util.Scanner;public class Main {public static void main(Str…...

2024熵密杯初始题2

问题简要&#xff1a; 已知 counter 0x7501E6EA token 0xF4CE927C79B616E8E8F7223828794EEDF9B16591AE572172572D51E135E0D21A 伪造出另一个可以通过验证的counter和token。 给出token生成及验证代码如下&#xff1a; import binascii from gmssl import sm3# 读取HMAC ke…...

echarts属性之title

title 标题组件&#xff0c;包含主标题和副标题。 在 ECharts 2.x 中单个 ECharts 实例最多只能拥有一个标题组件。但是在 ECharts 3 中可以存在任意多个标题组件&#xff0c;这在需要标题进行排版&#xff0c;或者单个实例中的多个图表都需要标题时会比较有用。 例如下面不…...

VUE errolog, vue 错误集

I) installation As to command “npm install” on cmd or powershell, we must execute it under the program folder...

驱动开发系列13 - Linux tasklet用法介绍

一:概述 Tasklet 是 Linux 内核中的一种轻量级任务调度机制,通常用于在中断上下文中执行短小的任务。它们在软中断处理过程中被调用,允许将较长的处理工作延后到一个较低优先级的上下文中,以减少中断处理的延迟。Tasklet 的使用可以帮助开发者更好地管理系统资源,提高性能…...

redis实现分布式锁,go实现完整code

Redis分布式锁 Redis 分布式锁是一种使用 Redis 数据库实现分布式锁的方式&#xff0c;可以保证在分布式环境中同一时间只有一个实例可以访问共享资源。 实现机制 以下是实现其加锁步骤&#xff1a; 获取锁 在 Redis 中&#xff0c;一个相同的key代表一把锁。是否拥有这把锁&…...

解析日期、编码

解析日期 这里指的是将字符串或者object类型的日期&#xff0c;转换成panda或python的日期类型。 主要的是dtype的变化&#xff1a;object / str —> datetime64[ns] # modules well use import pandas as pd import numpy as np import seaborn as sns import datetime# …...

【Qt】QApplication::restoreOverrideCursor():恢复鼠标光标到原始状态的用法解析

restoreOverrideCursor() 是 Qt 中 QApplication 类提供的一个静态函数&#xff0c;用来恢复鼠标光标到应用程序之前设置的状态。 在 Qt 中&#xff0c;你可以使用 QApplication::setOverrideCursor() 来临时更改鼠标光标的外观。例如&#xff0c;当执行一些耗时操作时&#x…...

深圳网站定制价格低/seo推广学院

C语言第四-五章第四章 数 组4.1数组的概念C 语言可以根据用户需要&#xff0c;用基本数据类型定义特殊性质的数据类型&#xff0c;称为构造类型。构造类型有&#xff1a;数组、结构、联合。数组&#xff1a;相同数据类型变量的有序集合。有序表现在数组元素在内存中连续存放。数…...

wordpress 无法上传/关键词排名优化官网

第4章 序列的应用 第4章 序列的应用 4.1序列 序列是一块用于存放多个值的连续内存空间&#xff0c;并且按上一定顺序排列&#xff0c;每一个值&#xff08;称为元素&#xff09;都分配一个数字&#xff0c;称为索引或位置。通过该索引可以取出相应的值。例如&#xff0c;我们可…...

wordpress网站备份恢复/职业技能培训中心

2019独角兽企业重金招聘Python工程师标准>>> 建立一个新的类库项目 然后在”程序包管理控制台“执行下面两个命令&#xff0c;NewsModule是项目名称&#xff0c;执行后系统会为你建立好MVC所需要的引用。 PM> Install-Package Microsoft.Aspnet.Mvc -projectnam…...

网站建设公司做前端/昆明装饰企业网络推广

小目录链接题目描述样例输入样例输出思路代码链接 YbtOJ 木板涂色 Luogu 涂色 题目描述 给出一个长度为5的字符串&#xff0c;现在要求你把一个空的字符串涂色成给出字符串&#xff08;一次可变化多个字符&#xff09;&#xff0c;问最少要几次涂色 样例输入 AAAAA样例输出…...

做瞹瞹嗳视频网站在线观看/网络营销招聘岗位有哪些

夜光序言&#xff1a; 即使身边满是凄荒、冷淡与麻木&#xff0c;风也会吹得柔和&#xff0c;心也能寻得一份温存 正文&#xff1a;接下来~~&#xff0c;实战项目&#xff1a;一个拥有答题页面的微信小程序 上图为实际效果图 那么如何制作出来呢~ 点击“开始测试”按钮&#x…...

比较好的摄影网站/广州网站推广平台

<!DOCTYPE html><html><head lang"en"> <meta charset"UTF-8"> <title></title> <style> /* Positioning */ css 的 position 属性是用来设置元素的位置的,它还能设置一个元素出现在另一个元素的下层 元素能用 …...