Spring Boot快速入门:HelloWorld示例

news2024/12/23 5:43:39

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 {

  @Test
  void 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.coloradmin.cn/o/2198092.html

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

相关文章

QD1-P1 HTML、CSS与JS三者之间的关系

今天开始学习前端基础&#xff0c;新建专题《前端学习笔记1》保存前端基础学习笔记。 专题文章命名以qd1开头。 源课程 视频教程&#xff1a;【Web前端-最通俗易懂HTML、CSS与JS合集 1天速成】 up&#xff1a;遥遥温柔乡 在B站随便搜索了一个前端课程&#xff0c;共91节&am…

美畅物联丨视频汇聚从“设”开始:海康威视摄像机设置详解

在运用畅联云平台进行视频汇聚与监控管理时&#xff0c;海康威视的安防摄像机凭借其卓越的性能与广泛的应用兼容性&#xff0c;成为了众多用户的首选产品。海康威视摄像机参数设置与调试对于实现高效的安防监控至关重要。今天&#xff0c;让我们一同深入学习海康摄像机的参数设…

【Unity实战篇】 接入百度翻译,实现文本自动翻译功能

前言【Unity实战篇】 接入百度自动翻译,实现文本自动翻译功能一、获取百度翻译开发平台的APPID和密钥二、Unity中接入自动翻译功能三、Unity中实现自动翻译文本Text功能总结前言 日常在做项目的过程中,游戏本地化几乎已经成为必不可少的一步。本篇文章将演示怎样在Unity中接入…

【万字长文】Word2Vec计算详解(三)

【万字长文】Word2Vec计算详解&#xff08;三&#xff09; 写在前面 第三部分介绍Word2Vec模型的两种优化方案。 【万字长文】Word2Vec计算详解&#xff08;一&#xff09;markdown行 9000 【万字长文】Word2Vec计算详解&#xff08;二&#xff09;markdown行 12000 【万字长文…

数据结构与算法篇(刷题篇 - 树)

目录 1. 二叉树的前序遍历&#xff08;简单&#xff09; 1.1. 题目描述 1.2. 解题思路 方法一&#xff1a;递归&#xff08;推荐使用&#xff09; 方法二&#xff1a;非递归&#xff08;扩展思路&#xff09; 2. 二叉树的中序遍历&#xff08;中等&#xff09; 2.1. 题目…

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

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

大数据毕业设计选题推荐-电影票房数据分析系统-Python数据可视化-Hive-Hadoop-Spark

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇…

Linux云计算 |【第四阶段】RDBMS2-DAY1

主要内容&#xff1a; MySQL主从同步&#xff08;概述、原理、构建主从同步&#xff09;、主从同步结构类型&#xff08;主多从、主从从、主主&#xff09;、复制模式&#xff08;异步、半同步&#xff09;、启用半同步复制 一、MySQL主从同步 MySQL 主从同步&#xff08;Mas…

工控风云 | 科东软件受邀参加2024 CCF工控“风云论坛”并做演讲

近日&#xff0c;CCF工业控制计算机专委会首届“风云论坛”在苏州CCF业务总部&学术交流中心成功召开。作为国内工业操作系统领军企业&#xff0c;科东软件受邀参加本次大会&#xff0c;并做“鸿道(Intewell)新型工业操作系统”主题演讲。 “要打好科技仪器设备、操作系统…

自动驾驶系列—超声波雷达技术详解:自动驾驶中的短距离感知利器

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

知识改变命运 数据结构【优先级队列(堆)】

优先级队列(堆&#xff09; 1&#xff1a;堆概念2&#xff1a;堆的创建(以小根堆为例)3&#xff1a;堆的插入与删除3.1 堆的插入3.2堆的删除 4&#xff1a;oj练习5&#xff1a;堆排序6接口介绍&#xff08;底层代码的查看&#xff09;6.1常用三种构造方法 前言&#xff1a;队列…

Flutter-->Namespace not specified.

更新Android gradle 7.5.0之后, 运行项目会出现Namespace not specified.问题, 这里出一个我的解决方案. 由于很多库都不可能及时更新适配gradle 7.5.0, 所以可以等pub get将子库拉取到本地之后, 在本地手动添加namespace属性,即可解决本文问题. 作为程序猿,那肯定不可能手动修…

Elasticsearch、Kibana学习

系列文章目录 JavaSE基础知识、数据类型学习万年历项目代码逻辑训练习题代码逻辑训练习题方法、数组学习图书管理系统项目面向对象编程&#xff1a;封装、继承、多态学习封装继承多态习题常用类、包装类、异常处理机制学习集合学习IO流、多线程学习仓库管理系统JavaSE项目员工…

鸿蒙--知乎评论

这里我们将采用组件化的思想进行开发 拆解组件 pages下&#xff0c;新建ZhiHu的文件pages下&#xff0c;新建components, 里面新建 HmNavBar和HmCommentItem components/HmNavBar.ets Entry Component struct HmNavBar {title: string 标题build() {Row() {// 返回键Row() {I…

数据湖数据仓库数据集市数据清理以及DataOps

一提到大数据我们就知道是海量数据&#xff0c;但是我们并不了解需要从哪些维度去考虑这些数据的存储。比如 数据湖、数据仓库、数据集市&#xff0c;以及数据自动化应用DataOps有哪些实现方式和实际应用&#xff0c;这篇文章将浅显的做一次介绍。 数据湖 数据湖是一种以自然…

Spring Boot 学习之路 -- Thymeleaf 模板引擎

前言 最近因为业务需要&#xff0c;被拉去研究后端的项目&#xff0c;代码框架基于 Spring Boot&#xff0c;后端对我来说完全小白&#xff0c;需要重新学习研究…出于个人习惯&#xff0c;会以 Blog 文章的方式做一些记录&#xff0c;文章内容基本来源于「 Spring Boot 从入门…

Python爬虫之正则表达式于xpath的使用教学及案例

正则表达式 常用的匹配模式 \d # 匹配任意一个数字 \D # 匹配任意一个非数字 \w # 匹配任意一个单词字符&#xff08;数字、字母、下划线&#xff09; \W # 匹配任意一个非单词字符 . # 匹配任意一个字符&#xff08;除了换行符&#xff09; [a-z] # 匹配任意一个小写字母 […

获取淘宝直播间弹幕数据的技术探索实践方法

在数字时代&#xff0c;直播已成为电商营销的重要渠道之一&#xff0c;而弹幕作为直播互动的核心元素&#xff0c;蕴含着丰富的用户行为和情感数据。本文将详细介绍如何获取淘宝直播间弹幕数据的技术方法和步骤&#xff0c;同时分析不同工具和方法的优缺点&#xff0c;并提供实…

夜莺监控的机器支持挂载到多个业务组了

夜莺开源项目于国庆前夕发布了 v7.4.1 版本&#xff0c;修复了一些 bug&#xff0c;同时也带来了一些新功能。其中最重要的一个功能是&#xff1a;机器支持挂载到多个业务组了。本文将介绍几个重要的变更。 所有变更点 feat: 左侧栏业务组新设计feat: 机器支持了绑定到多个业…

GAN(Generative Adversarial Nets)

GAN(Generative Adversarial Nets) 引言 GAN由Ian J. Goodfellow等人提出&#xff0c;是Ian J. Goodfellow的代表作之一&#xff0c;他还出版了大家耳熟能详的花书&#xff08;Deep Learning深度学习&#xff09;&#xff0c;GAN主要的思想是同时训练两个模型&#xff0c;生成…