Spring Boot 引入 Thymeleaf 及入门使用

引言

        Spring Boot 推荐我们使用模板引擎 Thymeleaf 来开发页面,因为它语法简单,功能强大。作为模板引擎,Thymeleaf 和市面上主流其他的 Java 模板引擎:JSPVelocityFreemarker,原理都是类似的。

  1. 模板引擎的作用:将模板(我们开发的页面)和 数据进行整合,然后输出内容显示的过程。
  2. 模板引擎的区别:不同的模板都有它们自己不同的语法。

1.Spring Boot 引入 Thymeleaf

       Thymeleaf 官网:我是官网链接,Thymeleaf 已经将代码托管在了 Github 上:我是Github地址。Spring Boot 如何引入 Thymeleaf 模板,我们只需要在 pom.xml 中添加如下 Maven 依赖即可。

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

1.1 修改 Thymeleaf 版本

       因为 Spring Boot 的自动配置,它已经为我们 Spring Boot 的每个版本都指定了各个组件的版本。如果你还在使用 Spring Boot 1.x 版本,它为我们自动指定的Thymeleaf 版本为 2.x 版本。在项目开发中,2.x 的 Thymeleaf 版本有点低,建议您升级到 Thymeleaf 3.x 版本。Spring Boot 官方有介绍我们该如何使用 Thymeleaf 3.x 版本。官网地址。我们只需要修改 Maven 依赖的 Thymeleaf 版本即可。

<properties>
    <thymeleaf.version>3.0.11.RELEASE</thymeleaf.version>
    <thymeleaf-layout-dialect.version>2.4.1</thymeleaf-layout-dialect.version>
</properties>

1.2 修改 Thymeleaf Layout Dialect 版本

       修改 Thymeleaf 的同时,必须同时修改 Thymeleaf Layout Dialect 布局组件的版本。Thymeleaf Layout Dialect 布局组件从 2.0.0 版本开始支持 Thymeleaf 3 。 Thymeleaf Layout dialect 2.0.0 rewritten to support Thymeleaf 3 。官网有提及:我是官网说明。所以此处均使用目前最新版本,Thymeleaf:3.1.11.RELEASE,Thymeleaf Layout Dialect:2.4.1
在这里插入图片描述

2.Thymeleaf 语法介绍

       Thymeleaf 的语法使用文档,官方为我们有提供 PDF 介绍,此处附官方文档:官方PDF文档,此处就来简单介绍一下基本的语法。

2.1 Thymeleaf 模板存放路径介绍   默认路径:classpath:/templates/

        Spring Boot 关于 Thymeleaf 的所有配置信息,都在 ThymeleafProperties类下。部分代码如下:通过代码我可以知道→→(重要:)只要我们把(HTML)页面放在 classpath:/templates/这个目录下,后缀名为.html,thymeleaf 就能帮我们自动渲染!!!

       除此之外,我们也可以在全局配置文件中,通过spring.thymeleaf.prefix 的方式来修改这个路径。 其他配置信息的修改,通过spring.thymeleaf.属性名即可。

@ConfigurationProperties(prefix = "spring.thymeleaf")
public class ThymeleafProperties {

	private static final Charset DEFAULT_ENCODING = Charset.forName("UTF-8");

	private static final MimeType DEFAULT_CONTENT_TYPE = MimeType.valueOf("text/html");

	//默认前缀
	public static final String DEFAULT_PREFIX = "classpath:/templates/";

 	//默认后缀
	public static final String DEFAULT_SUFFIX = ".html";

	/**
	 * Check that the template exists before rendering it (Thymeleaf 3+).
	 */
	private boolean checkTemplate = true;

	/**
	 * Check that the templates location exists.
	 */
	private boolean checkTemplateLocation = true;

	/**
	 * Prefix that gets prepended to view names when building a URL.
	 */
	private String prefix = DEFAULT_PREFIX;

	/**
	 * Suffix that gets appended to view names when building a URL.
	 */
	private String suffix = DEFAULT_SUFFIX;
}

2.2 Thymeleaf 引入工程

1.导入 thymeleaf 的名称空间

       导入 thymeleaf 的名称空间,只是为了语法提示,你也可以不导入的。

<html lang="en" xmlns:th="http://www.thymeleaf.org">
2.使用 thymeleaf 语法
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <!--th:text 将div里面的文本内容设置为 -->
    <div th:text="${hello}">这是显示欢迎信息</div>
</body>
</html>

2.3 Thymeleaf 标签

       这类属性很多,每个属性都针对特定的HTML5属性,以下属性内容摘抄自官方 pdf 文档,标签有缺失。在这些所有属性中,我们常用到的也就那么几个,用的时候查一查就好了。

th:abbr                 th:accept 				th:accept-charset
th:accesskey            th:action 				th:align
th:alt                  th:archive 				th:audio
th:autocomplete         th:axis 				th:background
th:bgcolor              th:border 				th:cellpadding
th:cellspacing          th:challenge 			th:charset
th:cite                 th:class 				th:classid
th:codebase             th:codetype 			th:cols
th:colspan              th:compact 				th:content
th:contenteditable      th:contextmenu 			th:data
th:datetime             th:dir					th:draggable
th:dropzone             th:enctype 				th:for
th:form 				th:formaction 			th:formenctype
th:formmethod 			th:formtarget 			th:fragment
th:frame 				th:frameborder 			th:headers
th:height 				th:high 				th:href
th:hreflang 			th:hspace 				th:http-equiv
th:icon 				th:id 					th:inline
th:keytype 				th:kind 				th:label
th:lang 				th:list 				th:longdesc
th:low 					th:manifest 			th:marginheight
th:marginwidth 			th:max 					th:maxlength
th:media 				th:method 				th:min
th:name 				th:onabort 				th:onafterprint
th:onbeforeprint 		th:onbeforeunload 		th:onblur
th:oncanplay 			th:oncanplaythrough 	th:onchange
th:onclick 				th:oncontextmenu 		th:ondblclick
th:ondrag 				th:ondragend 			th:ondragenter
th:ondragleave 			th:ondragover 			th:ondragstart
th:ondrop 				th:ondurationchange 	th:onemptied
th:onended				th:onerror 				th:onfocus
th:onformchange 		th:onforminput 			th:onhashchange
th:oninput 				th:oninvalid 			th:onkeydown
th:onkeypress 			th:onkeyup 				th:onload
th:onloadeddata 		th:onloadedmetadata 	th:onloadstart
th:onmessage 			th:onmousedown 			th:onmousemove
th:onmouseout 			th:onmouseover 			th:onmouseup
th:onmousewheel 		th:onoffline 			th:ononline
th:onpause 				th:onplay 				th:onplaying
th:onpopstate 			th:onprogress 			th:onratechange
th:onreadystatechange 	th:onredo 				th:onreset
th:onresize 			th:onscroll 			th:onseeked
th:onseeking 			th:onselect 			th:onshow
th:onstalled 			th:onstorage 			th:onsubmit
th:onsuspend 			th:ontimeupdate 		th:onundo
th:onunload 			th:onvolumechange 		th:onwaiting
th:optimum 				th:pattern 				th:placeholder
th:poster 				th:preload 				th:radiogroup
th:rel 					th:rev 					th:rows
th:rowspan 				th:rules 				th:sandbox
th:scheme 				th:scope 				th:scrolling
th:size 				th:sizes 				th:span
th:spellcheck 			th:src 					th:srclang
th:standby 				th:start 				th:step
th:style 				th:summary 				th:tabindex
th:target 				th:text 				th:title 				
th:type					th:usemap 				th:value 				
th:valuetype			th:vspace 				th:width 				
th:wrap					th:xmlbase 				th:xmllang 				
th:xmlspace

2.4 Thymeleaf 表达式介绍

Thymeleaf 内置了 5 种表达式:

1.${…} 表达式 获取变量值;底层实现是OGNL

①获取对象的属性、调用方法

此部分的具体使用,参考:pdf 这部分→4.2 Variables

/*
* Access to properties using the point (.). Equivalent to calling property getters.
*/
${person.father.name}
/*
* Access to properties can also be made by using brackets ([]) and writing
* the name of the property as a variable or between single quotes.
*/
${person['father']['name']}
/*
* If the object is a map, both dot and bracket syntax will be equivalent to
* executing a call on its get(...) method.
*/
${countriesByCode.ES}
${personsByName['Stephen Zucchini'].age}
/*
* Indexed access to arrays or collections is also performed with brackets,
* writing the index without quotes.
*/
${personsArray[0].name}
/*
* Methods can be called, even with arguments.
*/
${person.createCompleteName()}
${person.createCompleteNameWithSeparator('-')}

②还可以使用 Thymeleaf 内置的基本对象:(使用#号)

#ctx : the context object.
#vars: the context variables.
#locale : the context locale.
#request : (only in Web Contexts) the HttpServletRequest object.
#response : (only in Web Contexts) the HttpServletResponse object.
#session : (only in Web Contexts) the HttpSession object.
#servletContext : (only in Web Contexts) the ServletContext object.

       此部分的介绍,请参考 pdf 这部分→Expression Basic Objects。详细使用介绍,请参见考:pdf 这部分→18 Appendix A: Expression Basic Objects

③Thymeleaf 还内置了一些工具对象:

#execInfo : information about the template being processed.
#messages : methods for obtaining externalized messages inside variables expressions, in the same way as they
would be obtained using #{} syntax.
#uris : methods for escaping parts of URLs/URIs
#conversions : methods for executing the configured conversion service (if any).
#dates : methods for java.util.Date objects: formatting, component extraction, etc.
#calendars : analogous to #dates , but for java.util.Calendar objects.
#numbers : methods for formatting numeric objects.
#strings : methods for String objects: contains, startsWith, prepending/appending, etc.
#objects : methods for objects in general.
#bools : methods for boolean evaluation.
#arrays : methods for arrays.
#lists : methods for lists.
#sets : methods for sets.
#maps : methods for maps.
#aggregates : methods for creating aggregates on arrays or collections.
#ids : methods for dealing with id attributes that might be repeated (for example, as a result of an iteration).

       此部分的介绍,请参考 pdf 这部分→Expression Utility Objects。详细使用介绍,请参考:pdf 这部分→18 Appendix A: Expression Basic Objects

2.*{…} 表达式 和${…}在功能上是一样;唯一一点不同如下↓↓↓

使用*{…}方式:

<div th:object="${session.user}">
	<p>Name: <span th:text="*{firstName}">Sebastian</span>.</p>
	<p>Surname: <span th:text="*{lastName}">Pepper</span>.</p>
	<p>Nationality: <span th:text="*{nationality}">Saturn</span>.</p>
</div>

使用${…}方式:

<div th:object="${session.user}">
	<p>Name: <span th:text="${session.user.firstName}">Sebastian</span>.</p>
	<p>Surname: <span th:text="${session.user.lastName}">Pepper</span>.</p>
	<p>Nationality: <span th:text="${session.user.nationality}">Saturn</span>.</p>
</div>

        区别在于:针对对象遍历来说,使用*{…} 比 ${…} 简洁点。这两种表达式,也可以混合在一起使用,不过没人会这么用吧,哈哈。

        此部分的介绍,请参见 pdf 这部分→4.3 Expressions on selections (asterisk syntax)。详细使用介绍也参考:pdf 这部分→4.3 Expressions on selections (asterisk syntax)

3.#{…} 表达式 该表达式称之为消息表达式,消息表达式主要用于从消息源中提取消息内容实现国际化。

举个例子:

<p th:utext="#{home.welcome}">Welcome to our grocery store!</p>

消息属性可以是传统的静态值

home.welcome=¡Bienvenido a nuestra tienda de comestibles!

也可以带有参数声明,参数声明格式符合java.text.MessageFormat标准

home.welcome=¡Bienvenido a nuestra tienda de comestibles, {0}!

通过在消息名称后边加括号声明参数的方式#{messageKey(param=value)}实现参数赋值

<p th:utext="#{home.welcome(${session.user.name})}">
  	Welcome to our grocery store, Sebastian Pepper!
</p>

多个参数用","分割

#{messageKey(param1=value1,param2=value2)}

messageKey 本身可以是一个变量表达式

<p th:utext="#{${welcomeMsgKey}(${session.user.name})}">
  	Welcome to our grocery store, Sebastian Pepper!
</p>

消息源介绍:

       大多数情况下,消息源是 .properties文件,同时你可以自定义其他消息源,比如数据库。消息源通过org.thymeleaf.messageresolver.IMessageResolver 获取,如果在初始化模板引擎时没有自定义的IMessageResolver 被提供,那么一个默认的实现org.thymeleaf.messageresolver.StandardMessageResolver会被自动提供。

StandardMessageResolver查找和模板文件位于同级目录,且具有和模板文件相同名字的*.properties*文件。

模板/WEB-INF/templates/home.html在渲染时,会根据 local 设置,使用下面的消息源文件

  • /WEB-INF/templates/home_en.properties for English texts.
  • /WEB-INF/templates/home_es.properties for Spanish language texts.
  • /WEB-INF/templates/home_pt_BR.properties for Portuguese (Brazil) language texts.
  • /WEB-INF/templates/home.properties for default texts (if the locale is not matched).

        此部分的介绍,主要应用于国际化,请参见 pdf 这部分→4.1 Messages。详细使用介绍请参考:pdf 这部分→Using th:text and externalizing text

4.@{…}表达式 该表达式称之为URL表达式

@{…}表达式,用来定义URL。我在此处扔个例子就走人了→→→

<!-- Will produce 'http://localhost:8080/gtvg/order/details?orderId=3' (plus rewriting) -->
<a href="details.html" th:href="@{http://localhost:8080/gtvg/order/details(orderId=${o.id})}">view</a>
<!-- Will produce '/gtvg/order/details?orderId=3' (plus rewriting) -->
<a href="details.html" th:href="@{/order/details(orderId=${o.id})}">view</a>
<!-- Will produce '/gtvg/order/3/details' (plus rewriting) -->
<a href="details.html" th:href="@{/order/{orderId}/details(orderId=${o.id})}">view</a>

        此部分的介绍,主要应用于国际化,请参见 pdf 这部分→4.4 Link URLs。详细使用介绍也参考:pdf 这部分→4.4 Link URLs

5.~{…}表达式 该表达式称之为片段表达式

       片段表达式的使用,你可以参考博主的这篇文章→→→Thymeleaf 公共组件的抽取

       片段表达式表示标记片段,并将其在模板中"移动"的简便方法。 这允许我们复制它们,将它们作为参数传递给其他模板,依此类推。最常见的用途是使用 th:insertth:replace进行片段插入。

<div th:insert="~{commons :: main}">...</div>

但是它们可以在任何地方使用,就像其他任何变量一样:

<div th:with="frag=~{footer :: #main/text()}">
	<p th:insert="${frag}">
</div>

        此部分的介绍,请参见 pdf 这部分→4.5 Fragments。详细使用介绍也参考:pdf 这部分→8 Template Layout。此部分建议你去看一下详细介绍,就类似于模板使用一样:一处编写,到处使用

2.5 Thymeleaf 其他基本使用介绍

       Thymeleaf 对 字面量、文本操作、数学运算、布尔运算、比较运算、条件运算、特殊无操作运算,都做了一些基本的介绍。如下所示:

1.字面量
Literals(字面量)
      Text literals: 'one text' , 'Another one!' ,…
      Number literals: 0 , 34 , 3.0 , 12.3 ,…
      Boolean literals: true , false
      Null literal: null
      Literal tokens: one , sometext , main ,
2.文本操作
Text operations:(文本操作)
   String concatenation: +
   Literal substitutions: |The name is ${name}|
3.数学运算
Arithmetic operations:(数学运算)
    Binary operators: + , - , * , / , %
    Minus sign (unary operator): -
4.布尔运算
Boolean operations:(布尔运算)
    Binary operators: and , or
    Boolean negation (unary operator): ! , not
5.比较运算
Comparisons and equality:(比较运算)
    Comparators: > , < , >= , <= ( gt , lt , ge , le )
    Equality operators: == , != ( eq , ne )
6.条件运算
Conditional operators:条件运算(三目运算符)
    If-then: (if) ? (then)
    If-then-else: (if) ? (then) : (else)
    Default: (value) ?: (defaultvalue)
7.条件运算
Special tokens:(特殊操作)
    No-Operation: _        举例:可以这么使用 if(1=1)?'yes':_  (否则啥也不干)

3.文末附Thymeleaf pdf 版使用手册一份

     附 Thymeleaf 开发参考手册一份:参考手册链接


博主写作不易,来个关注呗

求关注、求点赞,加个关注不迷路 ヾ(◍°∇°◍)ノ゙

博主不能保证写的所有知识点都正确,但是能保证纯手敲,错误也请指出,望轻喷 Thanks♪(・ω・)ノ

  • 7
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
00、尚硅谷_SpringBoot_源码、课件 01、尚硅谷_SpringBoot_入门-课程简介 02、尚硅谷_SpringBoot_入门-Spring Boot简介 03、尚硅谷_SpringBoot_入门-微服务简介 04、尚硅谷_SpringBoot_入门-环境准备 05、尚硅谷_SpringBoot_入门-springboot-helloworld 06、尚硅谷_SpringBoot_入门-HelloWorld细节-场景启动器(starter) 07、尚硅谷_SpringBoot_入门-HelloWorld细节-自动配置 08、尚硅谷_SpringBoot_入门-使用向导快速创建Spring Boot应用 09、尚硅谷_SpringBoot_配置-yaml简介 10、尚硅谷_SpringBoot_配置-yaml语法 11、尚硅谷_SpringBoot_配置-yaml配置文件值获取 12、尚硅谷_SpringBoot_配置-properties配置文件编码问题 13、尚硅谷_SpringBoot_配置-@ConfigurationProperties与@Value区别 14、尚硅谷_SpringBoot_配置-@PropertySource、@ImportResource、@Bean 15、尚硅谷_SpringBoot_配置-配置文件占位符 16、尚硅谷_SpringBoot_配置-Profile多环境支持 17、尚硅谷_SpringBoot_配置-配置文件的加载位置 18、尚硅谷_SpringBoot_配置-外部配置加载顺序 19、尚硅谷_SpringBoot_配置-自动配置原理 20、尚硅谷_SpringBoot_配置-@Conditional&自动配置报告 21、尚硅谷_SpringBoot_日志-日志框架分类和选择 22、尚硅谷_SpringBoot_日志-slf4j使用原理 23、尚硅谷_SpringBoot_日志-其他日志框架统一转换为slf4j 24、尚硅谷_SpringBoot_日志-SpringBoot日志关系 25、尚硅谷_SpringBoot_日志-SpringBoot默认配置 26、尚硅谷_SpringBoot_日志-指定日志文件和日志Profile功能 27、尚硅谷_SpringBoot_日志-切换日志框架 28、尚硅谷_SpringBoot_web开发-简介 29、尚硅谷_SpringBoot_web开发-webjars&静态资源映射规则 30、尚硅谷_SpringBoot_web开发-引入thymeleaf 31、尚硅谷_SpringBoot_web开发-thymeleaf语法 32、尚硅谷_SpringBoot_web开发-SpringMVC自动配置原理 33、尚硅谷_SpringBoot_web开发-扩展与全面接管SpringMVC 34、尚硅谷_SpringBoot_web开发-【实验】-引入资源 35、尚硅谷_SpringBoot_web开发-【实验】-国际化 36、尚硅谷_SpringBoot_web开发-【实验】-登陆&拦截器 37、尚硅谷_SpringBoot_web开发-【实验】-Restful实验要求 38、尚硅谷_SpringBoot_web开发-【实验】-员工列表-公共页抽取 39、尚硅谷_SpringBoot_web开发-【实验】-员工列表-链接高亮&列表完成 40、尚硅谷_SpringBoot_web开发-【实验】-员工添加-来到添加页面 41、尚硅谷_SpringBoot_web开发-【实验】-员工添加-添加完成 42、尚硅谷_SpringBoot_web开发-【实验】-员工修改-重用页面&修改完成 43、尚硅谷_SpringBoot_web开发-【实验】-员工删除-删除完成 44、尚硅谷_SpringBoot_web开发-错误处理原理&定制错误页面 45、尚硅谷_SpringBoot_web开发-定制错误数据 46、尚硅谷_SpringBoot_web开发-嵌入式Servlet容器配置修改 47、尚硅谷_SpringBoot_web开发-注册servlet三大组件 48、尚硅谷_SpringBoot_web开发-切换其他嵌入式Servlet容器 49、尚硅谷_SpringBoot_web开发-嵌入式Servlet容器自动配置原理 50、尚硅谷_SpringBoot_web开发-嵌入式Servlet容器启动原理 51、尚硅谷_SpringBoot_web开发-使用外部Servlet容器&JSP;支持 52、尚硅谷_SpringBoot_web开发-外部Servlet容器启动SpringBoot应用原理 53、尚硅谷_SpringBoot_Docker-简介 54、尚硅谷_SpringBoot_Docker-核心概念 55、尚硅谷_SpringBoot_Docker-linux环境准备 56、尚硅谷_SpringBoot_Docker-docker安装&启动&停止 57、尚硅谷_SpringBoot_Docker-docker镜像操作常用命令 58、尚硅谷_SpringBoot_Docker-docker容器操作常用命令 59、尚硅谷_SpringBoot_Docker-docker安装MySQL 60、尚硅谷_SpringBoot_数据访问-简介 61、尚硅谷_SpringBoot_数据访问-JDBC&自动配置原理 62、尚硅谷_SpringBoot_数据访问-整合Druid&配置数据源监控 63、尚硅谷_SpringBoot_数据访问-整合MyBatis(一)-基础环境搭建 64、尚硅谷_SpringBoot_数据访问-整合MyBatis(二)-注解版MyBatis 65、尚硅谷_SpringBoot_数据访问-整合MyBatis(二)-配置版MyBatis 66、尚硅谷_SpringBoot_数据访问-SpringData JPA简介 67、尚硅谷_SpringBoot_数据访问-整合JPA 68、尚硅谷_SpringBoot_原理-第一步:创建SpringApplication 69、尚硅谷_SpringBoot_原理-第二步:启动应用 70、尚硅谷_SpringBoot_原理-事件监听机制相关测试 71、尚硅谷_SpringBoot_原理-自定义starter 72、尚硅谷_SpringBoot_结束语
spring boot 项目代码,直接启动,第一部分 点睛Spring 4.x 第1 章 Spring 基础 ..........................................2 1.1 Spring 概述 ............................................. 2 1.2 Spring 项目快速搭建 .................................. 5 1.3 Spring 基础配置 .....................................17 第2 章 Spring 常用配置 .... ............................ 30 2.1 Bean 的Scope .... ................................... 30 2.2 Spring EL 和资源调用 .... ...................... 33 2.3 Bean 的初始化和销毁 .... ...................... 37 2.4 Profile .... .... .......... 40 2.5 事件(Application Event) .... .............. 44 第3 章 Spring 高级话题 .... ............................ 48 3.1 Spring Aware .... ..................................... 48 3.2 多线程 .... .... ......... 51 3.3 计划任务 .... .... ..... 54 3.4 条件注解@Conditional .... .................... 56 3.5 组合注解与元注解 .... ........................... 60 3.6 @Enable*注解的工作原理 .... .............. 63 VIII ∣ Java EE 开发的颠覆者:Spring Boot 实战 3.7 测试 .... .... ............. 66 第二部分 点睛Spring MVC 4.x 第4 章 Spring MVC 基础 .... .......................... 72 第三部分 实战Spring Boot 第5 章 Spring Boot 基础 .... ......................... 122 第6 章 Spring Boot 核心 .... ......................... 138 X ∣ Java EE 开发的颠覆者:Spring Boot 实战 第7 章 Spring Boot 的Web 开发 .... ............ 170 7.1 Spring Boot 的Web 开发支持 .... ....... 170 7.2 Thymeleaf 模板引擎 .... ....................... 171 7.2.4 实战 .... ...................................... 177 7.3 Web 相关配置 .... ................................. 182 7.4 Tomcat 配置 .... .................................... 187 7.5 Favicon 配置 .... ................................... 196 7.6 WebSocket .... ....................................... 197 7.7 基于Bootstrap 和AngularJS 的现代Web 应用 .................. 212 第8 章 Spring Boot 的数据访问 .... .............. 233 8.1 引入Docker .... .................................... 237 8.2 Spring Data JPA .... .............................. 248 8.3 Spring Data REST .... ........................... 284 8.4 声名式事务 .... ..................................... 297 8.5 数据缓存Cache .... .............................. 309 8.6 非关系型数据库NoSQL .... ................ 320 8.6.1 MongoDB .... ............................. 320 8.6.2 Redis .... ..................................... 329 第9 章 Spring Boot 企业级开发 .... .............. 340 9.1 安全控制Spring Security .... ............... 340 9.2 批处理Spring Batch .... ....................... 362 9.3 异步消息 .... ......................................... 385 9.4 系统集成Spring Integration .... ........... 395 第10 章 Spring Boot 开发部署与测试 .... ..... 407 第11 章 应用监控 .... ................................... 431 第12 章 分布式系统开发 .... ........................ 456 12.1 微服务、原生云应用 .... ................... 456 12.2 Spring Cloud 快速入门 .... ................. 457 12.3 实战 .... .... ......... 458 12.4 基于Docker 部署 ...................................478

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扛麻袋的少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值