SpringBoot基础构建
前言
SpringBoot项目是基本上是我们目前开发一个JavaWeb项目的必备框架了,但是很多时候我们都没有去细致的了解一个SpringBoot的项目,以至于很多时候让我们搭建一个SpringBoot项目进行开发或者自己平常学习某项技术、SpringBoot结合某个中间件等等时,我们往往会有点懵,去其他项目找一个SpringBoot基础脚手架进行复制,然后删除一些多余的依赖或者配置,比较浪费时间,今天我们来细致的学习,了解一下SpringBoot基本依赖,最后我们可以非常迅速的搭建一个SpringBoot项目。
pom文件配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--引入SpringBoot Parent依赖-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.7</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!--当前项目的GAV坐标-->
<groupId>com.xintu.demo</groupId>
<artifactId>springboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!--maven项目名称,可以删除-->
<name>SpringBootCase</name>
<!--maven项目描述,可以删除-->
<description>Demo project for Spring Boot</description>
<!--maven属性配置,可以在其它地方通过${}方式进行引用-->
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<!--SpringBoot框架web项目起步依赖,通过该依赖自动关联其它依赖,不需要我们一个一个去添加了-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--SpringBoot框架的测试起步依赖,例如:junit测试,如果不需要的话可以删除-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<!--SpringBoot提供的打包编译等插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
首先定义pom文件的相关头信息、标签。
声明项目描述符遵循哪一个pom模型版本。
引入父级pom文件,继承父级POM配置的内容。
针对SpringBoot项目,Spring Boot项目必须使用父级依赖spring-boot-starter-parent。
这个父级依赖定义了很多当前项目的规范,包括Java编译版本、编码格式、依赖的版本、打包操作的配置、自动化的资源过滤和自动化的插件配置等。它还针对application.properties和application.yml进行了资源过滤,包括通过profile定义的不同环境的配置文件,例如application-dev.properties和application-dev.yml。
因此,如果不使用父级依赖spring-boot-starter-parent,这些规范和配置将无法在项目中生效。
公司名称、组织名称、一般命名为包名(包名,如com.xxx)。
项目通用名称(模块名称)。
对应项目(模块)版本号。
打包类型。如war、jar、maven-plugin、ejb、pom、ear、par、rar
用户描述项目的名称、可选。
项目主页的URL, Maven产生文档时用。
排除依赖管理(写在dependency中)。
具体要排除的依赖项。
对maven仓库进行路径指定。
具体仓库(有id、name、url子元素)。
自定义标签管理,依赖的版本统一管理(可在其内自定义标签名、值,用法同于el表达式:${标签名}得到其值)。
scope:管理部署(可以使用5个值:
-
compile,缺省值,适用于所有阶段,会随着项目一起发布。
-
provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
-
runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
-
test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
-
system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
)。
依赖集合,jar包管理。
具体的依赖项。 依赖,jar包管理。
dependencyManagement和dependencies区别
1、dependencies:自动引入声明在dependencies里的所有依赖,并默认被所有的子项目继承。如果项目中不写依赖项,则会从父项目继承(属性全部继承)声明在父项目dependencies里的依赖项。
2、dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要的依赖。如果子项目中不声明依赖,不会从父项目中继承;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都继承自父pom;如果子项目中指定了版本号,那么会使用子项目中指定的jar版本,覆盖掉父中的版本。同时dependencyManagement让子项目引用依赖,而不用显示的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号,实现所有子项目使用的依赖项为同一版本。
3、dependencyManagement 中的 dependencies 并不影响项目的依赖项;而独立dependencies元素则影响项目的依赖项。只有当外层的dependencies元素中没有指明版本信息时,dependencyManagement 中的 dependencies 元素才起作用。一个是项目依赖,一个是maven项目多模块情况时作依赖管理控制的。 4、pluginManagement和plugins 区别和dependencyManagement和dependencies区别相似,只不过它们用于管理plugin。
全局配置(project build),针对当前项目的所有情况都有效。自定义配置(profile build)针对不同的profile配置。
执行build任务时,如果没有指定目标,将使用的默认值。
build目标文件的名称,默认情况为{version}。
指定哪些文件将被匹配,以*作为通配符。
指定哪些文件将被忽略。
用于包含或者排除某些资源文件。
定义和resource类似,只不过在test时使用
build目标文件的存放目录,就是定义resource文件所在的文件夹,默认在${basedir}/target目录。
指定使用的插件,插件管理。
配置该plugin期望得到的properties。
一个项目有多个平级模块,也叫做多重模块,或者子模块,子服务,modules实现平级模块管理。
具体模块名称(标明该模块和artifactId标签中模块平级),是project标签的子元素。
自定义配置信息管理
具体自定义配置(可以在不同环境下使用不同的配制文件)
profile的子元素,指该配置的激活条件。Activation是profile的开启钥匙,但不是激活profile的唯一方式。
当匹配的jdk被检测到,profile被激活。
用法同于jdk,当匹配的操作系统属性被检测到,profile被激活。
SpringBoot常用依赖
1.Web依赖
<!-- web依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2.LomBok依赖
<!-- lombok 依赖 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
3.MyBatis-Plus依赖
<!-- Spring Boot 整合 MyBatis-Plus 的依赖 -->
<!--非官方提供,mp 自己提供的-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
4.MySQL驱动依赖
<!-- MySQL 连接驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
5.JWT依赖
<!--jwt(JSON Web Token 依赖)-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
6.Thymeleaf依赖
<!--thymeleaf依赖-->
<!--thymeleaf 是一个很强大的视图解析工具-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
7.Redis依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.7.3</version>
</dependency>
8.FastJSON依赖
<!--fastjson依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
空载pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 父依赖 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version> <!-- SpringBoot版本依赖 -->
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--添加自己所需依赖-->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
properties基础配置
# 端口号
server.port=9980
# 数据库连接参数
# 数据库驱动:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 数据库连接地址 注意?后面的内容为一整行内容,不能换行
spring.datasource.url=jdbc:mysql://localhost:3306/springboot-crm?useSSL=true
&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
# 数据库用户名&密码:
spring.datasource.username=root
spring.datasource.password=123456
#mybatis-plus 配置控制台打印完整带参数 SQL 语句
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
# 配置包的别名
mybatis.typeAliasesPackage=com.example.demo.entity
# 配置映射文件的路径
mybatis.mapperLocations=classpath:mapper/*.xml
上述properties文件可以改造成yml格式
例如配置了Redis的yml
spring:
redis:
# Redis本地服务器地址,注意要开启redis服务,即那个redis-server.exe
host: localhost
# Redis服务器端口,默认为6379.若有改动按改动后的来
port: 6379
#Redis服务器连接密码,默认为空,若有设置按设置的来
password:
lettuce:
pool:
# 连接池最大连接数,若为负数则表示没有任何限制
max-active: 8
# 连接池最大阻塞等待时间,若为负数则表示没有任何限制
max-wait: -1
# 连接池中的最大空闲连接
max-idle: 8
SpringBoot项目结构说明
【1) mvnw|mvnw.cmd文件】
这两个脚本分别对应的是linux和windows环境,可执行maven相关的命令,通常使用比较少。
【2) gitignore文件】
使用版本控制工具git的时候,设置一些忽略提交的内容。这样可以避免很多无效文件提交到远程仓库。如:class文件、.idea文件内容等。
【3)static|templates文件夹】
涉及到页面或模板技术都会存放该目录下,比如html页面、JS脚本、CSS样式,以及Thymeleaf等。
【4)application.properties(默认生成) | application.yml(手动添加)】
SpringBoot的配置文件,很多集成的配置都可以在该文件中进行配置。例如:服务端口号、应用名称、数据库(Redis、ES、MySQL)连接信息、MyBatis配置、Rabbit MQ等。
【5) SpringbootApplication .java】
该类是SpringBoot程序执行的入口,执行该程序中的main方法,SpringBoot就启动了。
程序入口
@SpringBootApplication是SpringBoot的核心注解
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
public class SpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootApplication.class, args);
}
//...
@GetMapping("/hello")
public String hello(@RequestParam(value = "name", defaultValue = "World") String name) {
return "Hello World!";
}
}
疑问点
是否必须父级依赖
是的,Spring Boot项目必须使用父级依赖spring-boot-starter-parent。
这个父级依赖定义了很多当前项目的规范,包括Java编译版本、编码格式、依赖的版本、打包操作的配置、自动化的资源过滤和自动化的插件配置等。它还针对application.properties和application.yml进行了资源过滤,包括通过profile定义的不同环境的配置文件,例如application-dev.properties和application-dev.yml。
spring-boot-starter-parent是一个Springboot的父级依赖,开发SpringBoot程序都需要继承该父级项目,它用来提供相关的Maven默认依赖,使用它之后,常用的jar包依赖可以省去version配置。
因此,如果不使用父级依赖spring-boot-starter-parent,这些规范和配置将无法在项目中生效。
参考文章
SpringBoot依赖讲解
zhuanlan.zhihu.com/p/626683382…
在SpringBoot项目中配置Redis
一个完整的SpringBoot项目所需要导入的依赖合集
Maven基本知识