Spring作为流行的JavaEE框架已经流行了很多年,它实现了业务逻辑和其它各层之间的松耦合,控制反转(IoC),容器,SpringMVC,使得我们开发JavaEE的过程不再复杂。但是随着项目的越来越大,我们要维护大量的XML配置文件,有时还要解决大量的第三方框架的配置冲突。这时, Springboot适时而生,它将Spring做了一个全新的整合,是一个更轻量级的JavaEE的开发框架。它将Spring传统的XML配置改为Java原生配置,通过注解(Annotation)来实现;他将我们常用的一些依赖如spring-webmvc,validation-ui等做了整合,提供的POM可以简化Maven的配置;它还内置了tomcat或是Jetty这样的容器,让我们可以通过运行Java Application来启动服务。
创建SpringBoot程序可以用Spring Tool Suite(Eclipse RCP),IntelliJ IDEA 和 NetBeans,或者也可以直接从官网Spring Initializr来创建。可以选择用Maven或是Gradle来构建工程。
Hello World
- 打开Spring Initializr
- 选择Maven Project, Java。
- 填入Group,Artifact,不添加任何的依赖。
- 点击Generate,你会得到一个zip包,里面就是一个Spring Boot的maven工程了。
- 解压,导入Eclipse中。
解析
一个最简单的Demo中,3个最核心的文件。
- pom.xml
- DemoApplication.java
- application.properties
pom.xml
parent
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
每一个Springboot工程都会被打上这个parent标签,因为在这个标签里会自动引入所有的需要的依赖,而不需要我们手动添加。
dependencies
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
依赖项,spring-boot-starter是springboot工程构建的关键,除了这个最基础的之外,还有好多的starter,每一个starter都包含运行这个依赖所包含的所有的第三方jar包。 这样就大大的简化了我们在开发中所需要的配置。
build
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
maven构建信息,使用的是spring-boot-maven-plugin插件,将我们的Maven工程打包成可执行的jar包或是war包。
DemoApplication.java
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
一个非常简单的Java类,包含了一个启动服务的main方法,标记了@SpringBootApplication。
运行将会启动SpringBoot服务,由于在创建的时候没有选择任何的依赖,所以启动之后也没有什么特别的效果。
如果想运行web的话,可以在创建的时候选择Web(一站式的依赖,内置tomcat和SpringMVC),就可以运行一个Web服务。
这里可以直接将spring-boot-starter依赖改为spring-boot-starter-web,然后用maven更新一下工程配置。
这时,这个demo就变成了Web服务,可以通过运行DemoApplication来启动服务。
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.0.RELEASE)
2018-11-22 08:45:09.506 INFO 1255 --- [ main] w.e.spring.webdemo.WebDemoApplication : No active profile set, falling back to default profiles: default
2018-11-22 08:45:10.338 INFO 1255 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2018-11-22 08:45:10.361 INFO 1255 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2018-11-22 08:45:10.361 INFO 1255 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/9.0.12
2018-11-22 08:45:10.461 INFO 1255 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2018-11-22 08:45:10.461 INFO 1255 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 920 ms
2018-11-22 08:45:10.483 INFO 1255 --- [ main] o.s.b.w.servlet.ServletRegistrationBean : Servlet dispatcherServlet mapped to [/]
2018-11-22 08:45:10.486 INFO 1255 --- [ main] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*]
2018-11-22 08:45:10.487 INFO 1255 --- [ main] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2018-11-22 08:45:10.487 INFO 1255 --- [ main] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'formContentFilter' to: [/*]
2018-11-22 08:45:10.487 INFO 1255 --- [ main] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*]
2018-11-22 08:45:10.650 INFO 1255 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2018-11-22 08:45:10.829 INFO 1255 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2018-11-22 08:45:10.831 INFO 1255 --- [ main] w.e.spring.webdemo.WebDemoApplication : Started WebDemoApplication in 1.741 seconds (JVM running for 2.043)
可以清楚地看到,在8080端口启动了一个Tomcat服务。
是不是很方便?😝
application.properties
默认什么都没有,是因为SpringBoot将所有的默认情况都已配置好,请参阅Common application properties。
更多信息请参考:官方文档2.1.0