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

Spring Boot 3.x 系列【3】Spring Initializr快速创建Spring Boot项目

有道无术,术尚可求,有术无道,止于术。

本系列Spring Boot版本3.0.3

源码地址:https://gitee.com/pearl-organization/study-spring-boot3

文章目录
    • 前言
    • 安装JDK 17
    • 创建Spring Boot 项目
      • 方式1:网页在线生成
      • 方式2:使用IDEA
    • 项目结构
      • Maven Wrapper
      • pom.xml
      • java目录
      • resources目录
      • test目录

前言

本篇主要介绍使用spring initializr 快速创建一个Spring Boot 3.0项目以及工程结构说明。

安装JDK 17

Oracle JDK 17 发布地址
Oracle JDK 17 下载地址

OpenJDK 17 发布地址
OpenJDK 17 下载地址

Spring Boot 3.0需要Java 17作为最低版本。如果当前正在使用Java 8Java 11,在开发Spring Boot 3.0应用程序之前,需要升级JDK

相信很多人现在都还是用的JDK 8,使用Spring Boot 3.0的话,还是很有必要去熟悉每个版本JAVA的增强特性,后续会出专栏详细介绍每个版本的变化,而Java 17的相对上一版本的JEPJDK增强提案)如下:

306:	Restore Always-Strict Floating-Point Semantics # 恢复始终严格模式(Always-Strict)的浮点语义
356:	Enhanced Pseudo-Random Number Generators # 增强型伪随机数生成器
382:	New macOS Rendering Pipeline # 新增macOS渲染管道
391:	macOS/AArch64 Port # 支持将JDK移植到macOS或AArch64
398:	Deprecate the Applet API for Removal # 移除过时的Applet API
403:	Strongly Encapsulate JDK Internals # 强封装JDK内部API
406:	Pattern Matching for switch (Preview) # switch 匹配模式(预览版本)
407:	Remove RMI Activation # 移除RMI(远程方法调用)激活机制
409:	Sealed Classes # 密封类 
410:	Remove the Experimental AOT and JIT Compiler # 移除实验性AOT和JIT编译器
411:	Deprecate the Security Manager for Removal # 弃用待移除的安全管理器(Security Manager)
412:	Foreign Function & Memory API (Incubator) # 外部函数和内存API(孵化器)孵化阶段
414:	Vector API (Second Incubator) # Vector API第二孵化阶段
415:	Context-Specific Deserialization Filters #上下文特定的反序列化过滤器

这里就不介绍下载安装的方法了,相信懂的都懂???

创建Spring Boot 项目

Spring Initializr 是官方提供的一个用来初始化一个Spring boot 项目的工具,不仅完美支持IDEAEclipse,而且能自动生成启动类和单元测试代码,给开发人员带来极大的便利。

方式1:网页在线生成

打开Spring Initializr官方页面,可以在网页在线生成Spring Boot项目代码,整个页面主要分三大部分:
在这里插入图片描述
在最左边,填写项目信息,说明如下:

  • Project:项目构建工具,可以选择GradleMavenSpring自己所有的项目都是使用Gradle
  • Language:选择开发语言
  • Spring Boot:选择Spring Boot版本
  • Project Metadata:项目信息
    • Group:项目组织
    • Artifact:项目唯一标识符
    • Name:项目名称
    • Description:项目描述
    • Package name:包名
    • Packaging:打包方式
    • JavaJDK版本

最右边点击添加依赖可以选择项目需要的依赖包:
在这里插入图片描述
在最下方,分别是生成、预览、分享功能,点击生成后,代码自动下载到本地,然后使用开发工具导入就可以了~
在这里插入图片描述

方式2:使用IDEA

IDEAEclipse继集成了Spring Initializr,可以直接在开发工具中创建工程,一般都是使用该方式。

首先创建一个工程模块
在这里插入图片描述
选择Spring Initializr 来初始化项目:
在这里插入图片描述
然后填写项目信息,比如模块名、构建工具等:
在这里插入图片描述

接着下一步选择Spring Boot版本、添加依赖:
在这里插入图片描述
点击Next,核对模块名、模块位置是否正确:
在这里插入图片描述
点击Finish,很快项目就自动创建好了:
在这里插入图片描述

项目结构

接下来,我们了解下生成项目的各个目录和文件。

├── .mvn
│   └── wrapper
│       ├── maven-wrapper.jar
│       └── maven-wrapper.properties
├── mvnw
├── mvnw.cmd
├── pom.xml
└── src├── main│   ├── java│   └── resources└── test├── java└── resources
Maven Wrapper

安装好Maven后,可以使用mvn命令进行编译打包,项目中直接使用当前系统的Maven环境,这种方式存在一个问题,如果没有安装Maven,或者下载别人的项目和自身本地Maven环境版本不兼容时,就得重新安装Maven

为了解决上述问题,每个项目可以指定其本身所依赖的独立Maven环境,简单来说,就是给该项目装一个单独的Maven,只作用于本项目,这就是Maven Wrapper

.mvnmvnwmvnw.cmd这几个文件都属于Maven Wrapper.mvn存放Maven Wrapper安装文件、配置;mvnwmvnw.cmdLinuxWindows系统执行相关Maven命令的脚本。

一般也用不到,所以可以直接删除这几个文件:
在这里插入图片描述

pom.xml

pom.xml应该都比较熟悉了,Maven配置文件,用以描述项目的各种信息,主要看下Spring Boot生成的相关内容。

首先是parent,继承了Spring Boot提供的父 POM ,在spring-boot-starter-parent中又继承了spring-boot-dependencies。在spring-boot-dependencies中,定义了很多依赖包的版本。

    <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.0.3</version><relativePath/> <!-- lookup parent from repository --></parent>

接着是dependencies声明项目本身所需要的依赖,因为spring-boot-dependencies中已定义好很多版本,所以常用的不需要写版本号,在实际开发时,尽量使用Spring Boot已定义好的版本,因为这些是进行了版本兼容测试的。

    <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>

build构建模块中,添加了官方提供的Maven插件spring-boot-maven-plugin,提供了构建Docker镜像、打包为可执行JAR包等功能。

    <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

相关命令如下所示:
在这里插入图片描述

java目录

java目录存放源代码文件:
在这里插入图片描述
自动生成了创建了一个启动类,该类是程序启动的入口,运行main方法程序启动,@SpringBootApplication是启动类核心注解,标记当前类为启动类,启动时,会从该注解中获取很多当前程序信息,后面会进行源码解读。

@SpringBootApplication
public class SpringBoot3BaseDemoApplication {public static void main(String[] args) {SpringApplication.run(SpringBoot3BaseDemoApplication.class, args);}
}
resources目录

resources 目录来存放一些资源文件,其中最重要的是application.properties,所有Spring Boot应用的配置都写在这里,static存放静态资源,比如cssjs等,templates用于存放模板文件。
在这里插入图片描述

test目录

test是进行单元测试的目录
在这里插入图片描述

相关文章:

Spring Boot 3.x 系列【3】Spring Initializr快速创建Spring Boot项目

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Spring Boot版本3.0.3 源码地址&#xff1a;https://gitee.com/pearl-organization/study-spring-boot3 文章目录 前言安装JDK 17创建Spring Boot 项目 方式1&#xff1a;网页在线生成方式2&#…...

高频 SQL 50 题(基础版)_1667. 修复表中的名字

高频 SQL 50 题&#xff08;基础版&#xff09;_1667. 修复表中的名字 select user_id ,concat(upper(substring(name,1,1)),lower(substring(name,2))) as name from Users order by user_id...

Windwos10 系统没有微软商店(Microsoft Store)怎么办?

操作方法 管理员身份打开power shell &#xff0c; 输入 Get-AppxPackage -AllUsers Microsoft.WindowsStore* | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register “ ( ( (_.InstallLocation)\AppXManifest.xml”} 按下enter按键&#xff0c;就OK了...

c++同步机制

总结 多线程访问共享数据时需要加锁 多线程数据竞争 假如有一个变量shared_variable被10个线程共享&#xff0c;每个线程在循环中对shared_variable进行 1000 次累加操作&#xff0c;我们期望最终值为10000。 #include <iostream> #include <thread> #include …...

RuoYi框架介绍,以及如何基于Python使用RuoYi框架

若依框架&#xff08;RuoYi&#xff09;是一款基于Spring Boot和Vue.js的开源快速开发平台&#xff0c;广泛应用于企业级应用开发。它提供了丰富的功能模块和代码生成工具&#xff0c;帮助开发者快速搭建后台管理系统。 主要特点 前后端分离&#xff1a;前端采用Vue.js&#x…...

Go 语言环境安装

1.go官网下载安装包 All releases - The Go Programming Language 双击安装,一路下一步 2.安装完后查看版本 打开cmd 输入 以下 ,查看语言版本 go version 查看环境变量是否自动设置成功...

vector 面试点总结

ps&#xff1a;部分内容使用“AI”查询 一、入门 1、什么是vector 动态数组容器&#xff0c;支持自动扩容、随机访问和连续内存存储。 2、怎么创建-初始化vector std::vector<int> v; // 创建空vectorstd::vector<int> v {1, 2, 3}; // 直接初始化std::vec…...

Java 8 新特性

Java 8 引入了一系列重要的新特性&#xff0c;极大地增强了 Java 语言的功能&#xff0c;尤其是在 函数式编程、流处理、日期时间 API 和 默认方法 等方面。这些新特性不仅提升了代码的可读性和简洁性&#xff0c;还改善了并发处理的性能。以下是 Java 8 主要新特性的详细说明。…...

知识库技术选型:主流Embedding模型特性对比

知识库技术选型&#xff1a;主流Embedding模型特性对比 1. 知识库与大模型结合的背景 知识库是存储和管理结构化知识的系统&#xff0c;广泛应用于问答系统、推荐系统和搜索引擎等领域。随着大语言模型&#xff08;LLM&#xff09;的发展&#xff0c;知识库与大模型的结合成为…...

CAN总线通信协议学习2——数据链路层之帧格式

1 帧格式 帧格式可理解为定义了传输的数据&#xff08;叫报文&#xff09;应该“长什么样”来传输&#xff0c;也为后续设定一些规则如错误检查机制提供了思路。 首先&#xff0c;帧格式可分为以下5种类型&#xff1a; PS&#xff1a;CAN总线任意一个设备可当收也可当发&#…...

基于ArcGIS Pro、Python、USLE、INVEST模型等多技术融合的生态系统服务构建生态安全格局高阶应用

文字目录 前言第一章、生态安全评价理论及方法介绍一、生态安全评价简介二、生态服务能力简介三、生态安全格局构建研究方法简介 第二章、平台基础一、ArcGIS Pro介绍二、Python环境配置 第三章、数据获取与清洗一、数据获取&#xff1a;二、数据预处理&#xff08;ArcGIS Pro及…...

神经网络在电力电子与电机控制中的应用

神经网络&#xff08;Neural Networks&#xff09;简介 神经网络是一种受生物神经元启发的机器学习模型&#xff0c;能够通过大量数据学习输入与输出之间的非线性映射关系。其核心结构包括&#xff1a; 输入层&#xff1a;接收外部数据&#xff08;如传感器信号、控制指令&…...

llama-factory || AutoDL平台

报错如下&#xff1a; rootautodl-container-d83e478b47-3def8c49:~/LLaMA-Factory# llamafactory-cli webui * Running on local URL: http://0.0.0.0:7860Could not create share link. Missing file: /root/miniconda3/lib/python3.10/site-packages/gradio/frpc_linux_am…...

数学建模:MATLAB极限学习机解决回归问题

一、简述 极限学习机是一种用于训练单隐层前馈神经网络的算法&#xff0c;由输入层、隐藏层、输出层组成。 基本原理&#xff1a; 输入层接受传入的样本数据。 在训练过程中随机生成从输入层到隐藏层的所有连接权重以及每个隐藏层神经元的偏置值&#xff0c;这些参数在整个…...

力扣785. 判断二分图

力扣785. 判断二分图 题目 题目解析及思路 题目要求将所有节点分成两部分&#xff0c;每条边的两个端点都必须在不同集合中 二分图&#xff1a;BFS/DFS/并查集 因为图不一定联通&#xff0c;所以枚举所有点都做bfs(如果没联通的话) 代码 class Solution { public:bool is…...

【硬件工程师成长】之是否需要组合电容进行滤波的考虑

在电子电路设计中&#xff0c;判断是否需要使用组合电容进行滤波&#xff0c;需综合考虑以下因素&#xff1a; 1. 噪声频谱分析 高频与低频噪声共存&#xff1a;若电源或信号中同时存在低频&#xff08;如工频纹波&#xff09;和高频噪声&#xff08;如开关电源的开关噪声、数字…...

Pythonweb开发框架—Flask工程创建和@app.route使用详解

1.创建工程 如果pycharm是专业版&#xff0c;直接NewProject—>Flask 填写工程name和location后&#xff0c;点击右下角【create】&#xff0c;就会新建一个flask工程&#xff0c;工程里默认会建好一个templates文件夹、static文件夹、一个app.py文件 templates&#xff1…...

005 公网访问 docker rocketmq

文章目录 创建自定义网络创建NameServer容器创建Broker容器正式开始启动 Nameserver 容器启动 Broker 容器并关联 Nameserverdocker exec -it rmqbroker vi /etc/rocketmq/broker.conf检查 namesrv 解析检查 Broker 注册状态Nameserver 日志Broker 日志检查容器日志手动指定 Br…...

C++11中的右值引用和完美转发

C11中的右值引用和完美转发 右值引用 右值引用是 C11 引入的一种新的引用类型&#xff0c;用 && 表示。它主要用于区分左值和右值&#xff0c;并且可以实现移动语义&#xff0c;避免不必要的深拷贝&#xff0c;提高程序的性能。左值通常是可以取地址的表达式&#xf…...

txt 转 json 使用python语言

需求: 把如下的txt文档转成json输出 代码 import jsondef txt_to_json(input_file, output_file):data_list []with open(input_file, r, encodingutf-8) as f:for line in f:# 分割数据并去除换行符parts line.strip().split(,)print(f"{parts}")print(type(par…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...