Spring Boot快速入门:HelloWorld示例

Spring Boot是一个非常流行,受欢迎的框架,它不仅常用于构建传统的单体式MVC应用程序,同时也非常适合用于搭建微服务架构。对于 Web 应用程序,Spring Boot 提供了用于创建 REST API、处理 HTTP 请求和使用 Thymeleaf 等模板引擎呈现视图的工具。同样,对于微服务,Spring Boot 通过使用其服务发现、负载平衡和配置管理等功能来支持 Spring Cloud。

本文向初学者介绍了 Spring boot 框架,并一步步引导创建第一个 Spring boot 项目,主要功能是显示 hello world 消息。

Spring Boot简介

Spring Boot 是一个开源框架,可简化基于 Spring 的应用程序的开发。Spring Boot 建立在 Spring Framework 之上,并提供各种工具、库和约定来简化应用程序的配置和部署。

Spring Boot 对 Spring 平台和第三方库有着独特的集成方式。当你在类路径中添加这些库时,Spring Boot 会自动检测并配置这些库中最常用的功能。即便如此,它也允许你覆盖、自定义或是完全禁用任何模块或库的自动配置。

例如,如果我们想在应用程序中添加持久化功能,我们只需在项目中添加 spring-boot-starter-data-jpa 依赖项,这样 Spring Boot 就会自动为我们执行以下操作:

  • 引入必要的依赖项,如 Jakarta Persistence API (JPA) 和 Hibernate 等。
  • 设置数据源 (DataSource)、EntityManagerFactory 以及事务管理 (PlatformTransactionManager)。
  • 扫描应用程序的类路径以查找带有 @Entity 注解的类,并将其注册到 Spring 上下文中。
  • 扫描 JpaRepository 或相关接口,并对其进行配置以支持基本的 CRUD 操作。
  • 从 application.properties 文件中读取数据库连接属性,并建立与指定数据库的连接。
  • 配置默认的连接池(如 HikariCP),以优化数据库连接并有效地重用它们。

如果没有 Spring Boot,我们需要手动配置上述所有功能。Spring Boot 的自动配置消除了这种麻烦,为我们自动完成了这些配置工作。然而,如果默认配置不满足需求,我们可以通过创建特定的 Bean 或编写自定义属性来进一步定制上述任何功能。

Spring Boot显著特性

Spring Boot框架在任何普通应用程序中通常提供以下功能:

  • Spring Boot Starters:Starters 是常用功能的封装(如 Web 应用程序、持久化、国际化等)的预配置模板。我们在前面已经讨论了 spring-boot-starter-data-jpa 例子。
  • 自动配置:Spring Boot 采用“约定优于配置”的原则,并根据项目的依赖项和设置自动配置 Bean。这意味着当你添加某个库到类路径中时,Spring Boot 会自动检测并配置该库的必要组件。
  • 嵌入式服务器:Spring Boot 包含嵌入式的 Servlet 容器(默认为 Tomcat),这使得你无需外部服务器即可运行应用程序。这样可以简化开发环境的设置和部署流程。
  • Actuator功能:Spring Boot 提供了生产就绪的功能,例如健康检查、性能指标监控、安全性增强以及外部化配置支持。这些功能通过 Spring Boot Actuator 提供,帮助开发者在生产环境中更好地管理和监控应用。

Spring Boot 的局限性和缺点

凡事都有代价。Spring Boot 也不例外。以下是使用 Spring Boot 的限制或缺点:

  • 难以掌控所有细节:由于 Spring Boot 在后台自动执行了许多任务,新开发者可能会发现难以追踪所有细节。相比之下,如果不使用 Spring Boot,虽然需要手动编写更多代码并且耗时较长,但这能让开发者对系统有更多的控制权。
  • 使用非标准库时较麻烦:Spring Boot 的自动配置方法可能不总是符合特定项目的需求。例如,默认情况下,Spring Boot 使用 HikariCP 作为连接池实现。如果我们希望使用组织内部的自定义连接池,则可能需要额外的工作来覆盖或替换 Spring Boot 的默认配置。
  • 调试复杂:由于自动配置和背后的“魔法”,调试复杂的问题可能会更具挑战性。开发者可能难以完全理解各个组件是如何相互连接和协作的。

Spring Boot开发准备

在开始开发第一个Spring Boot应用程序之前,请确保我们具备以下条件:

  • Java 开发工具包 (JDK):Spring Boot 在 Java 上运行。对于 Spring Boot 3.x,最低要求版本为 Java 17。Spring Boot 2.x 要求最低 JDK 8 或更高版本。
  • 构建工具:Maven 或 Gradle 等构建工具将有助于管理项目的依赖项和构建过程。
  • 集成开发环境 (IDE):虽然也可以在文本编辑器中编写和运行应用程序,但使用 IntelliJ IDEA、Eclipse 或 Visual Studio Code 等 IDE 有助于实现代码完成、自动编译、调试和项目管理等功能。

此外,还需要具备 Java 编程和 Spring 框架的基本知识。这将帮助您更深入地理解 Spring Boot 的自动配置机制及其背后的工作原理。

创建 Spring Boot 项目

对于初学者来说,创建新的 Spring Boot 项目的最简单方法是使用 Spring Initializr 网站。它允许您在一个界面上选择首选的构建工具(如 Maven 或 Gradle)、Java 版本以及所需的项目依赖项。
在这里插入图片描述
选择所有首选项后,您可以将项目下载为 ZIP 文件,并在解压后将其作为现有的 Maven 项目导入 IDE。在本次演示中,我们可以使用 IntelliJ IDEA 来编写和执行代码。
在这里插入图片描述

Spring Initializr 生成的代码揭秘

接下来,让我们了解下应用程序中的代码结构和生成的文件。

工程结构

项目中的主要目录:

  • /src/main/java:包含应用程序的 Java 源代码。我们在此目录中编写所有新类和接口。
  • /src/test/java:包含应用程序的测试代码。所有新单元测试都放在此目录中。
  • /src/main/resources:包含应用程序使用的非 Java 资源。例如,属性文件、视图文件、配置文件等。

当我们构建应用程序时,所有编译后的文件都进入 /target 目录。构建工具从此目录生成部署存档文件(.jar 或 .war 文件)。

生成的文件

该工具生成的主要文件有:

MyFirstAppApplication.java

它包含作为应用程序运行时起点的 main() 方法。该类上通常会有 @SpringBootApplication 注解,该注解会触发自动配置和组件扫描,从而配置应用程序中的所有 Bean 并将它们注册到 Spring 应用程序上下文中。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class MyFirstAppApplication {public static void main(String[] args) {SpringApplication.run(MyFirstAppApplication.class, args);}
}

MyFirstAppApplicationTests.java

它包含 Junit 5 测试,用于对应用程序代码进行单元测试。我们可以在包中创建更多这样的类。

@SpringBootTest
class MyFirstAppApplicationTests {@Testvoid contextLoads() {}
}

application.properties

它包含配置特定模块所需的默认属性。默认情况下,它是空的。

pom.xml

这是管理项目依赖项和其他库的构建文件。我们可以通过此文件来添加或删除依赖项。

请注意,spring-boot-starter-parent 是一个特殊的 Maven 项目,它作为所有 Spring Boot 应用程序的父项目或超级 POM。它控制着启动器模块提供的默认功能及依赖库的版本。

spring-boot-maven-plugin 是由 Spring 团队提供的 Maven 插件,它简化了构建和打包 Spring Boot 应用程序的过程,使其可执行且易于部署。

<?xml version="1.0" encoding="UTF-8"?>
<project ...><modelVersion>4.0.0</modelVersion><!-- The parent is always the spring-boot-starter-parent --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.1</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.howtodoinjava.demo</groupId><artifactId>my-first-app</artifactId><version>0.0.1-SNAPSHOT</version><name>my-first-app</name><description>My First Application with Spring Boot</description><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

编写第一个Controller

生成的应用程序仅提供必要的基础架构,我们需要编写额外的业务逻辑来满足最终用户的需求。例如,我们可以编写一个简单的 REST API,它接收用户的输入,连接到后端数据库,并以 JSON 或 XML 格式返回适当的响应。

在本教程中,我们编写了一个简单的 API,它返回消息“Hello, World!”作为响应。我们创建一个新的类 HelloWorldController 并编写以下代码:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloWorldController {@GetMapping("hello")String hello() {return "Hello, World!";}
}

构建应用程序

创建控制器后,我们可以在 IDE 中直接测试 API,这正是 IDE 的便利之处。

如果不使用 IDE,则需要编译应用程序并将它构建为一个可执行的 JAR 文件。这个 JAR 文件可以从命令行像普通应用程序一样运行。

mvn build

它在/target目录下生成一个名为my-first-app-0.0.1-SNAPSHOT.jar的jar文件。我们可以在pom.xml文件中自定义生成的jar文件的名称。

<build><finalName>my-first-spring-boot-app</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>

现在我们再次运行“mvn package”命令,它会创建名为 my-first-spring-boot-app.jar 的 jar 文件。

运行并测试程序

要在开发环境中运行应用程序,我们可以直接从 IDE 运行。为此,右键单击 MyFirstAppApplication.java 并选择“运行 MyFirstAppApplication.main()` 选项。

执行上述操作后,应用程序将在嵌入式 Tomcat 服务器中运行,该服务器自动包含在 spring-boot-starter-web 模块中。
在这里插入图片描述
要从终端或命令提示符运行应用程序,我们可以使用以下命令:

mvn spring-boot:run

它从终端启动应用程序,我们可以在打印的日志中验证这一点。

[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------< com.howtodoinjava.demo:my-first-app >-----------------
[INFO] Building my-first-app 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] Attaching agents: [].   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::                (v3.1.2)2024-10-08T16:40:26.550+05:30  INFO 21616 --- [main] c.h.demo.MyFirstAppApplication           : Starting MyFirstAppApplication using Java 19-loom with PID 21616 (C:\Users\lokes\Downloads\my-first-app\my-first-app\target\classes started by lokesh in C:\Users\lokes\Downloads\my-first-app\my-first-app)
...
...
...
2024-10-08T16:40:28.085+05:30  INFO 21616 --- [main] c.h.demo.MyFirstAppApplication           : Started MyFirstAppApplication in 2.091 seconds (process running for 2.486)

应用程序启动后,我们可以访问 hello world API 来验证一切是否按预期工作。

curl -X GET http://localhost:8080/hello//Prints Hello, World!

常见问题解答

如何通过Maven创建Spring Boot应用程序

使用 Maven 创建 Spring boot 项目与创建任何其他普通 Web 项目类似。创建项目后,我们必须添加 pom.xml 以引用父 pom spring-boot-starter-parent 并创建/修改其他文件。

mvn archetype:generate -DgroupId=com.howtodoinjava.demo \
-DartifactId=my-first-app \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DinteractiveMode=false

如何通过Spring Boot CLI创建Spring Boot应用程序

Spring Boot CLI 是一个命令行工具,用于简化 Spring Boot 应用程序的开发。它提供了一种方便的方式来快速创建、开发和测试 Spring Boot 项目,而无需设置复杂的项目结构或手动配置依赖项。

我们可以从 Spring Boot 官方网站下载 CLI,也可以使用 SDKMAN 等包管理器进行安装。

安装 CLI 后,导航到我们要创建项目的目录,然后运行以下命令:

spring init --dependencies=web \
--build=maven \
--groupId=com.howtodoinjava.demo \
--artifactId=my-first-app \
--name=MyFirstApp

它将从头开始创建一个 Spring Boot 应用程序,您可以在自己喜欢的 IDE 中打开该项目并开始进行更改。

如何在 IntelliJ(或任何其他 IDE)中创建 Spring Boot 应用程序?

在 IntelliJ 或任何其他 IDE 中创建一个新的 Spring boot 项目与任何其他非 Spring boot 应用程序类似。我们通过选择适当的 maven 坐标和属性来创建一个普通的 Java 项目。在这里插入图片描述
创建项目后,我们必须修改pom.xml以获取父pom引用并导入附加的spring boot启动模块和插件。

总结

本 Spring Boot 教程涵盖了该框架的基本概念,包括其功能、优势和潜在局限性。接着,我们探讨了启动简单 Spring Boot 项目的不同方法,例如使用 Spring Initializr 网站、命令行工具以及 IntelliJ 等 IDE。

我们开发了一个简单的 REST API,构建了该项目,并将其部署在嵌入式 Tomcat 服务器中。最后,我们测试了该 API,圆满结束了本次 Spring Boot 入门教程。

祝您学习顺利!

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

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

相关文章

介绍一下SAP 函数 NUMBER_GET_NEXT的妙用——获取SAP编码OBJECT

NUMBER_GET_NEXT 是 SAP 中用于获取下一个可用编号的函数模块&#xff0c;通常用于生成唯一的编号或序列号。这个函数模块的妙用在于它能够确保编号的唯一性和连续性&#xff0c;适用于需要生成订单号、发票号或其他业务对象编号的场景。 我在写ABAP程序时经常要调用这个函数来…

Oracle 数据库安装及配置

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

LSTM的变体

一、GRU 1、什么是GRU 门控循环单元&#xff08;GRU&#xff09;是一种循环神经网络&#xff08;RNN&#xff09;的变体&#xff0c;它通过引入门控机制来控制信息的流动&#xff0c;从而有效地解决了传统RNN中的梯度消失问题。GRU由Cho等人在2014年提出&#xff0c;它简化了…

45岁被裁员的程序员,何去何从?

在当今快速变化的技术行业&#xff0c;职业生涯的稳定性受到挑战。在45岁被裁员&#xff0c;对很多程序员来说&#xff0c;可能是一种惊慌失措的体验。然而&#xff0c;这个阶段也可以被视为一个重新审视和调整方向的机会。本文将对可能的出路进行全方位的分析&#xff0c;并提…

PHP泛目录生成源码,可生成长尾关键词页面,带使用方法视频教程

介绍&#xff1a; 真正的好东西&#xff0c;搞网站优化seo从业必备。可以快速提升网站权重&#xff0c;带来的流量哗哗的 PHP泛目录生成源码 可生成新闻页面和关键词页面 带使用方法视频教程 泛目录可以用来提升网站收录和排名 合理运用目录可以达到快速出词和出权重的效果…

[简单实践]Noisy Print - 自制基于加性噪声模型的简易降噪器

NoisyPrint 最近在学习的过程中&#xff0c;突然想起一个在Adobe Audition中用过的功能。 为什么会想到这个功能呢&#xff0c;因为在我使用DeepFilter的过程中&#xff0c;我发现对于一些低信噪比的信号来说&#xff0c;DeepFilter很容易出现过拟合现象&#xff0c;导致音源…

使用Git生成SSH密钥教程(附Git常用命令)

一、为什么使用SSH&#xff1f; 使用 Git 的 SSH&#xff08;安全外壳协议&#xff09;主要有以下几个原因&#xff1a;1. 安全性&#xff1a;SSH 是一种加密的网络协议&#xff0c;用于在网络中安全地运行网络服务。使用 SSH&#xff0c;所有传输的数据都会被加密&#xff0c…

Mysql高级篇(下)——数据库备份与恢复

Mysql高级篇&#xff08;下&#xff09;——数据库备份与恢复 一、物理备份与逻辑备份1、物理备份2、逻辑备份3、对比4、总结 二、mysqldump实现逻辑备份1、mysqldump 常用选项2、mysqldump 逻辑备份语法&#xff08;1&#xff09;备份一个数据库&#xff08;2&#xff09;备份…

微服务架构---认识Zuul

目录 认识Zuul简单的例子 第一个Zuul程序步骤1&#xff1a;创建父工程zuul-1步骤2&#xff1a;创建HystrixController类步骤3&#xff1a;搭建服务消费者eureka-consumer项目&#xff08;1&#xff09;创建一个config包&#xff0c;在config包下新建配置类RestConfig&#xff0…

HCIP-HarmonyOS Application Developer 习题(八)

&#xff08;填空&#xff09;1、声明式开发范式中使用装饰器( )装饰的结构体具有组件化能力&#xff0c;能够成为一个自定义组件。 答案&#xff1a;component 分析&#xff1a;component 装饰的struct表示该结构体具有组件化能力&#xff0c;能够成为一个独立的组件&#xff…

基于springboot的篮球竞赛预约平台

作者&#xff1a;计算机搬砖家 开发技术&#xff1a;SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;Java精选实战项…

【C++篇】继承之韵:解构编程奥义,领略面向对象的至高法则

文章目录 C 继承详解&#xff1a;初阶理解与实战应用前言第一章&#xff1a;继承的基本概念与定义1.1 继承的概念1.2 继承的定义 第二章&#xff1a;继承中的访问权限2.1 基类成员在派生类中的访问权限2.2 基类与派生类对象的赋值转换2.2.1 派生类对象赋值给基类对象2.2.2 基类…

OkHttp

OkHttp是一个用于Android和Java应用的高效HTTP客户端库。它具有以下优点&#xff1a; 优点 高效连接池&#xff1a; 支持连接复用&#xff08;Connection Pooling&#xff09;减少延迟。有效管理HTTP/2多路复用。 透明压缩&#xff1a; 自动处理Gzip压缩&#xff0c;减少传输…

Label Studio 半自动化标注

引言 Label Studio ML 后端是一个 SDK,用于包装您的机器学习代码并将其转换为 Web 服务器。Web 服务器可以连接到正在运行的 Label Studio 实例,以自动执行标记任务。我们提供了一个示例模型库,您可以在自己的工作流程中使用这些模型,也可以根据需要进行扩展和自定义。 1…

dotnet7==windows ZIP方式安装和web demo和打包

下载ZIP Download .NET 7.0 (Linux, macOS, and Windows) 解压 创建项目 mkdir MyWebApp cd MyWebApp "C:\Users\90816\Downloads\dotnet-sdk-7.0.317-win-x64\dotnet.exe" new webapp -n MyWebApp 运行项目 "C:\Users\90816\Downloads\dotnet-sdk-7.0.317-…

k8s的简介和部署

一、k8s简介 在部署应用程序的方式上面&#xff0c;主要经历了三个阶段&#xff1a; 传统部署:互联网早期&#xff0c;会直接将应用程序部署在物理机上优点:简单&#xff0c;不需要其它技术的参与缺点:不能为应用程序定义资源使用边界&#xff0c;很难合理地分配计算资源&…

Docker 实践与应用举例

Docker 实践与应用举例 Docker 已经成为现代软件开发和部署中的重要工具&#xff0c;通过容器化技术&#xff0c;开发者可以轻松管理应用的依赖环境、简化部署流程&#xff0c;并实现跨平台兼容性。本篇博客将详细介绍 Docker 的基本概念、实践操作以及应用场景&#xff0c;帮…

【软件部署安装】OpenOffice转换PDF字体乱码

现象与原因分析 执行fc-list查看系统字体 经分析发现&#xff0c;linux默认不带中文字体&#xff0c;因此打开我们本地的windows系统的TTF、TTC字体安装到centos机器上。 安装字体 将Windows的路径&#xff1a; C:\Windows\Fonts 的中文字体&#xff0c;如扩展名为 TTC 与TT…

shell脚本写代码

用简单的test语句来判断是否闰年 #! /bin/bash read -p "sd " yearif [ $((year%4)) -eq 0 -a $((year%100)) -ne 0 -o $((year%400)) -eq 0 ]thenecho "是润年"elseecho "不是闰年" fi判断一个数是否为偶数 #! /bin/bash read -p "…

LINUX——内核移植、内核编译教程

Linux内核编译是一个将内核源代码转换成可在特定硬件架构上运行的二进制文件的过程。以下是编译Linux内核的一般步骤&#xff1a; 1、准备工作&#xff1a; 确保安装了必要的编译工具&#xff0c;如gcc、make、ncurses库&#xff08;用于make menuconfig&#xff09;等。 2、…