一、SpringBoot 结构、集成
1.1、集成组件
Spring Core:Spring的核心组件,提供IOC、AOP等基础功能,是Spring全家桶的基础。
Spring Boot:一个基于Spring Framework的快速开发框架,可以快速创建独立的、生产级别的Spring应用程序。
Spring Cloud:一个用于构建分布式应用程序的框架,提供了诸如服务发现、配置管理、负载均衡等功能。
Spring Data:用于简化数据访问层开发的框架,提供了一系列数据访问模板和持久化技术的集成。
Spring Security:一个用于处理应用程序安全的框架,提供了认证、授权、安全防护等功能。
Spring Integration:Spring Integration是一个用于构建企业级集成解决方案的框架,支持将不同的应用程序和服务集成到一起。它提供了许多组件和模式,如消息通道、消息端点、消息路由器、过滤器等。
Spring Batch:Spring Batch是一个用于处理大量数据和批处理作业的框架。它提供了各种工具和组件,如任务启动器、作业仓库、作业执行器、步骤处理器、读写器等。
Spring Web Services:Spring Web Services是一个用于构建基于SOAP协议的Web服务的框架。它提供了各种组件和工具,如消息处理器、绑定器、端点等,使得构建Web服务更加容易。
二、SpringBoot 版本相关问题
Spring Boot 2X
Spring Boot 2.0在2018年2月28日发布,Spring Boot 2.7是2.x的最后一个发布版本最后一个支持 JDK 8 的版本,该版本的开源将于2023年11月停止支持,商业支持可延长到2025年2月。
Spring Boot 3X
Spring Boot 3.0于2022年11月24日发布,它是Spring Boot的下一个大版本,基于Spring Framework 6.0,而且要求Java最低版本为Java17。
Spring Framework 6.0于2022年11月16日发布,是Spring Framework的下一个大版本,该版本要求Java最低版本为Java17。
三、jar 包 与 war包
3.1、jar包
jar包是java项目压缩包,通过java程序(JavaSE)压缩产生的压缩包。
3.1.1、jar包目录结构
根目录
|
|---- 该包的 java 类文件目录
|
|---- META-INF 目录 // 存放该包和扩展的配置数据
3.1.2、jar包的启动
#1、直接启动: java -jar demo.jar
这种启动方式适合自己测试,部署在Linux上,关闭会话窗口或者ctrl+c都会关闭Java
#2、后台启动:java -jar demo.jar &
这种方式会在后台静默运行,关闭会话窗口会中断Java,和上一种一样,这两个日志都是打印在窗口的,关闭会话就没了
#3、nohup启动:nohup java -jar demo.jar &
这种会把日志打印到nohup.out文件中,但只会打印标准输出不会打印错误输出,关闭通过pid号来kill掉
#4、nohup启动:nohup java -jar demo.jar>/root/demo.log 2>&1 &
这种会把普通输出和错误输出都打印到demo.log中
#5、需要打印控制台日志,需要保留之前的日志信息
nohup java -jar test.jar >> ./info.log &
3.2、war包
web项目压缩包,可直接运行的web模块,部署到Web容器(如 tomcat)中。
war包 包含项目所东西:
代码编译成的 class 文件
依赖包
配置文件
网站页面(html、jsp、servlet、图片文件等)
3.2.1、war包目录结构
war包放在tomcat的\webapps\ 目录下,启动 Tomcat,war包就会自动解压运行。
3.2.2、war包的启动
根目录
|
|---- .html、.jsp (或包含这两种文件的目录)
|
|---- WEB-INF 目录 // 存放 .class 文件和配置文件
| |
| |---- web.xml // 该应用的配置文件
| |
| |---- classes 目录
| | |
| | |---- 编译好的 servlet 类和 js
| | |
| | |---- servlet 所依赖的其他类(如 JavaBean)
| |----- lib // 存放该包的依赖 jar 包
|
|---- META-INF 目录 // 存放该包和扩展的配置数据
三、Maven
Maven 基于 Java 的项目管理工具。
3.1、Maven目录及文件
helloMaven:项目名,包含 src 文件夹和 pom.xml。
src/main/java:用于存放项目的 Java 文件。
src/main/resources:用于存放项目资源文件。
src/test/java:用于存放所有测试 Java 文件,如 JUnit 测试类。
src/test/resources :用于存放测试资源文件。
target:项目输出位置,用于存放编译后的文件。
pom.xml:Maven 项目核心配置文件。
3.2、Maven 坐标
唯一的字符串,表示资源。
<groupId>***</groupId>
<artifactId>***</artifactId>
<version>***</version>
<packaging>***</packaging>
groupId: 项目组 ID,定义当前 Maven 项目隶属的组织或公司,通常是唯一的。一般是项目所属公司或组织的网址或 URL 的反写,例如 net.biancheng.www。
artifactId: 项目 ID,通常是项目的名称。
version:版本。
packaging:项目的打包方式,默认值为 jar。
classifier:帮助定义构建输出的一些附属构件,不直接定义项目的classifier,由附加插件帮助生成。
3.3、Maven 依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
groupId、artifactId 和 version:依赖的基本坐标,任何一个依赖基本坐标是最重要的,Maven 根据坐标找到需要的依赖。
type:依赖的类型,对应于项目坐标定义的 packaging。大部分情况下,该元素不必声明,其默认值是 jar。
scope:依赖的范围。
optional:标记依赖是否可选。
exclusions:用来排除传递性依赖。
Maven的依赖范围
compile:编译依赖范围,默认的。编译、测试、运行的时候都要用到这个依赖。
test:测试依赖范围。只有在编译测试代码 + 运行测试代码的时候才需要;
provided:已提供依赖范围。编译和测试时使用,运行时无效;
runtime:运行时依赖范围。测试和运行时有效,编译主代码时无效;
system:系统依赖范围。与provided一致,与本机是强绑定,会导致不可移植,慎用,systemPath中可以引用环境变量。
import:导入依赖范围。
3.4、Maven的常用命令
mvn clean:清理
mvn compile:编译src/main/java目录中的程序,把Java编程成class文件,并放到target/classes目录中
mvn test-compile:编译src/main/test目录下的Java程序,拷贝到target/test-class目录中
mvn test:进行单元测试,使用Junit测试src/main/java目录下的程序是否符合要求
mvn package:打包。把程序中src/main/test下面的Java编译后的class和resources中的配置文件放入到一个压缩包中。
mvn install:把jar、war安装到本机仓库中
3.5、仓库
存放物品:存放Jar、Maven的插件等等。
本地仓库,可以在maven安装目录/conf/settings.xml中指定。
中央仓库:最权威的,所有的资源都放在这里。
中央仓库的镜像:分担压力的。
私服:公司局域网内部使用的,就是公司自己开发的。
3.6、Maven的生命周期
项目的构建过程:清理、编译、测试、报告、打包、安装、部署
3.7、插件
Maven提供的功能,用来执行清理、编译、测试、报告、打包的程序。
3.8、Maven聚合
要在项目中额外创建一个聚合模块,通过这个模块构建整个项目的所有模块。
助聚合其他模块的工具,其本身并无任何实质内容,因此聚合模块中只有一个 POM 文件。
聚合模块的打包方式(packaging)也是 pom,用户可以在其 POM 中通过 modules 下的 module 子元素来添加需要聚合的模块的目录路径。
<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>
<groupId>net.biancheng.www</groupId>
<artifactId>Root</artifactId>
<version>1.0</version>
<!--定义的父类pom.xml 打包类型使pom -->
<packaging>pom</packaging>
<properties>
<!-- 定义一些属性 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<log4j.version>1.2.17</log4j.version>
<junit.version>4.9</junit.version>
<system.version>1.0</system.version>
<mysql.connector.version>5.1.18</mysql.connector.version>
<c3p0.version>0.9.1</c3p0.version>
</properties>
<!--dependencyManagement 标签用于控制子模块的依赖版本等信息 -->
<!-- 该标签只用来控制版本,不能将依赖引入 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<!--引用的properties标签中定义的属性 -->
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<!--引用的properties标签中定义的属性 -->
<version>${junit.version}</version>
<!-- <scope>test</scope> -->
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<!--引用的properties标签中定义的属性 -->
<version>${mysql.connector.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<!--引用的properties标签中定义的属性 -->
<version>${c3p0.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<!--添加需要聚合的模块-->
<modules>
<module>../App-Core-lib</module>
<module>../App-Data-lib</module>
<module>../App-UI-WAR</module>
</modules>
</project>
3.9、Maven继承
在父模块 POM 中声明依赖,其他模块的 POM 可通过继承父模块的 POM 来获得对相关依赖的声明。消除子模块 POM 中的重复配置,父模块 POM 的打包类型(packaging)必须是 pom。
父模块 POM 配置
<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>
<groupId>net.biancheng.www</groupId>
<artifactId>Root</artifactId>
<version>1.0</version>
<!--定义的父类 POM 打包类型使pom -->
<packaging>pom</packaging>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.18</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1</version>
</dependency>
</dependencies>
</project>
子模块 POM 配置
<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>
<groupId>net.biancheng.www</groupId>
<artifactId>App-Core-lib</artifactId>
<version>1.0</version>
<parent>
<groupId>net.biancheng.www</groupId>
<artifactId>Root</artifactId>
<version>1.0</version>
<relativePath>../Root</relativePath>
</parent>
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
</project>