记录一次成功的springBoot

news/2025/10/28 22:01:21/文章来源:https://www.cnblogs.com/treeofb/p/19172822

开发您的第一个 Spring Boot 应用程序

本节介绍如何开发一个小型的“Hello World!” Web 应用程序,该应用程序突出显示了 Spring Boot 的一些关键功能。 您可以选择 Maven 或 Gradle 作为构建系统。

 

spring.io 网站包含许多使用 Spring Boot 的“入门”指南。 如果您需要解决特定问题,请先检查那里。

您可以通过转到 start.spring.io 并从依赖项搜索器中选择“Web”启动器来快捷执行以下步骤。 这样做会生成一个新的项目结构,以便您可以立即开始编码。 有关详细信息,请查看 start.spring.io 用户指南。

先决条件

在开始之前,请打开终端并运行以下命令以确保您安装了有效版本的 Java:

$ java -version
openjdk version "17.0.16" 2025-07-15 LTS
OpenJDK Runtime Environment (build 17.0.16+12-LTS)
OpenJDK 64-Bit Server VM (build 17.0.16+12-LTS, mixed mode, sharing)
  此示例需要在其自己的目录中创建。 后续说明假定您已经创建了一个合适的目录,并且它是您当前的目录。

专家

如果要使用 Maven,请确保已安装 Maven:

$ mvn -v
Apache Maven 3.9.11 (3e54c93a704957b63ee3494413a2b544fd3d825b)
Maven home: /Users/developer/.sdkman/candidates/maven/current
Java version: 17.0.16, vendor: BellSoft, runtime: /Users/developer/.sdkman/candidates/java/17.0.16-librca

Gradle

如果您想使用 Gradle,请确保您已安装 Gradle:

$ gradle --version------------------------------------------------------------
Gradle 8.14.3
------------------------------------------------------------Build time:    2025-07-04 13:15:44 UTC
Revision:      e5ee1df3d88b8ca3a8074787a94f373e3090e1dbKotlin:        2.0.21
Groovy:        3.0.24
Ant:           Apache Ant(TM) version 1.10.15 compiled on August 25 2024
Launcher JVM:  17.0.16 (BellSoft 17.0.16+12-LTS)
Daemon JVM:    /Users/developer/.sdkman/candidates/java/17.0.16-librca (no JDK specified, using current Java home)
OS:            Mac OS X 15.7.1 aarch64

使用 Maven 设置项目

我们需要从创建一个 Maven 文件开始。 是用于构建项目的配方。 打开您最喜欢的文本编辑器并添加以下内容:pom.xmlpom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>myproject</artifactId><version>0.0.1-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.5.7</version></parent><!-- Additional lines to be added here... --></project>

前面的列表应该会给你一个有效的构建。

您可以通过运行来测试它(现在,您可以忽略“jar 将为空 - 没有内容被标记为包含!mvn package

  此时,您可以将项目导入到 IDE 中(大多数现代 Java IDE 都包含对 Maven 的内置支持)。 为简单起见,我们在此示例中继续使用纯文本编辑器。

使用 Gradle 设置项目

我们需要从创建一个 Gradle 文件开始。 是用于构建项目的生成脚本。 打开您最喜欢的文本编辑器并添加以下内容:build.gradlebuild.gradle

plugins {id 'java'id 'org.springframework.boot' version '3.5.7'
}apply plugin: 'io.spring.dependency-management'group = 'com.example'
version = '0.0.1-SNAPSHOT'java {sourceCompatibility = '17'
}repositories {mavenCentral()
}dependencies {
}

前面的列表应该会给你一个有效的构建。 您可以通过运行 来测试它。gradle classes

  此时,您可以将项目导入 IDE(大多数现代 Java IDE 都包含对 Gradle 的内置支持)。 为简单起见,我们在此示例中继续使用纯文本编辑器。

添加类路径依赖项

Spring Boot 提供了许多启动器,可让您将 jar 添加到类路径中。 启动器提供了在开发特定类型的应用程序时可能需要的依赖项。

专家

大多数 Spring Boot 应用程序在 POM 的部分中使用 这是一个特殊的启动器,提供有用的 Maven 默认值。 它还提供了一个依赖项管理部分,以便您可以省略“祝福”依赖项的标签。spring-boot-starter-parentparentspring-boot-starter-parentversion

由于我们正在开发一个 Web 应用程序,因此我们添加了一个依赖项。 在此之前,我们可以通过运行以下命令来查看我们当前拥有的内容:spring-boot-starter-web

$ mvn dependency:tree[INFO] com.example:myproject:jar:0.0.1-SNAPSHOT

该命令打印项目依赖项的树表示形式。 您可以看到它本身不提供任何依赖项。 要添加必要的依赖项,请编辑 ur 并在该部分下方添加依赖项:mvn dependency:treespring-boot-starter-parentpom.xmlspring-boot-starter-webparent

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

如果您再次运行,您会看到现在有许多额外的依赖项,包括 Tomcat Web 服务器和 Spring Boot 本身。mvn dependency:tree

Gradle

大多数 Spring Boot 应用程序都使用 Gradle 插件。 此插件提供了有用的默认值和 Gradle 任务。 Gradle 插件提供依赖项管理,以便您可以省略“祝福”依赖项的标记。org.springframework.bootio.spring.dependency-managementversion

由于我们正在开发一个 Web 应用程序,因此我们添加了一个依赖项。 在此之前,我们可以通过运行以下命令来查看我们当前拥有的内容:spring-boot-starter-web

$ gradle dependencies> Task :dependencies------------------------------------------------------------
Root project 'myproject'
------------------------------------------------------------

该命令打印项目依赖项的树表示形式。 目前,该项目没有依赖项。 要添加必要的依赖项,请在以下部分中编辑 并添加依赖项:gradle dependenciesbuild.gradlespring-boot-starter-webdependencies

dependencies {implementation 'org.springframework.boot:spring-boot-starter-web'
}

如果您再次运行,您会看到现在有许多额外的依赖项,包括 Tomcat Web 服务器和 Spring Boot 本身。gradle dependencies

编写代码

要完成我们的应用程序,我们需要创建一个 Java 文件。 默认情况下,Maven 和 Gradle 从 编译源代码,因此您需要创建该目录结构,然后添加一个名为包含以下代码的文件:src/main/javasrc/main/java/com/example/MyApplication.java

package com.example;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@SpringBootApplication
public class MyApplication {@RequestMapping("/")String home() {return "Hello World!";}public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}}

虽然这里没有太多代码,但正在发生很多事情。 我们将在接下来的几节中逐步介绍重要部分。

@RestController和@RequestMapping注释

我们类的第一个注释是 @RestController。 这称为构造型注释。 它为阅读代码的人和 Spring 提供了类扮演特定角色的提示。 在这种情况下,我们的类是一个 Web @Controller,因此 Spring 在处理传入的 Web 请求时会考虑它。MyApplication

@RequestMapping注释提供“路由”信息。 它告诉 Spring 任何具有路径的 HTTP 请求都应映射到该方法。 @RestController Comments 告诉 Spring 将生成的字符串直接呈现回调用者。/home

  @RestController 和 @RequestMapping 注释是 Spring MVC 注释(它们不是特定于 Spring Boot 的)。 有关更多详细信息,请参阅 Spring 参考文档中的 MVC 部分。

@SpringBootApplication注释

第二个类级注解是@SpringBootApplication。这个注解被称为元注解,它结合了@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan

其中,我们在这里最感兴趣的注释是 @EnableAutoConfiguration@EnableAutoConfiguration 告诉 Spring Boot 根据您添加的 jar 依赖项“猜测”您想要如何配置 Spring。由于添加了 Tomcat 和 Spring MVC,自动配置假设您正在开发一个 Web 应用程序并相应地设置 Spring。spring-boot-starter-web

启动器和自动配置

自动配置旨在与启动器配合使用,但这两个概念并不直接相关。 您可以自由选择启动器之外的 jar 依赖项。 Spring Boot 仍然会尽最大努力自动配置您的应用程序。

“主要”方法

我们应用程序的最后一部分是方法。这是一个遵循应用程序入口点的 Java 约定的标准方法。我们的 main 方法通过调用 委托给 Spring Boot 的 SpringApplication 类。SpringApplication 引导我们的应用程序,启动 Spring,而 Spring 又启动自动配置的 Tomcat Web 服务器。我们需要作为参数传递给该方法,以告诉 SpringApplication 哪个是主要 Spring 组件。该数组也被传递以公开任何命令行参数。mainrunMyApplication.classrunargs

运行示例

专家

此时,您的应用程序应该可以工作。 由于您使用了 POM,因此您有一个有用的目标,可用于启动应用程序。 从根项目目录键入以启动应用程序。 您应该会看到类似于以下内容的输出:spring-boot-starter-parentrunmvn spring-boot:run

$ mvn spring-boot:run.   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::  (v3.5.7)
....... . . .
....... . . . (log output here)
....... . . .
........ Started MyApplication in 0.906 seconds (process running for 6.514)

如果打开 Web 浏览器 ,您应该会看到以下输出:localhost:8080

Hello World!

要正常退出应用程序,请按 。ctrl-c

Gradle

此时,您的应用程序应该可以工作。 由于您使用了 Gradle 插件,因此您有一个有用的目标,可用于启动应用程序。 从根项目目录键入以启动应用程序。 您应该会看到类似于以下内容的输出:org.springframework.bootbootRungradle bootRun

$ gradle bootRun.   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::  (v3.5.7)
....... . . .
....... . . . (log output here)
....... . . .
........ Started MyApplication in 0.906 seconds (process running for 6.514)

如果打开 Web 浏览器 ,您应该会看到以下输出:localhost:8080

Hello World!

要正常退出应用程序,请按 。ctrl-c

创建可执行 Jar

我们通过创建一个完全独立的可执行 jar 文件来完成我们的示例,我们可以在生产中运行该文件。可执行 jar(有时称为“uber jars”或“fat jar”)是包含已编译类以及代码运行所需的所有 jar 依赖项的存档。

可执行 jar 和 Java

Java 没有提供加载嵌套 jar 文件(本身包含在 jar 中的 jar 文件)的标准方法。 如果您希望分发一个独立的应用程序,这可能会有问题。

为了解决这个问题,许多开发人员使用“uber”jar。 超级 jar 将所有应用程序依赖项中的所有类打包到一个存档中。 这种方法的问题在于,很难看到应用程序中有哪些库。 如果在多个 jar 中使用相同的文件名(但内容不同),也可能会出现问题。

Spring Boot 采用了不同的方法,允许您直接嵌套 jar。

专家

要创建一个可执行的 jar,我们需要将 添加到我们的 . 为此,请在该部分下方插入以下行:spring-boot-maven-pluginpom.xmldependencies

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>
  POM 包括绑定目标的配置。 如果您不使用父 POM,则需要自己声明此配置。 有关详细信息,请参阅插件文档。spring-boot-starter-parent<executions>repackage

保存并从命令行运行,如下所示:pom.xmlmvn package

$ mvn package[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building myproject 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] .... ..
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ myproject ---
[INFO] Building jar: /Users/developer/example/spring-boot-example/target/myproject-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:3.5.7:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

如果您查看目录,您应该会看到 。 该文件的大小应约为 18 MB。 如果你想偷看里面,你可以使用 ,如下所示:targetmyproject-0.0.1-SNAPSHOT.jarjar tvf

$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar

您还应该看到目录中命名的一个小得多的文件。 这是 Maven 在被 Spring Boot 重新打包之前创建的原始 jar 文件。myproject-0.0.1-SNAPSHOT.jar.originaltarget

要运行该应用程序,请使用以下命令,如下所示:java -jar

$ java -jar target/myproject-0.0.1-SNAPSHOT.jar.   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::  (v3.5.7)
....... . . .
....... . . . (log output here)
....... . . .
........ Started MyApplication in 0.999 seconds (process running for 1.253)

和以前一样,要退出应用程序,请按 。ctrl-c

Gradle

要创建一个可执行的 jar,我们需要从命令行运行,如下所示:gradle bootJar

$ gradle bootJarBUILD SUCCESSFUL in 639ms
3 actionable tasks: 3 executed

如果您查看目录,您应该会看到 。 该文件的大小应约为 18 MB。 如果你想偷看里面,你可以使用 ,如下所示:build/libsmyproject-0.0.1-SNAPSHOT.jarjar tvf

$ jar tvf build/libs/myproject-0.0.1-SNAPSHOT.jar

要运行该应用程序,请使用以下命令,如下所示:java -jar

$ java -jar build/libs/myproject-0.0.1-SNAPSHOT.jar.   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::  (v{version-spring-boot})
....... . . .
....... . . . (log output here)
....... . . .
........ Started MyApplication in 0.999 seconds (process running for 1.253)

和以前一样,要退出应用程序,请按 。ctrl-c

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/949173.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025.10.28总结

今天做了23年上半年软考下午题,整体来说,前四道题没那么难,需要熟悉题型看教程, 最后一道用c++/java的挖空填代码的题,没搞懂,可能是之前没做过或做的少,或者是对java,c++语法,忘的差不多了,那题一点思路也没…

代码大全2阅读笔记(1)

一、为什么《代码大全 2》值得反复读? 作为软件工程领域的 “圣经”,《代码大全 2》最颠覆我的认知是:编码的核心不是 “实现功能”,而是 “写出易理解、易维护、可扩展的高质量代码”。很多时候我们急于动手写代码…

进程与进程间通信(IPC)

进程在 Python 中,进程(Process) 是操作系统进行资源分配和调度的基本单位,指一个正在运行的 Python 程序实例。每个进程拥有独立的内存空间、文件描述符、全局变量等资源,进程之间相互隔离(默认无法直接共享数据…

QT:键盘事件(添加资源图片)

通过键盘的上、下、左、右方向键可以控制图标的移动,移动的步进值 为风格的大小,如果 同时按下CTRL键,则实现细微移动;若按下HOME键,则光标回到界面的左上顶点;若按下 END键,则光标到达界面的右下顶点。键盘事件…

2025.10.28

依旧早八一天课,晚上开会,累累的

docker desktop:更新WSL2+安装nginx

1.打开Windows系统的虚拟化(任务管理器内的CPU栏可以查看对应情况) 如果没开,查电脑型号去bios打开搜索启用或关闭Windows功能,打开下面两项 2.官网下载docker desktop,正常步骤安装,记得勾选WSL2 3.解决WSL问题…

# 学代码--看懂了但是不会写

1.1 怎么回事啊 !!! 在学习书上或者网上的代码的时候,经常会出现一种困惑:那就是初看代码,诶,我好像懂了诶。 但是要开始写的时候,就比较难下手了。我这个时候经常想:我刚刚,不是学过了吗?没学会吗哈哈哈哈…

2025-10-28 aoao Round 比赛总结

比赛链接 比赛时的状态 be like:我靠,这题怎么这么难?T1 就开始上难度了? 没一道题会写,不会要爆零然后遗憾离场了吧? (想了 2147483647 种 T1 的假做法) (去体检,在测血压时)等会,我好像想明白 T1 的本质了…

P11307 [COTS 2016] 建造费 Pristojba 分析

题目概述 这是一个 \(n\) 个点的无向图 \(G\),然后给你 \(m\) 次操作。 给你每个点的点权 \(p_i\),定义一条边 \((i,j)\) 的边权为 \(p_i+p_j\) 每个操作对应 \((x,l,r)\) 保证 \(x\notin [l,r]\)。 然后对于所有的 …

程序员如何打破职业瓶颈?先搬开这3块绊脚石。

程序员的职业路不算长,可不少人早早就遇到了 “天花板”:想提升没方向,想突破没抓手,这就是让人头疼的 “瓶颈期”。是什么让我们陷入这种困境?又该怎么走出来?咱们一点点说清楚。 摆烂心态 在程序员不算长的职业…

文件清理,推荐几款常用软件

文件清理,推荐几款常用软件给大家汇总如下表格,根据自己的情况自行选择: 您的资助是我最大的动力!金额随意,欢迎来赏!付款后有任何问题请给我留言。 如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的…

AI时代的设计师:从工具到“超人”的进化之路

最近刷到几则关于AI和设计领域的新闻,感觉挺有意思的。站酷发布了AI设计Agent,美图CEO吴欣鸿在演讲中提到AI正让设计师变成“超人”,而另一边,Meta的裁员风波又让人对AI行业的就业前景捏把汗。先说说AI工具如何改变…

MyBatis 动态 SQL 实现原理 - Higurashi

总结自(部分调整):MyBatis 3 源码深度解析SqlSource 与 BoundSql 详解 在介绍原理之前,我们首先需要了解 MyBatis 中和 SQL 语句有关的两个组件,即 SqlSource 和 BoundSql。SqlSource:代表 Java 注解或者 XML 文…

bililun

实验任务1 源代码 T.cpp#include "T.h" #include <iostream> #include <string>// 类T实现// static成员数据类外初始化 const std::string T::doc{"a simple class sample"}; const…

《程序员修炼之道:从小工到专家》观后感第二篇

《代码之美——DRY原则与简洁代码的实效哲学》 核心观点:“不要重复自己(DRY)”是编码的黄金法则,冗余代码会直接推高维护成本与bug发生率,而简洁、自解释的代码是系统可维护性的核心保障。 案例分析:某社交平台…

【学习笔记】数据结构全家桶

Data Structure前言 2025.10.28: 一时兴起建了这个,原因是刚刚学了KTT qwq 我如果塞完这个东西应该都大学几年级了吧 没事慢慢弄 正文 线段树 KTT点我展开看代码 #include<bits/stdc++.h> #define rep(i, l, r…

社区

社区报告名称:AR(Active Area Reverse)fin cut工艺参数与表征指标数据分析报告 版本:V1.0 日期:2025-09-05 编制人:李晓睿 审核人:[姓名/部门] 1. 数据收集报告 1.1 数据来源来源:AR(AA Reverse)fin cut工艺…

「Gym 102759I」Query On A Tree 17

题目大意 给定一颗 \(N\) 个节点以 \(1\) 为根的有根树,每次给以 \(u\) 为根的子树每点加 \(1\) 的值或给路径 \(u - v\) 上每点加 \(1\) 的值,每次修改后查询一个点 \(u\) 使得 \(\sum_{v = 1}^N dis(u, v)\) 最小。…

Mybatis使用简述

什么是 MyBatis? MyBatis 是一款优秀的 Java 持久层框架,它通过 XML 或注解的方式将 Java 对象与数据库中的记录进行映射。与传统的 JDBC 相比,MyBatis 极大地简化了数据库操作代码,让开发者能够更专注于业务逻辑而…