SpringBoot基础构建

94 阅读6分钟

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目标文件的名称,默认情况为artifactId{artifactId}-{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项目结构说明

image.png

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

blog.csdn.net/m0_63445035…

一个完整的SpringBoot项目所需要导入的依赖合集

blog.csdn.net/qq_56728342…

Maven基本知识

blog.csdn.net/dongjing991…