之前也介绍过使用SpringBoot构建应用是非常快速的,我们通过使用SpringBoot Initializr来构建项目结构以及依赖,SpringBoot Initializr的使用方式由以下几种:
我们访问https://start.spring.io/
,可以看到最新的构建页面,不同时期的页面可能不同,但大致项目相同
ps:其中有一些是Eclipse生成的文件,比如.settings
、.classpath
等
Spring Boot CLI是一个命令行工具,能使你快速的初始化SpringBoot。其使用也非常简单,从SpringBoot官网下载Spring Boot CLI,并解压安装,在其bin目录有两个文件spring
和spring.bat
脚本文件,我们可以通过运行它们来构建项目,比如对于上述的项目,我们使用以下命令将达到同样的效果:
spring init -dweb,devtools --build maven -p war demo
init 使用Spring Initializr初始化一个项目
-d
参数 以逗号为分隔符的依赖
--build
参数 构建系统,默认为maven,可选gradle
-p
参数 表示项目的包,比如jar、war
我们可以使用spring --help init
来查看帮助
DemoApplication 是启动类,直接运行就可以
package com.example.demo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); }}
@SpringBootApplication
注解 开启了启动扫描和自动配置功能,它包含三个注解SpringApplication.run(DemoApplication.class, args)
启动引导Spring程序。DemoApplication是最重要的配置类当我们启动程序之后,会启动一个监听8080端口的Tomcat服务器,不过直接访问会报错。
默认下载的项目中配置文件使用的applicaiton.properties,现在将其替换为application.yml,现在文件为空,暂时没有任何内容,我们可以在配置文件中进行很多配置,但是暂时我们可以测试的好像也就只有Tomcat的端口号,我们将其调整为9000:
server: port: 9000
yml文件的配置方式与properties文件不同,如果是上述配置,在applicaiton.properties中为:
server.port=9000
下载下来的项目文件中,还有一个测试模板:
package com.example.demo;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;@RunWith(SpringRunner.class)@SpringBootTestpublic class DemoApplicationTests { @Test public void contextLoads() { }}
@SpringBootTest
表名当前类是基于SpringBoot的测试类,可以指定启动类,它自动扫描@SpringBootConfiguration
注解的类,所以它能扫描的DemoApplication类通过上述的项目文件,我们发现Spring Boot 与普通的Spring没有什么本质的差别,那么它是怎么达到自动加载依赖的功能呢,答案就在其构建文件中(Gradle的build.gradle,Maven的pom.xml),我们使用的是Maven,所以我们可以看一下:
<?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 http://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.1.5.RELEASE</version> <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> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build></project>
从pom.xml文件中,我们发看到有别于其他项目的配置
org.springframework.boot:spring-boot-starter-parent
org.springframework.boot:spring-boot-maven-plugin
Demo项目将spring-boot-starter-parent
作为父项目,就可以从其中继承很多常用依赖的版本(其实际配置是在spring-boot-dependencies
中设置的),所以可以不用设置版本号。
想想在没有这种依赖管理的之前,如果项目需要依赖包我们会怎么做:
从Maven Repository中搜索需要用到的依赖
复制到pom.xml中
跳转到1,然后继续,直到找到所需要的依赖
构建项目,如果依赖的版本之间没有冲突,啊哈,运气,如果有冲突那就去网上搜索解决办法
依赖没有问题(不容易)
这还是在你写业务代码之前要做的工作,想想是不是很繁琐,关键是在你没开始写代码之前,你不确定这是正确的。
maven本身具有依赖管理的功能,上文也说了,所有的常用依赖都是在spring-boot-dependencies-*.pom
中设置的,我们打开``看一下,重点看一下dependencyManagement标签:
...<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot</artifactId> <version>2.1.5.RELEASE</version> </dependency> ... <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> ... </dependencies> <dependencyManagement> ...
ps:dependencyManagement
的作用是声明依赖及版本,并不会实际引入依赖,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
dependencies
的作用是声明并引入依赖,即使子项目中不声明该依赖,子项目也会引入父项目中的所有依赖。
比如说在现在的项目中,我们会自动依赖,其版本为,如果我们要换版本比如说将其换成,那么我们可以直接在pom.xml中进行调整
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.26</version></dependency>
我们可以通过使用IDE中的在DemoApplication.java
上选择run as -> Java Application
来运行该程序。
这就是运行之后的效果,当然因为我们任何业务代码都没有写,所有访问项目时会出现默认的404页面。
领取专属 10元无门槛券
私享最新 技术干货