摘要:作为JAVA编程基础,Spring Boot框架的快速掌握是必不可少的,本文让您快速启动和配置SpringBoot项目,达到快速上手的目的,也供学习或者工作中参考。
1、快速生成
快速创建一个SpringBoot项目可以使用Spring Initializr,有现成的,如下网址:
https://start.spring.io/
也可以把Spring Boot作为标准的java库来使用:在classpath中包含spring-boot-*.jar,而不需要任何特殊的集成工具,所以能够使用任何的IDE或者文本编辑器。
Spring Boot应用程序也没有任何特殊之处,运行和调试Spring Boot应用程序也和其他java程序一样。
尽管可以拷贝Spring Boot的Jar包文件,但推荐使用支持支持依赖管理的构建工具,例如:Maven或者Gradle。
Spring Initializr会自动生成maven和gradle依赖配置文件。
2、使用maven构建(build)程序和管理依赖
使用包org.springframework.boot作为groupid。
Maven POM文件继承自spring-boot-starter-parent 项目,同时可以声明一到多个启动器(Starter),这些启动器用于快速添加jar包到classpath中。冒烟测试时可以在POM文件的parent段中引入spring-boot-starter-parent。
spring-boot-starter-parent是特殊的启动器,提供默认的maven功能,也默认提供dependency-management段,因此不需要提供version属性,spring-boot-starter-parent的描述可进一步参考其他文章。
和spring-boot-starter-parent不同,其他的启动器能够针对某种类型的应用程序提供默认的依赖引入。例如:spring-boot-starter-web启动器提供对web应用程序的依赖支持。
Spring boot也提供 一个可选Maven Plugin(插件)来创建可执行的jar。
一个典型的POM文件:
查看一个项目的依赖树,使用如下命令:
mvn dependency:tree
某项目的依赖树如下:
当dependencies段中没有引入其他启动器的时候,实际上依赖树是空的:
这个demo项目的pom文件为:
POM文件加入:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
截图:
这时候依赖树为:
3、使用Gradle构建(build)程序和管理依赖
Spring Boot兼容Gradle 5.x和6.x版本,4.10也支持,但是将来不再会支持。
也是使用包org.springframework.boot作为groupid。也可以声明一到多个启动器(Starter)。
Spring boot也提供 一个可选Gradle Plugin(插件)来简化依赖管理,并创建可执行的jar。
4、使用CLI构建(build)程序和管理依赖
Spring Boot CLI命令行工具能够快速使用Spring框架,支持Groovy脚本,类似于java但是简单很多。不必使用CLI来集成Spring Boot,但是它绝对是启动Spring的最快方法。
下载CLI的链接:
https://repo.spring.io/release/org/springframework/boot/spring-boot-cli/2.2.2.RELEASE/spring-boot-cli-2.2.2.RELEASE-bin.zip
解压到后查看install.txt:
设置bin目录到path环境变量中:
(注:可以先设置环境变量SPRING_HOME,例如在Ubuntu下修改profile文件:
然后,执行source /etc/profile 更新环境变量,执行spring --verison检查版本。
)
检查是否安装正确:
也可以使用Scoop来安装和管理CLI和SDK(Linux下 使用SDKMan代替)。Scoop的官网如下:
具体使用实例:
(1)创建文件:app.groovy,内容如下:
(2)运行,命令如下:
测试:
5、可执行Jar文件
上面使用maven、gradle、CLI构建程序,可以把已编译的class及其依赖全部打包进入一个可执行的jar文件中,可执行jar文件(Executable jars)有时也成为“胖假包”(fat jars)文件。由于依赖一般也是jar文件,所以,这个可执行的jar文件实际上是嵌套jar文件。一般程序员采用uber-jar文件来发布应用程序,而uber在德语里面是over(超级)的意思,uber-jar就是打包所有的class及其依赖库文件进入单个文件中,这种方式的缺点是查看uber-jar里面的库文件并不方便,如果同一个文件名存在于多个jar文件中也会存在问题。但是,Spring boot提供了不同的方法来生成和管理嵌套jar文件。
使用mvn spring-boot:run并没有生成可执行jar包文件,检查target目录:
要生成可执行jar包文件,需要在POM文件中增加spring-boot-maven-plugin:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
注意spring-boot-starter-parent中默认包含了如下配置代码,如果没有引入了spring-boot-starter-parent,则需要手工加入如下配置代码到artifactId之后:
<version>2.2.2.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
有关spring-boot-maven-plugin的详细信息参见2.1.13 Maven插件。
然后执行mvn package,如下:
再次查看target目录:
上图中demo-0.0.1-SNAPSHOT.jar就是可执行jar包文件。
使用jar tvf target/demo-0.0.1-SNAPSHOT.jar来查看这个可执行jar包文件内部的目录和文件,如下:
Target目录还有一个文件:demo-0.0.1-SNAPSHOT.jar.original,这个文件只有3k,很小,它是springboot在打包前产生的原始jar包文件,也可以使用jar tvf来查看内部文件结构:
可以看出这个original文件内部很简单,没有包含依赖,所以也可以称其为“瘦假包”文件(thin jars)。
使用java -jar来执行可执行jar包文件demo-0.0.1-SNAPSHOT.jar:
6、不需要父POM的Spring Boot应用程序
不是所有项目都继承自spring-boot-starter-parent POM,可以创建自己公司的标准父POM。
如果不想在parent段中使用spring-boot-starter-parent,仍然可以得到依赖管理的好处,依赖管理(dependency management)和插件管理(plugin management)不同,插件管理使用build标签下的plugins标签,依赖管理使用dependencyManagement标签。这时,需要使scope=import,如下:
前面的例子不允许通过使用一个属性来覆盖各个依赖项。要实现相同的结果,需要在spring-boot-dependencies条目之前添加一个条目。例如,要升级到另一个Spring Data发布版本序列,可以在pom.xml中添加以下元素:
7、应用配置文件
先加载application.yml,再加载Application.properties,properties的配置会覆盖yml的配置,也就是说yml的配置优先级低。
(1)mongodb配置
spring.data.mongodb.uri=mongodb://edison:123@localhost:27017/education
Mongo 2.x使用:
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.username=edison
spring.data.mongodb.password=123
spring.data.mongodb.authentication-database=education
Mongo 3.0不支持:
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
(2)日志配置
#logging.pattern.console="%d - %msg%n"
logging.pattern.file='%d ***** %msg %n'
logging.path=d:/logs/
#logging.file='test.log'