Springboot教程,spring boot教程
04《Spring Boot 入门教程》使用模板引擎开发 Web 项目
模板引擎这个词,咋听起来,有点高大上的意味。
实际上,模板引擎是非常平易近人的技术。譬如大家可能都比较熟悉的 JSP ,就是一种比较典型的模板引擎。
当浏览器将请求抛给控制器,控制器处理好数据后,就跳转 JSP 等模板引擎页面。注意在跳转的同时,还会将数据组装好,也交给模板引擎处理。
模板引擎会根据数据,和模板引擎的规则,动态生成 HTML 页面,最后返回给浏览器显示。
我们使用 Spring Boot 开发 Web 项目,大体上有两种方式。
第一种方式,是后端服务化的方式,也是当前的主流方式。前端是静态的 HTML 页面,通过 Ajax 请求 Spring Boot 的后端接口。 Spring Boot 返回数据一般采用 JSON 格式,前端接收后将数据显示。
第二种方式,是采取模板引擎的方式。前端的请求,到达 Spring Boot 的控制器后,控制器处理请求,然后将返回数据交给模板引擎。模板引擎负责根据数据生成 HTML 页面,最后将 HTML 返回给浏览器。
我个人比较推荐第一种方式,说一下该方式的几个优点:
本篇是讲模板引擎,也得说说模板引擎的优点,王婆卖瓜不能光夸草莓啊。模板引擎开发的页面,对搜索引擎 SEO 比较友好;还有就是简单的页面,如果用模板引擎开发速度比较快,毕竟模板化的方法,目的就是减少重复提高效率。
Spring Boot 支持的模板引擎种类很多,常见的有 FreeMarker 、 Thymeleaf 、 JSP 。
因为这些模板引擎使用的用户都不少,所以我们逐一介绍下其实现过程。
至于孰优孰劣,请各位看官自行评价。正所谓:尺有所短,寸有所长,各取所爱,万物生长!
本篇我们开发一个商品浏览项目实例。
此处说一个我个人的经验:在做一个项目或一个模块的时候,不要一开始就动手写代码,最好是谋定而后动。
我们作为程序员,实际上是整个程序世界的总指挥。应该先整体规划,再实现局部。这种总分型的开发方法便于我们理顺思路,提高编码效率!
好的,我们来思考下,实现商品浏览项目实例的整体流程:
整体流程
可以看到,我们是先建立了控制器方法和页面,再去实现其中的具体细节。这样可以让我们的思维保持连贯性和整体性,在做一些页面和方法较多的项目时,会感觉更加顺畅。
我们按整体流程,使用 FreeMarker 模板引擎,来实现商品浏览功能。
使用 Spring Initializr 创建项目,Spring Boot 版本选择 2.2.5 , Group 为 com.imooc , Artifact 为 spring-boot-freemarker ,生成项目后导入 Eclipse 开发环境。
引入 Web 项目及 FreeMarker 模板相关的依赖项,代码如下:
实例:
创建控制器类,由于是商品相关的控制器,所以命名为 GoodsController ,代码如下:
实例:
我们具体解释下该类的作用。
我们 resource/templates 目录下新建商品页面 goods.ftl ,先不必实现具体功能,代码如下:
实例:
此时我们启动项目,然后访问 ,即可显示对应页面内容。
定义商品类 GoodsDo 用来描述商品信息,注意 Do 表示数据模型对象(Data Object),代码如下:
实例:
然后我们编写服务类 GoodsService ,提供获取商品列表的方法。注意此处仅仅是演示模板引擎,并不需要访问数据库,直接返回一个指定内容的商品列表。
实例:
此时,我们的控制器就可以注入 GoodsService 类型的组件,然后调用其方法了。
实例:
注意 model.addAttribute("goodsList", goodsService.getGoodsList()); ,我们将商品列表相关的数据交给模板引擎去处理。
此时我们可以根据 FreeMarker 模板引擎,按模板规则显示商品信息了。
实例:
注意我们通过 FreeMarker 的模板语法,输出了商品列表信息。关于 FreeMarker 模板引擎更多的语法规则,感兴趣的同学可以后续查阅更多资料。
启动项目,打开浏览器访问 ,即可查看输出结果。
Thymeleaf 和 FreeMarker ,都是模板引擎,使用方法基本类似。此处我们仅仅是给出一个范例,不再做过多的解释。
使用 Spring Initializr 创建项目, Spring Boot 版本选择 2.2.5 , Group 为 com.imooc , Artifact 为 spring-boot-thymeleaf ,生成项目后导入 Eclipse 开发环境。
引入 Web 项目及 Thymeleaf 模板相关的依赖项。
实例:
创建控制器类, GoodsController , Thymeleaf 直接使用 HTML 作为模板页面,故代码如下:
实例:
我们在 resource/templates 目录下新建商品页面 goods.html ,先不必实现具体功能,代码如下:
实例:
此时我们启动项目,然后访问 ,即可显示对应页面内容。
商品类 GoodsDo ,服务类 GoodsService ,这两个类与上面没有区别直接放出代码。
实例:
实例:
好的,此时我们的控制器就可以注入 GoodsService 类型的组件,然后调用其方法了。
实例:
此时我们可以根据 Thymeleaf 模板引擎,按模板规则显示商品信息了。
实例:
注意我们通过 Thymeleaf 的模板语法,输出了商品列表信息。关于 Thymeleaf 模板引擎更多的语法规则,感兴趣的同学可以后续查阅更多资料。
启动项目,打开浏览器访问 ,即可查看输出结果。
到此,大家基本上也能发现,这两种方式除了模板页面文件内容不同,其他地方基本都是一模一样的。
也就是说,模板引擎主要负责通过一些模板标签,将控制器返回的数据解析为网页。
注意 Spring Boot 官方已经不推荐使用 JSP 了,确实操作起来也比较麻烦。但是由于 JSP 用户体量还是比较大的,所以此处还是简单演示下,开发步骤与 FreeMarker / Thymeleaf 基本一致。
使用 Spring Initializr 创建项目, Spring Boot 版本选择 2.2.5 , Group 为 com.imooc , Artifact 为 spring-boot-jsp ,生成项目后导入 Eclipse 开发环境。
引入 Web 项目及 JSP 模板相关的依赖项。
实例:
创建控制器类, GoodsController ,代码如下:
实例:
手工添加 src/main/webapp 及子目录如下,同时目录下放一个 goods.jsp 用于测试。注意该目录是一个 Source Folder 源代码目录,不是普通文件夹目录。
spring-boot-jsp 项目结构
实例:
注意,我们还需要添加一个视图解析器,实现 JSP 页面往指定目录跳转。
实例:
此时我们启动项目,然后访问 ,即可显示对应页面内容。
商品类 GoodsDo ,服务类 GoodsService ,这两个类与上面没有区别直接放出代码。
实例:
实例:
好的,此时我们的控制器就可以注入 GoodsService 类型的组件,然后调用其方法了。
实例:
此时我们可以根据 JSP 模板引擎,按模板规则显示商品信息了。
实例:
注意我们通过 JSP 的模板语法,输出了商品列表信息。关于 JSP 模板引擎更多的语法规则,感兴趣的同学可以后续查阅更多资料。
启动项目,打开浏览器访问 ,即可查看输出结果。
最后大家应该也发现了, FreeMarker 和 Thymeleaf 的用法几乎是一模一样的,而 JSP 还需要手工添加一些目录和配置。
三种方式各有优劣, FreeMarker 模板语法比较简洁, Thymeleaf 可以直接使用 HTML 作为模板文件, JSP 用户群体广泛。
但是三种方式,都是一种模板引擎而已,将控制器返回数据转化为 HTML 页面显示,本质上没啥区别,大家对模板引擎有一个了解即可。
Spring Boot教程第22篇:整合elk,搭建实时日志平台
这篇文章主要介绍springboot整合elk.
elk 简介
elk下载安装
elk下载地址:
建议在 linux上运行,elk在windows上支持得不好,另外需要jdk1.8 的支持,需要提前安装好jdk.
下载完之后: 安装,以logstash为栗子:
配置、启动 Elasticsearch
打开Elasticsearch的配置文件:
修改配置:
network.host=localhost
network.port=9200
它默认就是这个配置,没有特殊要求,在本地不需要修改。
启动Elasticsearch
启动成功,访问localhost:9200,网页显示:
配置、启动 logstash
在 logstash的主目录下:
修改 log4j_to_es.conf 如下:
input {
log4j {
mode = "server"
host = "localhost"
port = 4560
}
}
filter {
#Only matched data are send to output.
}
output {
elasticsearch {
action = "index" #The operation on ES
hosts = "localhost:9200" #ElasticSearch host, can be array.
index = "applog" #The index to write data to.
}
}
修改完配置后启动:
./bin/logstash -f config/log4j_to_es.conf
终端显示如下:
访问localhost:9600
证明logstash启动成功。
配置、启动kibana
到kibana的安装目录:
默认配置即可。
访问localhost:5601,网页显示:
证明启动成功。
创建springboot工程
起步依赖如下:
log4j的配置,/src/resources/log4j.properties如下:
log4j.rootLogger=INFO,console
# for package com.demo.elk, log would be sent to socket appender.
log4j.logger.com.forezp=DEBUG, socket
# appender socket
log4j.appender.socket=org.apache.log4j.net.SocketAppender
log4j.appender.socket.Port=4560
log4j.appender.socket.RemoteHost=localhost
log4j.appender.socket.layout=org.apache.log4j.PatternLayout
log4j.appender.socket.layout.ConversionPattern=%d [%-5p] [%l] %m%n
log4j.appender.socket.ReconnectionDelay=10000
# appender console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d [%-5p] [%l] %m%n
打印log测试:
在kibana 实时监控日志
打开localhost:5601:
Management=index pattrns=add new:
点击discovery:
15《Spring Boot 入门教程》多数据源与分布式事务
一个项目中使用多个数据源的需求,我们在日常工作中时常会遇到。
以商城系统为例,有一个 MySQL 的数据库负责存储交易数据。公司还有一套 ERP 企业信息化管理系统,要求订单信息同步录入 ERP 数据库,便于公司统一管理,而该 ERP 系统采用的数据库为 SQL Server 。
此时,就可以在 Spring Boot 项目中配置多个数据源。另外,使用多数据源后,需要采用分布式事务来保持数据的完整性。
本小节我们使用 Spring Boot 开发一个商城系统的订单生成功能,订单信息同时进入 MySQL 与 SQL Server 数据库。
首先创建 MySQL 数据库 shop ,并新建订单表 order ,表结构如下:
order 表结构
然后创建 SQL Server 数据库 erpshop ,并新建订单表 erp_order ,表结构如下。注意 id 是自增长的唯一标识,out_id 是对应订单在 MySQL 数据库中的唯一标识,以便在两个库中比对订单。
erp_order 结构
接下来,我们开始实现 Spring Boot 后端项目,数据持久层采用 MyBatis 框架,同时访问两个数据源。
Spring Boot 版本选择 2.2.5 ,Group 为 com.imooc , Artifact 为 spring-boot-multidb,生成项目后导入 Eclipse 开发环境。
我们引入热部署依赖、 Web 依赖、数据库访问相关依赖及测试相关依赖,具体如下:
实例:
由于我们要同时访问两个数据库,所以需要在配置文件中添加两个数据源的配置信息。注意配置多数据源时, url 配置需要使用 spring.datasource.db1.jdbc-url=xxx 的形式。
实例:
多个数据源的情况下, 我们需要通过配置类,将数据源注册为组件放入 Spring 容器中。
实例:
通过这个配置类, Spring 容器中就有两个数据源组件,这两个组件分别采用 spring.datasource.db1 和 spring.datasource.db2 开头的配置信息。所以通过这两个组件,就能分别操作 MySQL 数据源 1 和 SQL Sever 数据源 2 。
多数据源情况下, MyBatis 中的关键组件 SqlSessionFactory 和 SqlSessionTemplate 也需要单独配置,我们需要为两个数据源分别配置一套组件。
实例:
通过上面的配置类, com.imooc.springbootmultidb.mapper1 包中的 DAO 数据访问接口会自动调用 sqlSessionTemplate1 组件实现具体数据库操作,而 sqlSessionTemplate1 操作的数据源已经通过配置类设置为 db1 。同时, DAO 数据访问接口对应的映射文件已经指定到 classpath:mapper1/ 目录去寻找。这样数据源 – DAO 数据访问接口 – 映射文件三者的对应关系就建立起来了。
数据源 2 的配置方法是一样的, com.imooc.springbootmultidb.mapper2 包中的 DAO 数据访问接口会自动调用 sqlSessionTemplate2 组件,其操作的数据源即为 db2 ,其对应的映射文件指定到 classpath:mapper2/ 目录去寻找。
实例:
数据访问接口的位置已经在配置类指定,首先在 com.imooc.springbootmultidb.mapper1 创建 OrderDao ,操作的是数据源 1 中的 order 表。
实例:
然后在 com.imooc.springbootmultidb.mapper2 创建 ErpOrderDao ,操作的是数据源 2 中的 erporder 表。
实例:
这两个接口中使用的数据对象比较简单,代码如下:
实例:
分别针对 OrderDao 、 ErpOrderDao 编写对应的映射文件,然后按照配置类指定的位置,两个文件分别放到 resources/mapper1 和 resources/mapper2 目录下。
实例:
实例:
数据操作接口与对应的映射文件均已编写完毕,现在可以通过测试类进行多数据源测试了,我们在测试类中同时向两个库插入记录。
实例:
运行测试方法后,两个数据库表中均新增数据成功,这样我们就成功的使用 Spring Boot 同时操作了两个数据源。
采用多数据源之后,事务的实现方式也随之发生变化。当某个数据源操作出现异常时,该数据源和其他数据源的事务都需要回滚。这种涉及多个数据源的事务,称为分布式事务,接来下我们就来具体实现一下。
在 pom.xml 引入 Atomikos 事务管理器相关的依赖项, Atomikos 是一个开源的事务管理器,支持分布式事务。
实例:
需要将默认的数据源更换为支持分布式事务的数据源, MySQL 对应的数据源为 MysqlXADataSource , SQL Server 对应的数据源为 SQLServerXADataSource 。
实例:
继续修改 DataSourceConfig 类,在其中配置分布式事务管理器组件。当项目中使用事务时,会通过配置的分布式事务管理器管理分布式事务操作。
实例:
在测试方法上添加 @Transactional 开启事务,然后在两个数据源操作中间模拟抛出异常。
实例:
此时运行测试类,可以发现数据源 1 的事务已回滚,验证成功!
在开发 Spring Boot 项目时,如果默认配置满足不了我们的需求,可以通过手工配置组件实现我们需要的功能。这些组件可能是各个公司提供的,我们根据相应文档,为其配置各个属性即可。
学妹想学SpringBoot,连夜整理一篇SpringBoot入门最详细教程笔记
凭借开箱即用,远离繁琐的配置等特性,Spring Boot 已经成为 Java 开发者人人必学必会的开源项目。那么开发者该如何快速上手Spring Boot 呢?
那请问Spring Boot 到底是啥?Spring Boot是Spring框架的扩展和自动化,它消除了在Spring中需要进行的XML(EXtensible Markup Language)文件配置(若习惯XML配置,则依然可以使用),使得开发变得更快、更高效、更自动化。
微服务:每一个功能元素最终都是一个可独立替换和独立升级的软件单元。
在maven 的settings.xml配置文件的profiles标签添加以下配置:
把maven整合到idea。
项目目录:
HelloWorldMainApplication:
HelloController:
运行结果:
打开浏览器访问:
1、我们在pom.xml文件中假如以下代码:
2、然后,我们将应用打包
3、然后再target文件夹下就可以看到 spring-boot-01-helloworld-1.0-SNAPSHOT.jar
4、复制到桌面(随便哪,个人选择),打开cmd窗口,切换到jar包所在位置,我的是桌面,然后输入: java -jar spring-boot-01-helloworld-1.0-SNAPSHOT.jar ,运行效果如下。
5、打开浏览器访问:,同样可以看到HelloWord
这样的部署就变得十分简单了。
小伙伴们,帮忙一键三连呀
题外话,我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在Java学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多程序员朋友无法获得正确的资料得到学习提升
故此将并 将重要的Java进阶资料包括并发编程、JVM调优、SSM、设计模式、spring等知识技术、阿里面试题精编汇总、常见源码分析等录播视频免费分享出来,需要领取的麻烦 评论区领取
Spring Boot简明教程--Spring Boot版本号介绍
Spring官方网站为: ,Spring其实并不只是包含Spring Boot,还包含常常听说的Spring Framework、Spring Cloud、Spring Security等等,其实就是一个全家桶工具。
在Spring Boot出现之前主流web开发使用的是Spring Mvc(当然还有一些项目使用其他的web框架,如Struts2),如果必须启动一个新的 Spring web项目,我们必须添加构建路径或添加 Maven 依赖关系,配置应用程序服务器,添加 spring 配置等等。因此为了简化配置,诞生了 Spring Boot 。
在上图中(2021年1月16日)可以看到Spring Boot的不同版本号,每一个版本号我们可以看到都是由前面的数字+后面标签组成。
我们以2.3.8为例,从左到右2为主版本,3为次版本,8为增量版本
Spring Boot教程第5篇:beatsql
BeetSql是一个全功能DAO工具, 同时具有Hibernate 优点 Mybatis优点功能,适用于承认以SQL为中心,同时又需求工具能自动能生成大量常用的SQL的应用。
beatlsql 优点
引入依赖
这几个依赖都是必须的。
整合阶段
由于springboot没有对 beatlsql的快速启动装配,所以需要我自己导入相关的bean,包括数据源,包扫描,事物管理器等。
在application加入以下代码:
在resouces包下,加META_INF文件夹,文件夹中加入spring-devtools.properties:
restart.include.beetl=/beetl-2.3.2.jar
restart.include.beetlsql=/beetlsql-2.3.1.jar
在templates下加一个index.btl文件。
加入jar和配置beatlsql的这些bean,以及resources这些配置之后,springboot就能够访问到数据库类。
举个restful的栗子
初始化数据库的表
bean
数据访问dao层
接口继承BaseMapper,就能获取单表查询的一些性质,当你需要自定义sql的时候,只需要在resouses/sql/account.md文件下书写文件:
其中“=== ”上面是唯一标识,对应于接口的方法名,“* ”后面是注释,在下面就是自定义的sql语句,具体的见官方文档。
web层
这里省略了service层,实际开发补上。
通过postman 测试,代码已全部通过。
个人使用感受,使用bealsql做了一些项目的试验,但是没有真正用于真正的生产环境,用起来非常的爽。但是springboot没有提供自动装配的直接支持,需要自己注解bean。另外使用这个orm的人不太多,有木有坑不知道,在我使用的过程中没有遇到什么问题。另外它的中文文档比较友好。