Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。——抄袭百度百科,以下简称SB。
我也是一个正式工作没多久的小程序员,最近看了也快一个月的sb,平时学的东西都是零零散散的记在书里、注释在代码里、写在笔记里,感觉过于分散,以后想拿出来看看都不方便。干脆就直接把博客当笔记,和大家分享一下从入门到放弃的经验吧。
初学了1个月的sb,对比起SpringMVC,我觉得是简化了许多配置,简化了许多项目依赖的管理,完成了很多框架的整合,也不用写许多原生的代码,很多东西SB都帮你默认配置好了,甚至连web容器都不需要,集成了许许多多常用的框架与工具,不需要我们再去东拼西凑找jar包、找依赖、复制修改配置文件了。
打个比方,之前搭建一个web项目,你需要做spring和hibernate之类的orm框架整合、需要做spring和strut2的整合、需要做log4j和slf4j的整合等等等等…………一大堆jar包和配置文件等你去管理。而用了SpringBoot之后,就基本什么都不用去整合了,SB全部帮你弄好了,默认的配置文件也是很人性化的,能满足大部分需求了。
接下来就在一起入坑吧,以下是最简单的默认sb的项目目录结构
静态资源目录,主要存放的是jsp页面,js,图片,配置文件等。SB会默认帮我们创建一个空的配置文件application.properties,接下来看看Helloworld代码
package com.kazz;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
public class HelloworldApplication{
public static void main(String[] args) {
SpringApplication.run(HelloworldApplication.class, args);
}
@RequestMapping("/")
public String hello() {
return "hello,springboot";
}
}
代码很简单,就是一个主函数启动程序,再加上一个SpringMVC里面常用的@RestController和@RequestMapping("/")注解,拦截根目录下的请求,此时程序没有部署到任何web容器,直接点击运行按钮,启动程序,控制台输出日志如下
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.4.1.RELEASE)
2017-03-19 23:28:22.697 INFO 3920 --- [ main] com.kazz.HelloworldApplication : Starting HelloworldApplication on DESKTOP-MQ8Q6N3 with PID 3920 (E:\eclipse-springboot\helloworld\target\classes started by Kazz in E:\eclipse-springboot\helloworld)
2017-03-19 23:28:22.699 INFO 3920 --- [ main] com.kazz.HelloworldApplication : No active profile set, falling back to default profiles: default
2017-03-19 23:28:22.744 INFO 3920 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@4cc451f2: startup date [Sun Mar 19 23:28:22 CST 2017]; root of context hierarchy
2017-03-19 23:28:24.539 INFO 3920 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2017-03-19 23:28:24.548 INFO 3920 --- [ main] o.apache.catalina.core.StandardService : Starting service Tomcat
2017-03-19 23:28:24.549 INFO 3920 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.5
2017-03-19 23:28:24.615 INFO 3920 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2017-03-19 23:28:24.615 INFO 3920 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1875 ms
2017-03-19 23:28:24.722 INFO 3920 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
2017-03-19 23:28:24.727 INFO 3920 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*]
2017-03-19 23:28:24.728 INFO 3920 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2017-03-19 23:28:24.728 INFO 3920 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2017-03-19 23:28:24.728 INFO 3920 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*]
2017-03-19 23:28:24.932 INFO 3920 --- [ main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@4cc451f2: startup date [Sun Mar 19 23:28:22 CST 2017]; root of context hierarchy
2017-03-19 23:28:24.979 INFO 3920 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/]}" onto public java.lang.String com.kazz.HelloworldApplication.hello()
2017-03-19 23:28:24.982 INFO 3920 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2017-03-19 23:28:24.982 INFO 3920 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2017-03-19 23:28:25.001 INFO 3920 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-03-19 23:28:25.001 INFO 3920 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-03-19 23:28:25.045 INFO 3920 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-03-19 23:28:25.143 INFO 3920 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
2017-03-19 23:28:25.199 INFO 3920 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2017-03-19 23:28:25.203 INFO 3920 --- [ main] com.kazz.HelloworldApplication : Started HelloworldApplication in 2.831 seconds (JVM running for 3.324)
2017-03-19 23:28:28.628 INFO 3920 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring FrameworkServlet 'dispatcherServlet'
2017-03-19 23:28:28.628 INFO 3920 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization started
2017-03-19 23:28:28.641 INFO 3920 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 13 ms
打开浏览器,输入地址http://localhost:8080/,显示的页面如下
可见,我没有做任何的配置,SB程序就自动使用Tomcat启动,上下文根为/,端口默认8080
这样一来,helloworld程序就搞定了,是不是很简单