SpringBoot入门案例
目录
一、SpringBoot入门
1. Spring Boot 简介(脚手架)
2. 微服务
微服务优点:
微服务缺点:
3. 环境准备
3.1 spring boot项目的创建
3.2 导入spring boot相关的依赖
3.5 编写主程序
3.4 编写相关的controller、service
3.5 运行主程序测试
3.6 简化部署
4. Hello World 探究
4.1 POM文件
(1)父项目
(2)父项目的父项目
(3)启动器(Starters)
spring-boot-starter
spring-boot-starter-web
5. SpringBoot的自动装配
一、SpringBoot入门
1. Spring Boot 简介(脚手架)
- 定义:简化Spring应用开发的框架,整合整个Spring技术栈,提供J2EE开发的一站式解决方案。
- 优点:
- 快速创建独立运行的Spring项目,以及与主流框架集成。
- 使用嵌入式的Servlet容器(如Tomcat),应用无需打成war包,内嵌Tomcat。
- Starters自动依赖和版本控制。
- 大量的自动装配,简化开发,也可以修改默认值。
- 无需配置XML,无代码生成,开箱即用。
- 准生产环境的运行时应用监控。
- 与云计算的天然集成。
2. 微服务
- Spring Cloud微服务治理方案:2014年由Martin Fowler提出,作为微服务架构风格的治理方案。
- 发展历程:从Servlet、SSH、SSM、单体应用、SOA发展到Spring Cloud。
- 微服务定义:架构风格,指开发单个小型但有业务功能的服务,每个服务都有自己的处理和轻量通讯机制,可以部署在单个或多个服务器上。也指一种松耦合的、有界的面向服务架构。
- 一个应用应该是一组小型服务,通过HTTP的方式进行互通。
- 单体应用:ALL IN ONE。
- 微服务:每个功能元素都是一个可独立替换和独立升级的软件单元。
微服务优点:
- 每个微服务都很小,聚焦一个指定的业务功能或需求。
- 可以由小团队(2到5人)单独开发。
- 松耦合,有功能意义的服务,独立开发和部署。
- 可以使用不同的语言开发。
- 允许容易且灵活的方式集成自动部署,通过持续集成工具,新成员能快速投入生产。
- 易于被一个开发人员理解、修改和维护,小团队更关注工作成果。
- 可以即时被要求扩展。
- 可以部署在中低端配置的服务上。
- 易于和第三方集成。
- 每个微服务都有自己的存储能力,可以有自己的数据库,也可以有统一的数据库。
微服务缺点:
- 微服务架构可能带来过多的操作。
- 可能需要双倍的努力。
- 分布式系统可能复杂难以管理。
- 因为分布部署,跟踪问题难。
- 当服务量增加,管理复杂性增加。
3. 环境准备
3.1 spring boot项目的创建
参考这篇文章: SpringBoot项目的5种搭建方式(以idea2017为例)-CSDN博客
我们直接进行测试程序的编写
3.2 导入spring boot相关的依赖
<parent><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐starter‐parent</artifactId><version>2.5.6</version>
</parent>
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐starter‐web</artifactId></dependency>
</dependencies>
这个配置包含了Spring Boot的父项目依赖和构建Web应用所需的Spring Boot的Web启动器依赖。
3.5 编写主程序
/**
* @SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用
*/
@SpringBootApplication
public class HelloWorldMainApplication {public static void main(String[] args) {// Spring应用启动起来SpringApplication.run(HelloWorldMainApplication.class,args);}
}
3.4 编写相关的controller、service
@Controller
public class HelloController {@RequestMapping("/hello")@ResponseBodypublic String hello(){return "Hello World";}
}
3.5 运行主程序测试
启动主程序,在浏览器输入 http://localhost:8080/hello
我们还没配置端口号,还是默认的8080
3.6 简化部署
(1)在pom文件中添加如下插件:
<!--这个插件,可以将应用打包成一个可执行的jar包--><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
(2)在右侧Maven视图中,点击“package”将项目打包
(3)进入jar包所在目录,输入如下命令
java -jar jar包名
这样,只需jar包就可以运行程序,但是命令行窗口一关,服务立即停止。
4. Hello World 探究
4.1 POM文件
(1)父项目
- 作用:为Spring Boot项目提供基础的构建配置和依赖管理,确保项目中使用的依赖版本一致。
- 配置:
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.6</version><relativePath/> <!-- lookup parent from repository -->
</parent>
说明:
<relativePath/>
标签为空,表示父项目将从Maven仓库中获取,而不是从本地路径。
(2)父项目的父项目
- 作用:
spring-boot-starter-parent
的父项目是spring-boot-dependencies
,它负责管理Spring Boot应用中所有依赖的版本,是Spring Boot的版本仲裁中心。以后我们导入依赖默认是不需要写版本。(没有在dependencies里面管理的依赖自然需要声明版本号) - 配置:
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.5.6</version><relativePath>../../spring-boot-dependencies</relativePath>
</parent>
说明:
<relativePath>
标签指定了父项目相对于当前项目的路径,但由于<relativePath/>
在spring-boot-starter-parent
中未指定,Maven将从远程仓库中解析版本。
(3)启动器(Starters)
- 作用:简化依赖管理,提供特定场景下所需的依赖集合。
spring-boot-starter
- 配置:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId>
</dependency>
spring-boot-starter是spring-boot场景启动器,帮我们导入了web模块正常运行所依赖的组件。Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里面引入这些starter相关场景的所有依赖都会导入进来,要用什么功能就导入什么场景的启动器
spring-boot-starter-web
- 配置:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
说明:
spring-boot-starter-web
是用于构建Web应用的启动器,它包含了构建RESTful Web服务所需的依赖,如Spring MVC、Tomcat等。
我们只需确定父项目的版本即可,因为Spring Boot的父项目(spring-boot-starter-parent
)已经为我们管理了所有Spring Boot相关依赖的版本。这意味着,当我们引入其他Spring Boot的启动器(Starters)或者Spring框架的依赖时,不需要再单独指定版本号,父项目已经为我们协调好了这些依赖的版本,确保了版本之间的兼容性和一致性,如图:
5. SpringBoot的自动装配
见 SpringBoot 自动装配原理及源码解析-CSDN博客 不再赘述
下篇我们将继续探究SpringBoot的配置文件。
相关文章:
SpringBoot入门案例
目录 一、SpringBoot入门 1. Spring Boot 简介(脚手架) 2. 微服务 微服务优点: 微服务缺点: 3. 环境准备 3.1 spring boot项目的创建 3.2 导入spring boot相关的依赖 3.5 编写主程序 3.4 编写相关的controller、service…...
自定义 Celery的logging模块
为什么需要自定义 Celery 日志 默认的 Celery 日志配置虽然满足基本需求,但在以下情况下可能需要进行自定义: 支持日志滚动:原生celery不支持日志滚动。更详细的日志信息:需要包含更多上下文信息,以便更好地理解任务…...
docker-开源nocodb,使用已有数据库
使用已有数据库 创建本地数据库 数据库:nocodb 用户:nocodb 密码:xxxxxx修改docker-compose.yml 默认网关的 IP 地址是 172.17.0.1(适用于 bridge 网络模式)version: "2.1" services:nocodb:environment:…...
【UE5】UnrealEngine源码构建1:tag为5.3.2源码clone
fatal: fetch-pack: invalid index-pack output clone unreal 速度很快,但是很容易失败Cloning into UnrealEngine... remote: Enumerating objects: 6511087, done. remote: Counting objects: 100% (196/196), done. remote: Compressing objects: 100% (50/50), done. erro…...
RoboMIND:多体现基准 机器人操纵的智能规范数据
我们介绍了 RoboMIND,这是机器人操纵的多体现智能规范数据的基准,包括 4 个实施例、279 个不同任务和 61 个不同对象类别的 55k 真实世界演示轨迹。 工业机器人企业 埃斯顿自动化 | 埃夫特机器人 | 节卡机器人 | 珞石机器人 | 法奥机器人 | 非夕科技 | C…...
FPGA自学之路:到底有多崎岖?
FPGA,即现场可编程门阵列,被誉为硬件世界的“瑞士军刀”,其灵活性和可编程性让无数开发者为之倾倒。但谈及FPGA的学习难度,不少人望而却步。那么,FPGA自学之路到底有多崎岖呢? 几座大山那么高?…...
讲一个自己写的 excel 转 html 的 java 工具
由来 这是一个从开发需求中诞生的工具,在工作中因为有一个 excel 转 html 的任务,又没找到一个专门做这方面的工具(其他工具几乎都是简单的转换,无法还原 excel 样式,而且转换的宽高有点儿差距)࿰…...
打破视障壁垒,百度文心快码无障碍版本助力视障IT从业者就业无“碍”
有AI无碍 钟科:被黑暗卡住的开发梦 提起视障群体的就业,绝大部分人可能只能想到盲人按摩。但你知道吗?视障人士也能写代码。 钟科,一个曾经“被黑暗困住”的人,他的世界,因为一场突如其来的疾病,…...
爆改RagFlow
爆改RagFlow 一、Rag理论概述二、Ragflow解析参数说明三、♥ RagFlow源码解析核心代码流程梳理1、OCR识别2、版面分析3、parser功能3.1 PdfParser3.1.1 首先,初始化3.1.2 **pdf转图片** [来自工业界的知识库 RAG 服务(二),RagFlow 源码全流程深度解析](h…...
Unity 使用UGUI制作卷轴开启关闭效果
视频效果 代码 using UnityEngine.UI; using System.Collections; using System.Collections.Generic; using UnityEngine; using DG.Tweening; using DG.Tweening.Core; using DG.Tweening.Plugins.Options;public class JuanZhou : MonoBehaviour {[SerializeField]private …...
android知识巩固(二.非线性数据结构)
非线性结构:是从逻辑结构上划分,其元素存在一对多或者多对多的相互关系 1.前言 在前一章中,我们了解了数据结构的基本思想,学习了部分基本的线性数据结构,了解了计算机是如何表示和存储数据的,良好的数据结构思想有助于我们写出性能优良的应用 2.目录 目录.png 3.非线性数据结构…...
Kafka中的Topic和Partition有什么关系?
大家好,我是锋哥。今天分享关于【Kafka中的Topic和Partition有什么关系?】面试题。希望对大家有帮助; Kafka中的Topic和Partition有什么关系? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Apache Kafka 中&#…...
CMS漏洞靶场攻略
DeDeCMS 环境搭建 傻瓜式安装 漏洞一:通过文件管理器上传WebShel 步骤⼀:访问目标靶场其思路为 dedecms 后台可以直接上传任意文件,可以通过⽂件管理器上传php文件获取webshell 登陆网站后台 步骤二:登陆到后台点击 【核心】 --》 【文件式…...
PHP高性能webman管理系统EasyAdmin8
介绍 EasyAdmin8-webman 在 EasyAdmin 的基础上使用 webman 最新版重构,PHP 最低版本要求不低于 8.0。基于webman和layui v2.9.x的快速开发的后台管理系统。 项目地址:http://easyadmin8.top 演示地址:http://webman.easyadmin8.top/admin …...
【达梦数据库】64 位操作系统注册 32 位 ODBC 方法
目录 背景思路部署安装64位软件安装包注册32位驱动成功案例其他案例 配置数据源 背景 在使用达梦数据库的过程中,应用需要32位驱动与数据库进行适配 思路 部署32位软件,经过测试,dmmonitor在本地环境及客户环境中前台启动失败报错ÿ…...
渗透学习笔记(十一)Burp Suite 总结
声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&#…...
数据结构与算法学习笔记----约数
数据结构与算法学习笔记----约数 author: 明月清了个风 first publish time: 2024.12.30 ps⭐️主要是求约数,约数的个数,约数的和,涉及到算术基本定理的相关内容,第三题的讲解合并在第二题的思路里一起了。 Acwing 869. 试除法…...
PyAudio库基本知识详解——为自制PCM音频播放器做准备
前言 结合前段时间我们做的音频编解码器,这样我们就可以将获取到的ADPCM数据,转换成PCM数据,然后播放出来,得到一个完整的音频数据,因此,接下来几篇文章中,我们想做一个播放PCM格式的音频播放器…...
微信小程序 覆盖组件cover-view
wxml 覆盖组件 <video src"../image/1.mp4" controls"{{false}}" event-model"bubble"> <cover-view class"controls"> <cover-view class"play" bind:tap"play"> <cover-image class"…...
实战案例——ZooKeeper集群部署(新手教程超详细)
案例目标 了解ZooKeeper分布式应用程序协调服务使用3台机器搭建ZooKeeper集群使用ZooKeeper集群 案例分析 规划节点 ZooKeeper集群节点规划 Ip 主机名 节点 192.168.110.10 zookeeper1 集群节点 192.168.110.20 zookeeper2 集群节点 192.168.110.30 zookeeper3 …...
LeetCode 326 3的幂
如何判断一个整数是否为 3 的幂次方 在编程中,我们经常会遇到各种有趣的数学问题,今天就来探讨一个看似简单却又很有技巧性的问题:如何判断一个给定的整数是否是 3 的幂次方。 一、问题描述 给定一个整数 n,我们需要编写一个函数…...
智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之5
本文要点 前端 问题描述语言 本文继续完善 “描述” ---现在我们应该可以将它称为 “问题problem描述语言 ”。 它 通过对话框的question 引发 表征的issue 的“涌现” 最终 厘清应用程序的“problem”。即它合并了 ISO七层模型中的上面三层,通过将三层 分别形成…...
flink-1.16 table sql 消费 kafka 数据,指定时间戳位置消费数据报错:Invalid negative offset 问题解决
请移步至最后的:2024-12-27日调整实现方式,26日实现的有bug,但是可以作为参考。 2024-12-27日调整实现方式 1.上边的方案,可以实现topic中每个分区都正常有数据的情况,但是如果部分分区没有数据,或者指定的…...
【服务器】上传文件到服务器并训练深度学习模型下载服务器文件到本地
前言:本文教程为,上传文件到服务器并训练深度学习模型,与下载服务器文件到本地。演示指令输入,完整的上传文件到服务器,并训练模型过程;并演示完整的下载服务器文件到本地的过程。 本文使用的服务器为云服…...
MyBatis如何处理延迟加载?
大家好,我是锋哥。今天分享关于【MyBatis如何处理延迟加载?】面试题。希望对大家有帮助; MyBatis如何处理延迟加载? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 MyBatis 中,延迟加载(Laz…...
制造BOM的应用思考
一、制造BOM的作用 制造BOM(Manufacturing BOM,MBOM)在制造过程中的应用非常广泛,具体包括以下几个方面: 1. 生产计划和调度: 制造BOM提供了生产过程中所需的所有输入及输出间的关系,包括材料、部品的数量、结构以及制程等信息。这些信息是生产拉动物料需求计划以及成本…...
基于earthSDK三维地图组件开发
上效果 功能点 测量分析相机位置切换geojson数据加载地图打点,显示信息点击回传数据二三位切换 这里二三维切换通上篇openlayers分享,技术交流V:bloxed <template><div class"h100 w100"><div style"width:100%; heig…...
Mono里运行C#脚本5—mono_file_map_open
前面介绍了mono_jit_init初始化,这个函数非常长,要理解起来还是比较困难。因此改变另外一种方式,先从底层的函数开始,再慢慢来探索mono的底层实现,以及它的实现原理,运行的细节。 Mono要运行exe文件,这里是运行test-embed.exe文件,那么就得认识这个文件,解释这个文件的…...
Node.js使用教程
Node.js使用教程 Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它让JavaScript运行在服务器端。以下是一个简单的Node.js使用教程: 一、 Node.js开发环境和编译 1.1 安装Node.js 访问Node.js官网下载并安装适合您操作系统的Node.js版本。 1…...
UniApp 组件的深度运用
一、引言 在当今的移动应用开发领域,跨平台开发已成为主流趋势,而 UniApp 作为其中的佼佼者,备受开发者青睐。UniApp 的强大之处很大程度上源于其丰富且功能多样的组件体系,这些组件宛如精巧的积木,能够帮助开发者快速…...
期末算法分析程序填空题
目录 5-1 最小生成树(普里姆算法) 5-2 快速排序(分治法) 输入样例: 输出样例: 5-3 归并排序(递归法) 输入样例: 输出样例: 5-4 求解编辑距离问题(动态规划法)…...
【机器学习】 卷积神经网络 (CNN)
文章目录 1. 为什么需要 CNN2. CNN 的架构3. 卷积层4. 池化层5. CNN 的应用 1. 为什么需要 CNN 前提:利用前置知识,去掉全连接神经网络中的部分参数,提升学习效率。本质:在 DNN 之前加上 CNN,先去除不必要的参数&…...
LeetCode热题100-字母异位词分组【JavaScript讲解】
题目: 根据题目想思路: 模式识别: 一旦需要根据特征进行归类的,就应该利用散列表。【散列表又叫哈希表】 我们遍历数组中的每一项,将每一项字符串拆分成一个一个的字符,并返回成数组的形式,并且进行排序后…...
面试241228
面试可参考 1、cas的概念 2、AQS的概念 3、redis的数据结构 使用场景 不熟 4、redis list 扩容流程 5、dubbo 怎么进行服务注册和调用,6、dubbo 预热 7如何解决cos上传的安全问题kafka的高并发高吞吐的原因ES倒排索引的原理 spring的 bean的 二级缓存和三级缓存 spr…...
AI界的拼多多:DeepSeek
AI界的拼多多:DeepSeek DeepSeek是一家位于中国杭州的人工智能基础技术研究公司,由杭州幻方量化投资管理合伙企业投资成立于2023年5月,专注于研究人工智能基础技术,其官网为deepseek.com.以下是关于DeepSeek的一些具体介绍及举例: 模型发布 DeepSeek Coder:2023年11月…...
备战春招 | 数字IC FPGA笔试题
在数字电路设计的领域,无论是数字IC(集成电路)还是FPGA(现场可编程门阵列)的设计,都需要对一系列核心概念有深刻的理解和掌握。随着科技的快速发展,这些领域的面试题目也在不断更新,…...
微服务-Sentinel新手入门指南
微服务为什么要使用流控降级组件 为了提高系统运行期间的稳定性和可用性 在微服务环境下,服务之间存在复杂的调用关系,单个服务的故障或过载可能会迅速影响到整个系统,导致服务雪崩效应。流控组件可以限制进入系统的流量,防止系…...
git clone 超时
git clone 超时 参考 https://blog.csdn.net/qq_45906972/article/details/142214187?utm_mediumdistribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-142214187-blog-137158358.235v43pc_blog_bottom_relevance_base8&spm1001.2101.3001.…...
java的bio、nio、aio 以及操作系统的select、poll、epoll
在 Java 和其他编程语言中,I/O 模型的选择对网络应用的性能和可扩展性有着重要影响。以下是 BIO(Blocking I/O)、NIO(Non-blocking I/O)、AIO(Asynchronous I/O),以及操作系统级别的…...
Redis——数据过期策略
文章目录 1. 引入2. 数据过期策略2.1 策略一:惰性删除2.1.1 原理2.1.2 优点2.1.3 缺点 2.2 策略二:定期删除2.2.1 原理2.2.2 模式2.2.3 优点2.2.4 缺点 2.3 两种策略的比较 3. 总结 1. 引入 Redis 是一个 高性能 的非关系型数据库,由于 Redi…...
kubernetes Gateway API-1-部署和基础配置
文章目录 1 部署2 最简单的 Gateway3 基于主机名和请求头4 重定向 Redirects4.1 HTTP-to-HTTPS 重定向4.2 路径重定向4.2.1 ReplaceFullPath 替换完整路径4.2.2 ReplacePrefixMatch 替换路径前缀5 重写 Rewrites5.1 重写 主机名5.2 重写 路径5.2.1 重新完整路径5.2.1 重新部分路…...
二、SQL语言,《数据库系统概念》,原书第7版
文章目录 一、概览SQL语言1.1 SQL 语言概述1.1.1 SQL语言的提出和发展1.1.2 SQL 语言的功能概述 1.2 利用SQL语言建立数据库1.2.1 示例1.2.2 SQL-DDL1.2.2.1 CREATE DATABASE1.2.2.2 CREATE TABLE 1.2.3 SQL-DML1.2.3.1 INSERT INTO 1.3 用SQL 语言进行简单查询1.3.1 单表查询 …...
【postgresql 物化视图】自动刷新物化视图2种方法
普通视图就是一个虚拟表,不占内存。而物化视图是存在的,占内存。 物化视图,默认是手动刷新。下面是手动刷新的例子。我们来创建一个物化视图。 create MATERIALIZED VIEW dnh_analasis_view as select cjsj,a,b,c,d from table_1; REFRESH …...
1 数据库(下):多表设计 、多表查询 + SQL中的with查询语法(MySQL8.0以后版本才支持这种新语法)+ 数据库优化(索引优化)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、多表设计1 多表设计-概述2 三种多表关系一对多(多对一)(1)无外键约束(逻辑外键)&…...
CPT203 Software Engineering 软件工程 Pt.2 敏捷方法和需求工程(中英双语)
文章目录 3. Aglie methods(敏捷方法)3.1 Aglie methods(敏捷方法)3.1.1 特点3.1.2 优点3.1.3 缺点3.1.4 原则3.1.5 计划驱动与敏捷方法的对比 3.2 Scrum3.2.1 Scrum roles3.2.2 Scrum Activities and Artifacts3.2.2.1 Product B…...
【Linux】进度条
本文中,我们来写一个进度条。 本文大纲: 写一个命令行版的进度条。 1.回车换行 2.缓冲区问题(本文不深究) 2.1测试代码 3.写一个什么样的进度条? version1 version2 回车换行 这俩不是一个概念&…...
期权懂|个股期权的流动性如何?
锦鲤三三每日分享期权知识,帮助期权新手及时有效地掌握即市趋势与新资讯! 个股期权的流动性如何? 个股期权作为场外交易工具,具有较高的灵活性。场外交易意味着交易双方可以直接协商交易条款,这有助于满足不同投资者的…...
U盘格式化工具合集:6个免费的U盘格式化工具
在日常使用中,U盘可能会因为文件系统不兼容、数据损坏或使用需求发生改变而需要进行格式化。一个合适的格式化工具不仅可以清理存储空间,还能解决部分存储问题。本文为大家精选了6款免费的U盘格式化工具,并详细介绍它们的功能、使用方法、优缺…...
Java学习-Redis
简介 Redis诞生于2009年全称是Remote Dictionary Server,远程词典服务器,是一个基于内存的键值型NoSQL数据库。 特征 特征: 键值(key-value)型,value支持多种不同数据结构,功能丰富 单线程&a…...
Java处理视频思路
1.首先实现断点续传功能。 断点续传实现思路: 前端对文件分块。前端使用多线程一块一块上传,上传前给服务端发一个消息校验该分块是否上传,如果已上传则不再上传。如果从该断点处断网了,下次上传时,前面的分块已经存在…...