spring boot 初试,springboot入门,springboot helloworld例子
因为项目中使用了 spring boot ,之前没接触过,所以写个 helloworld 玩玩看,当做 springboot 的一个入门例子。搜索 spring boot。得到官方地址:http://projects.spring.io/spring-boot/
本文脉络:
1. 一句话介绍 spring boot 是干啥的。
2. 为啥要用 spring boot.
3. 用一个 helloworld 打开 springboot。
- springboot 是干啥的,可以吃吗。
一句话:做过 Javaweb 开发的程序员,肯定都知道 spring 框架。springboot 就是一个能够快速搭起 spring 项目的神器。
- 为啥要用 spring boot
在没有 springboot 之前,假如我们需要使用 spring 来搭建一个项目,比如说搭建一个 spring mvc 的项目。我们需要干啥:
假如说我们是使用 Maven 那么步骤是这样的:
1. 新建一个 maven 项目,package 方式为 war.
2. 加入相关依赖,什么 spring-bean,spring-context,spring-webmvc 等等,在 web.xml 中配置 spring listener,配置 spring.xml 之类的。
3. 在 2 完成之后,依赖都配置好了,编译通过了,就可以运行项目了。
假如我们没有使用 maven, 就是单纯的建个 web 项目,然后到处 copy jar 包到 webapp lib 下面,将会更麻烦,各种容易漏 jar 包。
所以,上面的方式,对于新手而言,可能一个小时也跑不起一个项目。而有了 springboot 之后可能只需要十几分钟。
- 一个 demo 打开 springboot。
1. 新建 maven 项目,package 方式为 war. (Maven 的介绍,安装与使用见 这里)
使用 maven 的时候,maven 会从仓库中下载依赖的 jar 包,国外仓库可能会很慢,所以最好有个私服。一般公司都会有私服,私服搭建看这里。
2. 在 pom 文件 spring boot 需要的依赖,配置文件如下:
<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> <groupId>com.example</groupId> <artifactId>springbootdemo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <build /> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.4.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> </project>
看这个 pom 文件,dependencies 节点下面只配置了一个 spring-boot-starter-web 依赖,加了一个 parent 配置,实在是太简洁了。
3. 编写测试 action,这个 action 跟你用其他方式创建 spring 项目里边的 action 个没啥区别,@controller 注解 action 类 ,@Requestmapping 映射请求地址。
唯一不同的就是多了一个 Main 方法和 EnableAutoConfiguration 注解,这个 main 方法使用来运行这个 demo 的。
package com.example;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
@EnableAutoConfiguration
public class HelloController {@RequestMapping(</span>"/hello"<span style="color: rgba(0, 0, 0, 1)">) @ResponseBody String home() { </span><span style="color: rgba(0, 0, 255, 1)">return</span> "Hello ,spring boot!"<span style="color: rgba(0, 0, 0, 1)">; } </span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">void</span> main(String[] args) <span style="color: rgba(0, 0, 255, 1)">throws</span><span style="color: rgba(0, 0, 0, 1)"> Exception { SpringApplication.run(HelloController.</span><span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">, args); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">运行之后在浏览器中访问:</span><span style="color: rgba(0, 128, 0, 1); text-decoration: underline">http://localhost</span><span style="color: rgba(0, 128, 0, 1)">:8080/hello</span>
}
}
4. 启动项目,只需要运行上面代码的 main 方法,运行成功,控制台输出如下:
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ (()\___ | '_ |'_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ))) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.3.4.RELEASE)2016-05-10 15:21:46.299 INFO 6668 --- [main] com.example.HelloController : Starting HelloController on 0KE99GYM83Y5KGX with PID 6668 (D:\newspace\springbootdemo\target\classes started by Administrator in D:\newspace\springbootdemo)
2016-05-10 15:21:46.301 INFO 6668 --- [main] com.example.HelloController : No active profile set, falling back to default profiles: default
2016-05-10 15:21:46.337 INFO 6668 --- [main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@18b8315: startup date [Tue May 10 15:21:46 CST 2016]; root of context hierarchy
2016-05-10 15:21:47.385 INFO 6668 --- [main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2016-05-10 15:21:47.399 INFO 6668 --- [main] o.apache.catalina.core.StandardService : Starting service Tomcat
2016-05-10 15:21:47.400 INFO 6668 --- [main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.0.33
2016-05-10 15:21:47.482 INFO 6668 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2016-05-10 15:21:47.482 INFO 6668 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1148 ms
2016-05-10 15:21:47.714 INFO 6668 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
2016-05-10 15:21:47.718 INFO 6668 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*]
2016-05-10 15:21:47.718 INFO 6668 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2016-05-10 15:21:47.718 INFO 6668 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2016-05-10 15:21:47.718 INFO 6668 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*]
2016-05-10 15:21:47.939 INFO 6668 --- [main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@18b8315: startup date [Tue May 10 15:21:46 CST 2016]; root of context hierarchy
2016-05-10 15:21:47.991 INFO 6668 --- [main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/hello]}" onto java.lang.String com.example.HelloController.home()
2016-05-10 15:21:47.993 INFO 6668 --- [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)
2016-05-10 15:21:47.994 INFO 6668 --- [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)
2016-05-10 15:21:48.014 INFO 6668 --- [main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-05-10 15:21:48.014 INFO 6668 --- [main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-05-10 15:21:48.048 INFO 6668 --- [main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [//favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-05-10 15:21:48.128 INFO 6668 --- [main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
2016-05-10 15:21:48.187 INFO 6668 --- [main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2016-05-10 15:21:48.190 INFO 6668 --- [main] com.example.HelloController : Started HelloController in 2.166 seconds (JVM running for 2.401)
2016-05-10 15:22:03.171 INFO 6668 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring FrameworkServlet 'dispatcherServlet'
2016-05-10 15:22:03.171 INFO 6668 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization started
2016-05-10 15:22:03.181 INFO 6668 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 10 ms
这是啥,这是应用启动了啊。我们之前在没有使用 springboot 的时候,就是一般的 spring 项目启动应用需要干啥。之前是 deploy 到 tomcat 里边,然后启动 tomcat。
这里我啥都没干,连 web.xml 都没写,直接运行这个 Main 方法就可以了。
5. 在浏览器中访问,如下:
可以看到,这种方式创建一个 spring 的 web 项目比较方便。如果是传统的 spring 项目,需要添加各种依赖,然后发布到 tomcat 运行看效果。
这里只需要很少的依赖引用配置,运行一个方法便可以直接在浏览器访问。正如 springboot 官网上说的 Just run。
[本例代码地址](http://git.oschina.net/dimixu/springbootdemo)
更多内容,欢迎关注公众号
推荐阅读:
[spring-data-rest 的魔力 10 分钟实现增删改查](https://www.cnblogs.com/demingblog/p/10599134.html)
[探索 Java9 模块系统和反应流](https://www.cnblogs.com/demingblog/p/9104103.html)
[Java8 系列 - 如何用 Java8 Stream API 找到心仪的女朋友]
[Java8 系列 - 何用 Java8 Stream API 进行数据抽取与收集
[Lua 脚本在 redis 分布式锁场景的运用](https://www.cnblogs.com/demingblog/p/9542124.html)
[redis 单点、redis 主从、redis 集群 cluster 配置搭建与使用](https://www.cnblogs.com/demingblog/p/10295236.html)
[Netty 开发 redis 客户端,Netty 发送 redis 命令,netty 解析 redis 消息](https://www.cnblogs.com/demingblog/p/9989699.html)
[spring 如何启动的?这里结合 spring 源码描述了启动过程](https://www.cnblogs.com/demingblog/p/7443714.html)
[SpringMVC 是怎么工作的,SpringMVC 的工作原理](https://www.cnblogs.com/demingblog/p/9925268.html)
[spring 异常处理。结合 spring 源码分析 400 异常处理流程及解决方法](https://www.cnblogs.com/demingblog/p/9218271.html)
[Mybatis Mapper 接口是如何找到实现类的 - 源码分析](https://www.cnblogs.com/demingblog/p/9544774.html)
[使用 Netty 实现 HTTP 服务器](https://www.cnblogs.com/demingblog/p/9970772.html)
[Netty 实现心跳机制 ](https://www.cnblogs.com/demingblog/p/9957143.html)
[Netty 系列](https://www.cnblogs.com/demingblog/p/9912099.html)