AngryRED

Easier & Better

Spring Boot初探

20 Nov 2018 » javaweb

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

  1. 打开Spring Initializr
  2. 选择Maven Project, Java。
  3. 填入Group,Artifact,不添加任何的依赖。
  4. 点击Generate,你会得到一个zip包,里面就是一个Spring Boot的maven工程了。
  5. 解压,导入Eclipse中。

解析

一个最简单的Demo中,3个最核心的文件。

  1. pom.xml
  2. DemoApplication.java
  3. 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