轻松入门springboot之项目的建立
【摘要】 1.pom⽂件springboot项⽬最核⼼的是其maven⼯程中的pom⽂件的编写,我们有多种⽅式可以在maven中构建⼀个springboot项⽬。springboot项⽬中的pom⽂件,按照官⽅要求,⼀般需要在基本的pom配置中添加额外⼏个地⽅: 1. 继承Springboot提供的⼀个⽗项⽬。<parent> <groupid>org.springframework.boot...
1.pom⽂件
springboot项⽬最核⼼的是其maven⼯程中的pom⽂件的编写,我们有多种⽅式可以在maven中构
建⼀个springboot项⽬。
springboot项⽬中的pom⽂件,按照官⽅要求,⼀般需要在基本的pom配置中添加额外⼏个地⽅:
1. 继承Springboot提供的⼀个⽗项⽬。
<parent>
<groupid>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.0.RELEASE</version>
<relativePath/><!-- lookup parent from repository -->
</parent>
springboot官⽅推荐我们使⽤spring-boot-starter-parent,在spring-boot-starter-parent中包含了以下信息:
-
Java版本
-
项⽬编码
-
测试框架
-
资源过滤
-
插件配置
也可以⾃⼰在pom中覆盖这些默认值:
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<sikpTests>true</ sikpTests>
</properties>
2. 根据需求添加对应启动器starter的依赖。
<dependencies>
<dependency>
<groupid>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies>
springboot中提供了很多可选的启动器starter:
springboot的启动器 starter主要⽤来简化依赖⽤的,例如原来在maven项⽬中需要使⽤web相关的功能和框架,那么就要引⼊对应的⼀些web相关的依赖,并且需要⾃⼰去找这些依赖的坐标和版本,但是springboot中只需要引⼊⼀个starter就⾏了:spring-boot-starter-web。
starter会把你需要的相关jar包全部关联到依赖中。在eclipse中的依赖树中可以看到这个web相关的starter包含了哪些依赖:
⼀个web相关的starter的依赖声明,基本解决了项⽬中⼀般web模块功能所依赖jar的管理。当然,如果更换starter中默认的依赖,也是可以的。例如,spring-boot-starter-web中默认使⽤的是内嵌的tomcat服务器,可以替换为jetty服务器,具体如下: 先排除不⽤的默认依赖,在⼿动添加⾃⼰需要的依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring- boot-starter- tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org. springfr amework . boot</groupId>
<artifactId>spring- boot-starter-jetty</artifactId>
</dependency>
spring-boot-starter 是核⼼启动器,其他启动器的名字都是这样的规律:spring-boot-starter-xxx,其中这个xxx就表示该启动器注意负责的功能是什么,例如:spring-boot-starter-jdbc、spring-boot-starter-web、spring-boot-starter-redis、spring-boot-starter-aop、spring-boot-starter-cache等等。
注意,很多启动器中都包含了核⼼启动器:spring-boot-starter,所以spring-boot-starter不需要反复多次引⼊。
3. 配置springboot的maven插件。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
Spring Boot Maven plugin的5个Goals:
- spring-boot:repackage,默认goal。
在mvn package之后,再次⾃动打包成可执⾏的jar/war,同时保留mvn package⽣成的
jar/war⽂件为.origin结尾的⽂件。
- spring-boot:run
⽐较常⽤,是运⾏springboot项⽬的⽅式之⼀。
- spring-boot:start
在mvn integration-test阶段,进⾏Spring Boot应⽤⽣命周期的管理。
- spring-boot:stop
在mvn integration-test阶段,进⾏Spring Boot应⽤⽣命周期的管理。
- spring-boot:build-info
⽣成Actuator使⽤的构建信息⽂件build-info.properties。
对于默认的Goals,spring-boot:repackage,在运⾏maven的打包package命令后会⾃动执⾏,并且如果是java项⽬(⾮web),在指定程序⼊⼝后(start-class),可以直接打包成可执⾏jar包,⾃动执⾏我们指定的程序⼊⼝:
使⽤mvn命令进⾏打包: pom中加⼊skipTests标签并指定其值为true, 可跳过测试:
<skipTests>true</skipTests>
mvn clean package
注意,在STS中执⾏maven命令的时候,前⾯不需要带mvn
打包后⽣成俩个⽂件:
- demo-0.0.1-SNAPSHOT.jar
这个是springboot插件打的jar包
- demo-0.0.1-SNAPSHOT.jar.original
这个是clean package命令打的原始jar包
选择第⼀个jar右键:
在命令⾏中,使⽤命令的⽅式执⾏这个jar:
注意,操作完之后,把Terminal选项卡给关闭了,否则再执⾏clean命令会报错。因为clean命令会删除target⽬录下的内容,但是Terminal正在打开target⽬录使⽤其中的⽂件,不让其他程序删除。
2.程序⼊⼝
springboot项⽬中需要⼀个程序⼊⼝,就是⼀个类中含有main⽅法,但是需要在这个类上使⽤springboot的专⽤注解@SpringBootApplication
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
该注解可以让当前类成为⼀个配置类,⾃动扫描⽤户的包,以及最重要的⼀个功能:开启springboot的⾃动配置功能:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM,
classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes =
AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
//...
}
注意,main⽅法中的这句代码SpringApplication.run(DemoApplication.class, args),main⽅法运⾏后springboot就可以读取到DemoApplication类上的注解从⽽开启各种功能。
运⾏springboot项⽬后控制台中可以看到以下内容:
3.测试代码
springboot项⽬中的测试类,默认使⽤了spring-test模块以及结合了junit测试框架
注意,不同的springboot版本,内置的使⽤的junit版本也不同。
这个测试类和springboot项⽬的⼊⼝类的位置的关系,运⾏测试类的时候,会⾃动先运⾏⼊⼝类,因为要先读取配置、扫描包、开启⾃动配置功能等。要记得,⼊⼝类也是⼀个配置类。
一般会在同包以及⼦包下⾃动查找要使⽤的类。当前例⼦中,测试类和⼊⼝的类的位置就是在同⼀个包下⾯。
如果测试类和⼊⼝类(配置类)的位置⽐较复杂或者混合,也可以⾃⼰去明确指定,例如 :
@SpringBootTest(classes = {DemoApplication.class})
class DemoApplicationTests {
@Test
void contextLoads() {
}
}
4.配置⽂件
在springboot项⽬中,默认只有⼀个配置⽂件,在⼤多数情况下这个⼀个配置⽂件也就⾜够了。
springboot的配置⽂件,默认⽀持俩种⽅式:
1. properties⽂件
application.properties :
server.port=8081
server.servlet.context-path=/
server.tomcat.uri-encoding=utf-8
2. yml⽂件
application.yml :
server:
port: 8082
servlet:
context-path: /
tomcat:
uri-encoding: utf-8
俩种⽂件的配置内容⼀致,但是配置的格式不同。俩个⽂件同时存在,优先使⽤properties⽂件中的配置。
pom⽂件中添加web启动器的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
运⾏springboot的程序⼊⼝类DemoApplication:
从⽇志中可以看出当前使⽤了8081端⼝:
在springboot官⽹中: 有配置⽂件⽀持的所有的属性配置。
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)