本系列博客将学习并运用Spring Boot, 尽量会涉及到Spring Boot的方方面面,且会参考Spring Boot的官方文档,相关英文书籍,以及相关博客等知识,争取做到详尽易懂。

1. Spring Boot简介

(1) Spring Boot的目的在于构件可以运行的独立或基于生产级别的Spring应用。其特点在于大多数的Spring Boot应用均需要很少的配置,且容易上手。

(2) 可以使用Spring Boot创建Java程序,且基于java -jar命令执行或更传统的war包部署。

(3) Spring Boot也包含命令行工具,可以运行Spring脚本。

(4) Spring Boot的主要目标在于:

a. 提供全部Spring开发的快速、可访问的起步经验

b. 开箱即用,但随着需求的不同,很快被忽略的默认值。

c. 提供普通大项目类的非功能性特征,如嵌入服务,安全,矩阵, 健康检查及外部配置等

d. 绝没有代码生成,也没有XML的配置需求。

2. 系统要求

(1) Spring Boot2.0.0需要Java 8+, 且已嵌入的容器包括: Tomcat 8.5, Jetty 9.4, Undertow 1.3

3. Spring Boot安装

(1) Spring Boot的依赖使用org.springframework.boot.groupId。使用Maven POM文件可继承spring-boot-starter-parent项目,并声明一个或多个"Starter"依赖。

详细信息可参考如下:

<?xml version="1.0" encoding="UTF-8"?>
<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>myproject</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- Inherit defaults from Spring Boot -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.BUILD-SNAPSHOT</version>
</parent>
<!-- Add typical dependencies for a web application -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!-- Package as an executable jar -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<!-- Add Spring repositories -->
<!-- (you don't need this if you are using a .RELEASE version) -->
<repositories>
<repository>
<id>spring-snapshots</id>
<url>http://repo.spring.io/snapshot</url>
<snapshots><enabled>true</enabled></snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<url>http://repo.spring.io/milestone</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<url>http://repo.spring.io/snapshot</url>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<url>http://repo.spring.io/milestone</url>
</pluginRepository>
</pluginRepositories>
</project>

其中, spring-boot-starter-parent是使用spring boot的很好的方法,但并不总是适用,可能有时你需要从另一个parent POM继承。

(2) 安装Spring Boot CLI

Spring Boot CLI命令行工具可以使你快速原生使用Spring,其允许运行Groovy脚本。可以手工安装,在windows中执行bin/目录下的spring.bat脚本,即可设置运行所需的环境变量。

1) 快速使用spring boot CLI

首先创建groovy脚本,命令为app.groovy。

@RestController
class ThisWillActuallyRun{
@RequestMapping("/")
String home(){
"Hello World!"
}
}

然后在该脚本的所在目录下执行,第一次执行时速度较慢,因为需要加载所需依赖:

spring run app.groovy

运行的日志如下:

F:\software\spring-2.0.0.BUILD-SNAPSHOT\bin>spring run app.groovy
Resolving dependencies...... . ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.0.0.BUILD-SNAPSHOT) 2017-12-03 14:38:07.187 INFO 7776 --- [ runner-0] o.s.boot.SpringApplicat
ion : Starting application on WangSong with PID 7776 (F:\software\
spring-2.0.0.BUILD-SNAPSHOT\lib\spring-boot-cli-2.0.0.BUILD-SNAPSHOT.jar started
by Administrator in F:\software\spring-2.0.0.BUILD-SNAPSHOT\bin)
2017-12-03 14:38:07.215 INFO 7776 --- [ runner-0] o.s.boot.SpringApplicat
ion : No active profile set, falling back to default profiles: def
ault
2017-12-03 14:38:10.862 INFO 7776 --- [ runner-0] ConfigServletWebServerA
pplicationContext : Refreshing org.springframework.boot.web.servlet.context.Anno
tationConfigServletWebServerApplicationContext@71fdc9: startup date [Sun Dec 03
14:38:10 CST 2017]; root of context hierarchy
2017-12-03 14:38:19.287 INFO 7776 --- [ runner-0] o.h.v.i.engine.Validato
rFactoryImpl : HV000238: Temporal validation tolerance set to 0.
2017-12-03 14:38:29.058 INFO 7776 --- [ runner-0] o.s.b.w.embedded.tomcat
.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2017-12-03 14:38:29.156 INFO 7776 --- [ runner-0] o.apache.catalina.core.
StandardService : Starting service [Tomcat]
2017-12-03 14:38:29.178 INFO 7776 --- [ runner-0] org.apache.catalina.cor
e.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.23
2017-12-03 14:38:29.354 INFO 7776 --- [ost-startStop-1] o.a.catalina.core.AprLi
fecycleListener : The APR based Apache Tomcat Native library which allows opti
mal performance in production environments was not found on the java.library.pat
h: [D:\Program Files\Java\jdk1.8.0_66\bin;C:\Windows\Sun\Java\bin;C:\Windows\sys
tem32;C:\Windows;C:\ProgramData\Oracle\Java\javapath;D:\Program Files\apache-ant
\bin;D:\Program Files\Java\jdk1.8.0_66\bin;D:\Program Files\Java\jdk1.8.0_66\jre
\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32
\WindowsPowerShell\v1.0\;C:\Program Files\Common Files\Thunder Network\KanKan\Co
decs;D:\MATLAB\bin\win32;D:\bin\win32;C:\Program Files\Microsoft SQL Server\100\
Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;D:\Program Files
\win7缇庡寲澶у笀\Windows7Master;D:\Program Files\MATLAB\R2011a\runtime\win32;D:
\Program Files\MATLAB\R2011a\bin;D:\Program Files\OpenCV\opencv\build\x86\vc10\b
in;D:\PProgram Files\Windows7Master;C:\Program Files\Microsoft SQL Server\90\Too
ls\binn\;C:\Program Files\Microsoft SQL Server\90\DTS\Binn\;C:\Program Files\Mic
rosoft SQL Server\80\Tools\Binn\;C:\Program Files\MySQL\MySQL Server 5.5\bin;D:\
Program Files\MongoDB\mongodb-win32-i386-2.6.4\bin;C:\Windows\system32;C:\Window
s;C:\Windows\System32\Wbem;D:\Program Files\VisualSVN Server\bin;D:\Program File
s\TortoiseSVN\bin;F:\software\apache-maven-3.3.9\bin;D:\Program Files\Sublime Te
xt 3;D:\Program Files\Python\Python35-32;;D:\Program Files\Anaconda3;D:\Program
Files\Anaconda3\Scripts;D:\Program Files\Anaconda3\Library\bin;D:\Program Files\
vc++\Microsoft Visual Studio\Common\MSDev98\Bin;D:\Program Files\vc++\Microsoft
Visual Studio\Common\Tools;D:\Program Files\vc++\Microsoft Visual Studio\VC98\bi
n;D:\ModelsimSE6.5\Modelsim\win32;D:\Program Files\OpenCV\opencv\build\x86\vc10\
bin;C:\Users\Administrator\AppData\Roaming\Dashlane\1.7.7.30648\bin\Firefox_Exte
nsion\{442718d9-475e-452a-b3e1-fb1ee16b8e9f}\components;.]
2017-12-03 14:38:30.086 INFO 7776 --- [ost-startStop-1] org.apache.catalina.loa
der.WebappLoader : Unknown loader org.springframework.boot.cli.compiler.Extende
dGroovyClassLoader$DefaultScopeParentClassLoader@17a66d8 class org.springframewo
rk.boot.cli.compiler.ExtendedGroovyClassLoader$DefaultScopeParentClassLoader
2017-12-03 14:38:30.270 INFO 7776 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[loc
alhost].[/] : Initializing Spring embedded WebApplicationContext
2017-12-03 14:38:30.272 INFO 7776 --- [ost-startStop-1] o.s.web.context.Context
Loader : Root WebApplicationContext: initialization completed in 1941
0 ms
2017-12-03 14:38:30.940 INFO 7776 --- [ost-startStop-1] o.s.b.w.servlet.Servlet
RegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
2017-12-03 14:38:30.999 INFO 7776 --- [ost-startStop-1] o.s.b.w.servlet.FilterR
egistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*]
2017-12-03 14:38:31.003 INFO 7776 --- [ost-startStop-1] o.s.b.w.servlet.FilterR
egistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2017-12-03 14:38:31.005 INFO 7776 --- [ost-startStop-1] o.s.b.w.servlet.FilterR
egistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2017-12-03 14:38:31.007 INFO 7776 --- [ost-startStop-1] o.s.b.w.servlet.FilterR
egistrationBean : Mapping filter: 'requestContextFilter' to: [/*]
2017-12-03 14:38:32.056 INFO 7776 --- [ runner-0] o.h.v.i.engine.Validato
rFactoryImpl : HV000238: Temporal validation tolerance set to 0.
2017-12-03 14:38:32.873 INFO 7776 --- [ runner-0] s.w.s.m.m.a.RequestMapp
ingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.web.
servlet.context.AnnotationConfigServletWebServerApplicationContext@71fdc9: start
up date [Sun Dec 03 14:38:10 CST 2017]; root of context hierarchy
2017-12-03 14:38:33.320 INFO 7776 --- [ runner-0] s.w.s.m.m.a.RequestMapp
ingHandlerMapping : Mapped "{[/]}" onto public java.lang.String ThisWillActually
Run.home()
2017-12-03 14:38:33.336 INFO 7776 --- [ runner-0] s.w.s.m.m.a.RequestMapp
ingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.Res
ponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframewo
rk.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet
.http.HttpServletRequest)
2017-12-03 14:38:33.340 INFO 7776 --- [ runner-0] s.w.s.m.m.a.RequestMapp
ingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.spr
ingframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web
.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequ
est,javax.servlet.http.HttpServletResponse)
2017-12-03 14:38:33.500 INFO 7776 --- [ runner-0] o.s.w.s.handler.SimpleU
rlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class or
g.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-12-03 14:38:33.501 INFO 7776 --- [ runner-0] o.s.w.s.handler.SimpleU
rlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.spring
framework.web.servlet.resource.ResourceHttpRequestHandler]
2017-12-03 14:38:33.662 INFO 7776 --- [ runner-0] o.s.w.s.handler.SimpleU
rlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [clas
s org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-12-03 14:38:35.337 INFO 7776 --- [ runner-0] o.s.j.e.a.AnnotationMBe
anExporter : Registering beans for JMX exposure on startup
2017-12-03 14:38:35.844 INFO 7776 --- [ runner-0] o.s.b.w.embedded.tomcat
.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2017-12-03 14:38:35.860 INFO 7776 --- [ runner-0] o.s.boot.SpringApplicat
ion : Started application in 37.269 seconds (JVM running for 63.37
5)
2017-12-03 14:38:37.391 INFO 7776 --- [nio-8080-exec-2] o.a.c.c.C.[Tomcat].[loc
alhost].[/] : Initializing Spring FrameworkServlet 'dispatcherServlet'
2017-12-03 14:38:37.393 INFO 7776 --- [nio-8080-exec-2] o.s.web.servlet.Dispatc
herServlet : FrameworkServlet 'dispatcherServlet': initialization started 2017-12-03 14:38:37.561 INFO 7776 --- [nio-8080-exec-2] o.s.web.servlet.Dispatc
herServlet : FrameworkServlet 'dispatcherServlet': initialization complet
ed in 167 ms

最后通过浏览器访问localhost:8080,结果如下图:

4. 开发第一个Spring Boot应用

(1) 创建Maven POM

创建的POM文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<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>myproject</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.BUILD-SNAPSHOT</version>
</parent>
<!-- Additional lines to be added here... -->
<!-- (you don't need this if you are using a .RELEASE version) -->
<repositories>
<repository>
<id>spring-snapshots</id>
<url>http://repo.spring.io/snapshot</url>
<snapshots><enabled>true</enabled></snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<url>http://repo.spring.io/milestone</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<url>http://repo.spring.io/snapshot</url>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<url>http://repo.spring.io/milestone</url>
</pluginRepository>
</pluginRepositories>
</project>

(2) 增加classpath依赖

spring boot有很多启动器依赖,本例web服务采用spring-boot-starter-web依赖。

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies

(3) 写代码

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 HelloWorld { @RequestMapping("/")
@ResponseBody
String home(){
return "Hello World";
} public static void main(String[] args) {
SpringApplication.run(HelloWorld.class, args);
} }

其中:

@RestController注解为stereotype注解,其为人们阅读代码提供一些提示,对于Spring来说,该类具有特定作用。上述例子为web@Controller,所以Spring在处理传入的web请求时会考虑该类。

@RequestMapping注解提供路由信息,其告诉Spring,任何具有"/"的HTTP请求都映射到home方法。@RestController注解告诉Spring将生成的字符串直接返回给请求者。

@EnableAutoConfiguration注解告诉spring boot根据添加的依赖关系来猜测你将如何配置Spring。在该例中,由于spring-boot-starter-web添加了Tomcat和Spring MVC,自动配置将假定你正在开发Web应用,并相应地配置Spring。

main方法中调用SpringApplication.run方法,启动Spring, 然后启动自动配置的Tomcat web服务。我们需要将HelloWorld.class作为一个参数传递给run方法,告知SpringApplication,它是主要的Spring组件。

(4) 运行之后,返回localhost:8080地址即可得到"Hello World"的显示。

(5) 创建可执行的jar包

在POM文件中增加如下插件:

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

然后执行打包命令,即可生成可执行的jar包,进一步运行部署。

Spring boot-(1) Spring Boot快速开始的更多相关文章

  1. Spring Boot 2.0 的快速入门(图文教程)

    摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! Spring Boot 2.0 的快速入门(图文教程) 大家都 ...

  2. Spring Boot (一)快速入门

    一.关于Spring Boot 在开始了解Spring Boot之前,我们需要先了解一下Spring,因为Spring Boot的诞生和Spring是息息相关的,Spring Boot是Spring发 ...

  3. Spring Boot 是 Spring 的一套快速配置脚手架,可以基于Spring Boot 快速开发单个微服务

    Spring Boot 是 Spring 的一套快速配置脚手架,可以基于Spring Boot 快速开发单个微服务,Spring Cloud是一个基于Spring Boot实现的云应用开发工具:Spr ...

  4. Spring Boot 2.0 教程 | 快速集成整合消息中间件 Kafka

    欢迎关注个人微信公众号: 小哈学Java, 每日推送 Java 领域干货文章,关注即免费无套路附送 100G 海量学习.面试资源哟!! 个人网站: https://www.exception.site ...

  5. 一:Spring Boot、Spring Cloud

    上次写了一篇文章叫Spring Cloud在国内中小型公司能用起来吗?介绍了Spring Cloud是否能在中小公司使用起来,这篇文章是它的姊妹篇.其实我们在这条路上已经走了一年多,从16年初到现在. ...

  6. 使用Spring Session实现Spring Boot水平扩展

    小编说:本文使用Spring Session实现了Spring Boot水平扩展,每个Spring Boot应用与其他水平扩展的Spring Boot一样,都能处理用户请求.如果宕机,Nginx会将请 ...

  7. 一起来学spring Cloud | 第一章:spring Cloud 与Spring Boot

    目前大家都在说微服务,其实微服务不是一个名字,是一个架构的概念,大家现在使用的基于RPC框架(dubbo.thrift等)架构其实也能算作一种微服务架构. 目前越来越多的公司开始使用微服务架构,所以在 ...

  8. 基于Spring Boot、Spring Cloud、Docker的微服务系统架构实践

    由于最近公司业务需要,需要搭建基于Spring Cloud的微服务系统.遍访各大搜索引擎,发现国内资料少之又少,也难怪,国内Dubbo正统治着天下.但是,一个技术总有它的瓶颈,Dubbo也有它捉襟见肘 ...

  9. Spring Cloud和Spring Boot的区别

    Spring MVC: Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 MVC ...

  10. Spring Boot(Spring的自动整合框架)

    Spring Boot 是一套基于Spring框架的微服务框架,由于Spring是一个轻量级的企业开发框架,主要功能就是用于整合和管理其他框架,想法是将平时主流使用到的框架的整合配置预先写好,然后通过 ...

随机推荐

  1. Win10下Tensorflow+GPU的环境配置

    不得不说,想要为深度学习提前打好框架确实需要花费一番功夫.本文主要记录了Win10下,Cuda9.0.Cudnn7.3.1.Tensorflow-gpu1.13.1.python3.6.8.Keras ...

  2. 公司内部Wiki及搭建wiki系统-confluence

    Wiki 是一个协同著作平台或称开放编辑系统.我们可以用Wiki来建设帮助系统,知识库系统.国内公共wiki最著名就是百度百科.那公司内部为什么要使用wiki呢? 2.内部wiki的作用 1.鼓励分享 ...

  3. Glib学习笔记(二)

    你将学到什么 如何实现Object的构造函数和析构函数 如何在条件检测不允许的情况下终止对象创建 Object的构造函数 对象的构造函数是不允许失败,如果你需要一个允许失败的GObject构造函数,使 ...

  4. 温故而知新_C语言_递归

    递归. 是的,差不多就是这种感觉.上面就是类似递归的显示表现. 2017 10 24更新: 递归这个问题放了很久.也没有写.大概是自己还没有好好理解吧. 在这里写下自己理解的全部. 一 何为递归. 字 ...

  5. STL迭代器思考

    在遍历STL容器类对象时进行插入和删除操作本身即是不合理的...再想想,待续... STL容器迭代过程中删除元素技巧(转)   1.连续内存序列容器(vector,string,deque) 序列容器 ...

  6. thinkphp 连接数据库 & 实例化模型操作 (下接thinkphp CURD 操作)/慕课

    7.1 连接数据库 (06:15) 1 7.2实例化模型 1 1.实例化基础模型 2 2. 实例化用户自定义模型 2 问题 2 3. 实例化公共模型 4 4. 实例化空模型 7    7.1 连接数据 ...

  7. CF1093E Intersection of Permutations 树状数组套权值线段树

    \(\color{#0066ff}{ 题目描述 }\) 给定整数 \(n\) 和两个 \(1,\dots,n\) 的排列 \(a,b\). \(m\) 个操作,操作有两种: \(1\ l_a\ r_a ...

  8. 最短路【洛谷P3946】ことりのおやつ(小鸟的点心)

    P3946 ことりのおやつ(小鸟的点心) 滑完雪之后,ことり突然想吃点心啦!于是她去了甜品店. 日本的冬天经常下雪.不幸的是,今天也是这样,每秒钟雪的厚度会增加q毫米. 秋叶原共有n个地点,编号从1到 ...

  9. 用rc.local工具开机自启动

    对于一些程序来说,无法直接开机自启动.那么我们可以利用开机自启动来执行一些命令,达到开机自启动的效果!!! 下面用tomcat来举个例子 tomcat启动的命令一般是./startup.sh 那么我们 ...

  10. springboot整合redis存放session

    y进入maven依赖: <!--spring boot 与redis应用基本环境配置 --> <dependency> <groupId>org.springfra ...