文章目录
- 一、背景说明
- 二、环境说明
- 三、创建步骤
- 3.1 选择项目JDK版本和Initializer服务地址
- 3.2 设置项目的元数据
- 3.3 引入依赖
- 3.4 选择项目路径
- 四、额外的工作
- 五、问题
- 5.1 为什么使用Lombok?
一、背景说明
使用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还细分为两种选项:
- Maven POM (Generate a Maven pom.xml)
- 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的。
但是端点中的 Health 和 Mappings 功能是无法使用的。
原因是 健康监控功能没有启用。
可在pom中增加如下依赖,开启健康监控:
<!--健康监控-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
actuator的英文本意是:执行器、驱动器、传动装置。
增加该依赖后,重新启动项目,再次查看端点:
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