[Spring Boot实战] 如何快速地创建spring boot项目

news2024/12/22 16:11:02

文章目录

    • 一、背景说明
    • 二、环境说明
    • 三、创建步骤
      • 3.1 选择项目JDK版本和Initializer服务地址
      • 3.2 设置项目的元数据
      • 3.3 引入依赖
      • 3.4 选择项目路径
    • 四、额外的工作
    • 五、问题
      • 5.1 为什么使用Lombok?

cover

一、背景说明

使用spring boot创建JAVA项目,是目前比较主流的一种方式。因为其具备的“约定大于配置”的特性,大大简化了软件开发的过程,使得开发人员能将更多的精力集中在业务领域,为终端用户提供更有价值的东西。

所谓的约定大于配置,维基百科的解释如下:

约定优于配置(convention over configuration),也称作按约定编程,是一种软件设计范式,旨在减少软件开发人员需做出决定的数量,活得简单的好处,而又不失灵活性。

通俗一点讲:就是通过约束减少配置(并非零配置)。例如:在Spring Boot项目中,如果导入了 spring-boot-starter-web 依赖,就相当于和 Spring Boot 约定了我的项目是一个web项目,需要web开发环境,那么 Spring Boot 就会认为你会使用 Spring MVC,所有相关的默认配置都会导入进来。如果某些配置不满足你的需求,你就可以通过配置的方式进行调整。这样就同时兼顾了约定配置

Spring Boot 中的约定往往以starter的方式出现。使用starter可以减少项目pom中的依赖,Spring Boot 因此推出了不少常用的 starter。

二、环境说明

该篇的主题是如何快速地创建 Spring Boot 项目,所以这是一篇实战型的文章,旨在告诉读者一种方法论。那么,就有必要交代一下项目的创建环境和所使用的工具。

操作系统:win10 专业版
JDK版本:jdk1.8
开发工具:IDEA - ultimate版本 2019.3

在创作这篇文章时,JDK的最新版本已经是 22。这里我们不打算使用最新的JDK版本,而是基于目前使用较多的JDK 8来创建我们的项目。

三、创建步骤

该篇将讲解如何使用 spring initializer 快速地创建 spring 项目。

3.1 选择项目JDK版本和Initializer服务地址

通过菜单:【File】-> 【New】-> 【Project…】,打开 New Project 对话框(项目新建窗口)。
选择其中的 Spring Initializer 。如下图:
在这里插入图片描述
Project SDK:选1.8 (即java 8)
Initializer Service URL:选择默认(即官方地址:https://start.spring.io)

本步骤注意点:

Project SDK的版本和后面的JDK版本需要保持一致。

然后进入下一步。

3.2 设置项目的元数据

项目的元数据结构如下:
元数据
参数说明:

  • Group:指项目所属组织的名称。一般为com.公司名/组织名。比如腾讯的项目可能会起名为 com.tencent
  • Artifact:字面意思是制品。其实就是项目的名称。如:user-api(用户接口)或是 user.api 。前一种命名比较常用一些,有些组织也会使用后面的命名方式。这个名称就是项目打包后的jar包或是war包的名称
  • Type:选择项目具体的构建方式。是使用Gradle还是Maven。一般选Maven。

Maven还细分为两种选项:

  1. Maven POM (Generate a Maven pom.xml)
  2. Maven (Generate a Maven based project archive.)
     
    建议选择第2个,因为第1个选项只会生成pom文件,而第2个选项会自动生成项目目录结构以及基本的设置(如源码目录、启动类、测试代码目录等)
  • Language:指用于开发的语言。有三个选项:Groovy、Kotlin和Java。一般选Java
  • Packaging:指项目的打包方式,是打成Jar包还是War包。
  • Java Version:这里是JDK的版本。目前可选的最低版本是17,因为前面Project SDK的版本指定了1.8,这里在项目创建后需要手动调整。
  • Version:这里指本项目的版本。保持默认的 0.0.1-SNAPSHOT
  • Name:本项目的名称。默认和制品的名称是保持一致的
  • Description:是对项目用途的简短描述
  • Package:项目的base package。比如:com..tencent.sms.api

本步骤注意点:

Type的选择。错误的选择会增加需要工作量

3.3 引入依赖

这一步的作用是向项目中引入maven依赖,因为我打算创建一个api项目,所以需要引入 Spring Web。同时为了简化代码的编写,特意引入了 Lombok 组件。
最终的选择如下:
依赖
下一步后,进入项目目录的选择。

3.4 选择项目路径

Project name会自动带入,和制品名称保持一致
项目的路径需要自行指定。这里的路径就是项目的根路径

设置如下:
根路径
如果设置的路径不存在,IDEA会提示你:路径不存在,是否进行创建
一切确认无误后,点击“完成”(Finish)按钮后,一个最小功能集的 spring boot 项目就创建好了。

本步骤注意点:

根路径就是 Project location ,而并非 Project location + Project name

一般到这里,项目的创建过程就可以结束了。但是,为了项目能正常运行,我们还需要一些额外的工作。

四、额外的工作

首先,我们需要调整一下spring boot的版本,我本地是无法下载 3.3.0.RELEASE 版本的。所以,我将其调整为 2.3.10.RELEASE

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

另外,我们还需要调整下JDK的版本,方法就是改变java版本的属性值:

<properties>
    <java.version>1.8</java.version>
</properties>

此时,我们启动一下项目,发现是可以正常启动的。通过IDEA是可以查看项目的所有Bean的。
在这里插入图片描述
 
但是端点中的 HealthMappings 功能是无法使用的。
原因是 健康监控功能没有启用。

可在pom中增加如下依赖,开启健康监控:

<!--健康监控-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

actuator的英文本意是:执行器、驱动器、传动装置。

增加该依赖后,重新启动项目,再次查看端点:

Health(健康)
Health
Health显示两块信息:

  • 磁盘
  • 能否ping通

Mappings(映射)
映射
映射功能则是展示了项目所有对外暴露的接口。

为了接下来能愉快地写代码,我们需要将代码加入版本控制。目前比较主流的版本控制软件有git和svn,而git更加适合代码的管理,因为其被设计为一款分布式版本控制软件,因而具有更好的安全性(不会因为中心服务器的宕机而丢失代码)。

 
我们假设编码所在的机器已经正确安装了git。然后我们打开到代码的根目录,打开Git bash。执行如下命令:

# 初始化本地仓库
git init
# 添加文件到“暂存区”
git add .
# 提交代码到本地仓库
git commit -m 'init project'

# 在执行下面命令前,需要在远程创建仓库
# 为本地仓库指定远程仓库的地址 => 关联了本地和远程git仓库
git remote add origin https://gitee.com/xxxx/some-api.git
# 推送本地代码到远端
git push -u origin master
# or
#git push --set-upstream origin master

在版本控制软件的加持下,我们可以大胆地编写代码,而无需担心代码丢失和冲突的问题。

五、问题

5.1 为什么使用Lombok?

答:在项目中使用Lombok,主要为了减少一些代码的编写
如使用@Data注解,在实体类中无需再显式地编写getter和setter方法,特别是一些字段特别多的实体类,大量的getter和setter显得非常多余。

在传统写法中,如果我们需要使用日志,就需要在类中添加如下代码:

import java.util.logging.*;
...
public class LoggerDemo {
	Logger log = Logger.getLogger("com");
	...
}

如果使用的是slf4j,代码可能是这样的:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
...
public class LoggerFactoryDemo {
	private static final Logger LOGGER = LoggerFactory.getLogger(LoggerFactoryDemo.class);
	...
}

而如果使用lombok,则只需要在类上添加@Slf4j就可以了。

import lombok.extern.slf4j.Slf4j;
...

@Slf4j
public class LoggerDemo {
	public void someMethod(){
		//log可直接使用
		log.info("this is a log message!");
	}
}

类的继承时可能会用到注解@EqualsAndHashCode,指定是否在equals方法中调用基类的equals和hashCode方法。

@EqualsAndHashCode(callSuper = true)
@Data
public class OrderListRequest extends PageRequest {

    @ApiModelProperty(value = "关键字")
    private String keyword;

    @ApiModelProperty(value = "主键id")
    private List<Integer> idList;
    ...
}

 
 
 
 
 


参考:
《如何理解 Spring Boot 中的约定优于配置》:
https://juejin.cn/post/7024854083223683085

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

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

相关文章

数据结构与算法笔记:基础篇 - 红黑树(下):掌握这些技巧,你也可以实现一个红黑树

概述 红黑树是一个让人又爱又恨的数据结构&#xff0c;“爱” 是因为它稳定、高性能&#xff0c;“恨” 是因为实现起来实在太难了。本章讲红黑树的实现&#xff0c;对于基础不太好的同学&#xff0c;理解起来可能会有些困难。但是&#xff0c;我觉得没有必要去死磕它。 为什…

一个公用的数据状态修改组件

灵感来自于一项重复的工作&#xff0c;下图中&#xff0c;这类禁用启用、审核通过不通过、设计成是什么状态否什么状态的场景很多。每一个都需要单独提供接口。重复工作还蛮大的。于是&#xff0c;基于该组件类捕获组件跳转写了这款通用接口。省时省力。 代码如下&#xff1a;…

专业学习|博弈论-课程沿革

学习来源&#xff1a;北京大学刘霖《博弈论》MOOC公开课 备注&#xff1a;仅做学习分享&#xff0c;请勿转载&#xff0c;转载必究&#xff01; &#xff08;一&#xff09;博弈论的预备知识 基本的微积分的知识和概率论的知识。简单的说会求导数&#xff0c;会求简单的积分&am…

文案策划日常大公开:掌握这些技巧,让你工作效率翻倍

本周的工作和生活安排得满满当当&#xff0c;但这些看似繁重的任务&#xff0c;其实都是我利用碎片化时间高效完成的。 这里和大家分享一下&#xff0c;我是如何在这忙碌的一周中&#xff0c;既完成本职工作又享受生活的。 本周工作日常汇总&#xff1a; 1. 品牌小红薯笔记&…

Java高阶数据结构-----并查集(详解)

目录 &#x1f9d0;一.并查集的基本概念&实例&#xff1a; &#x1f92a;二.并查集代码&#xff1a; &#x1f602;三&#xff1a;并查集的一些习题&#xff1a; A.省份数量 B.等式方程的可满足性 &#x1f9d0;一.并查集的基本概念&实例&#xff1a; 并查集概念&…

5.3 数据模型设计总结

概述&#xff1a; 数据模型设计是指根据需求和目标设计出合适的数据模型的过程。数据模型是对现实世界中数据的抽象和表示&#xff0c;它定义了数据的结构、关系和约束。数据模型设计的目标是保证数据的一致性、完整性和可用性&#xff0c;同时满足系统性能和可扩展性的要求。…

Python基础教程(十二):模块

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

【Java】解决Java报错:IOException during File Operations

文章目录 引言一、IOException的定义与概述1. 什么是IOException&#xff1f;2. IOException的常见触发场景3. 示例代码 二、解决方案1. 检查文件是否存在2. 使用try-with-resources语句3. 捕获和处理IOException4. 使用NIO进行文件操作 三、最佳实践1. 检查文件状态2. 使用try…

为什么你应该本地化你的软件

本地化您的软件是一项战略举措&#xff0c;可以显著提高其成功率和影响力。以下是您应该投资于软件本地化的几个令人信服的原因&#xff1a; 扩大您的市场覆盖范围 通过本地化您的软件&#xff0c;您可以开拓新市场并接触到更广泛的受众。许多用户更喜欢甚至需要他们母语的软…

(十二)人工智能应用--深度学习原理与实战--模型编译及训练参数的选择

神经网络模型的编译实际上是为网络指定几个非常重要的运行参数,包括优化器、损失函数(误差函数】和评价指标,这三者也代表着神经网络的核心运行机制----通过损失函数来计算网络误差、通过优化器来调整网络参数以降低误差、通过评价指标来衡量网络的性能。神经网络训练时除了…

【漏洞复现】Rejetto HTTP文件服务器 未授权RCE漏洞(CVE-2024-23692)

0x01 产品简介 Rejetto HTTP File Server(HFS)是一个基于HTTP协议的文件服务器软件&#xff0c;旨在为用户提供简单、轻量级且易于使用的文件共享解决方案。功能强大、易于使用的文件服务器软件&#xff0c;无论是个人使用还是团队协作&#xff0c;HFS都能满足用户的需求&…

平价蓝牙耳机推荐有哪些?四款平价顶尖机型盘点

对于预算有限但又追求高品质音效的朋友们&#xff0c;平价蓝牙耳机成为了一个非常实用的选择&#xff0c;在市面上琳琅满目的蓝牙耳机中&#xff0c;挑选出性价比极高且性能出众的款式并不容易&#xff0c;作为一个多年的蓝牙耳机发烧友&#xff0c;接下来我就将为大家盘点四款…

《精通ChatGPT:从入门到大师的Prompt指南》第7章:创意写作

第7章&#xff1a;创意写作 7.1 角色设定 角色设定是创意写作中最关键的环节之一。成功的角色设定能够让读者对故事产生共鸣&#xff0c;使故事更加生动有趣。角色不仅仅是情节发展的载体&#xff0c;更是读者情感的投射对象。因此&#xff0c;深入了解如何设定一个生动而有深…

如何使用免费的 Instant Data Scraper快速抓取网页数据

Instant Data Scraper 是一款非常简单易用的网页数据爬虫工具&#xff0c;你不需要任何代码知识&#xff0c;只需要点几下鼠标&#xff0c;就可以把你想要的数据下载到表格里面。以下是详细的使用步骤&#xff1a; 第一步&#xff1a;安装 Instant Data Scraper 打开谷歌浏览…

java:一个springfox swagger2的简单例子

# 示例程序 【pom.xml】 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.3.12.RELEASE</version> </dependency> <dependency><groupId>…

【每日刷题】Day61

【每日刷题】Day61 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 671. 二叉树中第二小的节点 - 力扣&#xff08;LeetCode&#xff09; 2. 2331. 计算布尔二叉树的值…

02-DHCP原理与配置

1、DHCP的工作原理 当局域网中有大量的主机时&#xff0c;如果逐个为每一台主机手动设置IP地址、默认网关、DNS服务器地址等网络参数&#xff0c;这显然是一个费力也未必讨好的办法。 而DHCP服务器的应用&#xff0c;正好可以解决这一问题。 1.1 DHCP是什么 DHCP——动态主机…

单片机多个中断源时的设计思路,(51为例)工作寄存器R0-R7

51单片机中四组工作寄存器&#xff08;R0-R7&#xff09; 参考 可以看出每个工作寄存器区有8个字节即为R0-R7&#xff0c;当不指定使用哪个工作寄存器区的时候默认0区。其他工作区作为普通的RAM使用。特殊功能寄存器中有可以位寻址和不能位寻址的区域 下面文字引用 通过修改…

ABB机器人修改IO信号的具体方法介绍

ABB机器人修改IO信号的具体方法介绍 具体步骤可从参考以下内容: 导出IO配置文件 打开【控制面板】-【配置】-【I/O System】-【文件】-【‘EIO’另存为】,就可以保存IO配置文件【EIO.cfg】用RobotStudio软件打开EIO.cfg文件在软件界面,鼠标右击,选择【I/O信号数据编辑器】选…

嵌入式八股文

C/C基础 C和C有什么区别 C是⾯向对象的语⾔&#xff0c;⽽C是⾯向过程的语⾔&#xff1b; C引⼊ new/delete 运算符&#xff0c;取代了C中的 malloc/free 库函数&#xff1b; C引⼊引⽤的概念&#xff0c;⽽C中没有&#xff1b; C引⼊类的概念&#xff0c;⽽C中没有&#xff…