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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值