springboot 事务统一配置_Springboot 完整搭建快速入门,必看!

点击上方蓝字关注我们

作者:CansluckCSDN博客:https://blog.csdn.net/xgx120413

ca166693daaea24868128ce20164136a.png

前言

手把手教你Springboot微服务项目搭建快速入门,通过本文学习Springboot的搭建快速入门,掌握微服务大致的配置服务,后续将会继续将核心组件引入到项目中,欢迎关注,点赞,转发。

75ca842b8fb3c90bb258f4b636377093.png

Springboot项目搭建将会从以下几个方面进行项目搭建快速入门

2c08eb606b2f6d23c8f8eebfd2978686.png

75ca842b8fb3c90bb258f4b636377093.png

一、项目创建

新建Maven项目

367d886b7f1ce34d4e8d670fcfc19755.png

833721f4a4dc237d37ec12cb9403861f.png

9cfa84acc005f8e48d7a02612e4a5fe5.png

根据上面操作即可完成项目搭建

75ca842b8fb3c90bb258f4b636377093.png

二、pom.xml依赖添加

接下来在pom.xml引入springboot相关依赖

92a891ef62888495a1ecc2cce28c68f0.png

64ed1513feeb3113c4f771854d7de229.png

f7edee306a5ea3aff3c1602919fa4584.png

引入Springboot相关依赖,完成对项目的依赖配置。

75ca842b8fb3c90bb258f4b636377093.png

三、新建数据库表

首先建一张User数据库表

1. 这里用navicat数据库链接工具

2. 新建一个springboot数据库(可自行定义)

3. 创建建表语句:

20f123aa0ad40a1d1e7672224a80cfc6.png

75ca842b8fb3c90bb258f4b636377093.png

四、新建App.java项目启动类

7574511667aba99e96218400c36e12da.png

75ca842b8fb3c90bb258f4b636377093.png

五、新建Controller

2fe006bd107a61d545cb7ce462406b88.png

行App,在浏览器输入:localhost:8080/hello,发现“hello spring-boot”说明第一步部署成功。

474a85959952007b1bc4b6817ecf2aaa.png

75ca842b8fb3c90bb258f4b636377093.png

六、集成MyBatis

1. 在pom.xml文件中引入mybatis 和 数据库(这里用mysql)的依赖

86e4ccfef560d3613860635a818b1da1.png

生成mapper

1. 在resources目录下,新建一个application.properties(这里用properties,有兴趣小伙伴可以使用yml文件,这里名字只用application.properties,不要用其他,否则识别不出),增加如下内容:

b1a95b2910c230ff9ceb9a450aaa58d3.png

2. 创建好对应的model、dao、mapping文件夹,准备MyBatis的生成文件generatorConfig.xml

6d76ea85aa0683f7bbd5371db5195c9a.png

3. 在pom.xml文件里面引入generator的plugins

62b10c923c8a35a498f6adba82ac0de9.png

4. 运行generatorConfig.xml文件,生成对应的model、dao、mapping文件,运行方式如下:

(用这种方式是避免开发人员找不到运行的方式)

3d604b9fb01d29c0998bc9470dcbff69.png

5. 运行后,可以得到下图结果

1df20cfe2683b3d316717d26d81afb02.png

75ca842b8fb3c90bb258f4b636377093.png

七、UserMapper.java文件中新增登陆方法:

1. 新增登陆方法

3f7e93fd383b9edfbca85995d4b6f6cd.png

2. 对应UserMapping.xml文件

12c13764faab1733a50ab8b1cc7c1b33.png

75ca842b8fb3c90bb258f4b636377093.png

八、 新建service实现方法

1. IUserService.java 接口

d1e3cd013f7da08655fc65dbb9420b5b.png

2. UserServiceImpl.java实现类

95555f7761975b5dd5f68976828285bd.png

3. UserController.java类中增加login和register方法

3870e1c68f64ce73d9a349eb12d27f1d.png

启动App.java,并运行:

在浏览器上输入:localhost:8080/register?username=deer&password=123,显示“注册成功”

在浏览器上输入:localhost:8080/login?username=deer&password=123,    显示“登陆成功”

以上就完成了后台的Controller、Service、Dao之间的交互

75ca842b8fb3c90bb258f4b636377093.png

九、实现事务支持

修改IUserService接口,增加一个新增batchAdd方法,在UserServiceImpl增加相应实现类,在实现类中故意产生一个被0整除得异常

1. IUserService.java接口中增加batchAdd抽象方法

551d5e42194bbc4b00fff10f963293c7.png

2. UserService.java类中实现batchAdd()方法

cf2071b25a5e15605307d4be2eadbbbe.png

3. 重新运行App.java,在浏览器输入:

localhost:8080/batchAdd?username=enjoy&password=123

可以发现在浏览器上出现

73eb8cdcc4a7b0f5676ad25a7bfa15a5.png

然后检查数据库,发现表里面已经产生了一个错误的数据,产生了事务不一致问题。

4. 添加事务支持:

在batchAdd方法上增加@Transactional注解

f640a15c4d4e77b64b15a246066639f5.png

重启服务后,在浏览器上输入:localhost:8080/batchAdd?username=enjoy&password=123

浏览器还会继续报错,但检查数据库,并没有新增数据,由此可知事务问题已经得到了解决

75ca842b8fb3c90bb258f4b636377093.png

十、全局异常

通过上面步骤,虽然已经解决了事务问题,但界面上出现这500错误,这对用户来说还是不友好。

一般在企业里面对这些异常一般都会统一捕获,由一个专门的异常处理类来统一处理。

1. 异常捕获

新建全局异常处理类GlobalExceptionHandler.java类

c7da02a1cb6eec72d5a35fee24af004f.png

重启服务后,在浏览器上输入会出现异常的服务

localhost:8080/batchAdd?username=enjoy&passwd=123

界面返回:

3c978ef17d58df62b1d46826d24f2ec1.png

2. 404页面处理

在浏览器上故意输错地址

localhost:8080/batchAddx?username=enjoy&passwd=123,后端并没有这服务,虽然已经做了相关的异常捕获,但浏览器还是显示了:

4a0a99593055c3c184bbf90d4e479f48.png

这个时候返回页面非常的不友好,要做404异常处理(其他异常代码一样)。

在配置这样错误页面的时候,以前是在WEB.XML中进行配置,而在这里,需要有个WebServerFactoryCustomizer的实例进行配置

3. 在前面建立的GlobalExceptionHandler,新建一个方法

91ba21b4392838c0740d86a54f8b1e9d.png

4. 新建BaseController.java类

7f1abca326ee355a4a82485b9c7ea0ba.png

重启服务,在浏览器上输入

localhost:8080/batchAddx?username=enjoy&passwd=123

此时,页面返回“404,没有找到页面!”

8b3980d0217d2d4b84f28adb43816ffb.png

75ca842b8fb3c90bb258f4b636377093.png

十一、静态资源访问

静态资源:js, css, html, 图片,音视频等

静态资源路径:是指系统可以直接访问的路径,且路径下的所有文件均可被用户直接读取。

Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则:

/static

/public

/resources

/META-INF/resources

1. 在resources目录下面建立static文件夹,在文件夹里面任意放张图片。

de5a27ab2538d567ae2dcff686dbd343.png

在地址栏上输入localhost:8080/enjoy.jpg,可以看到图片

75ca842b8fb3c90bb258f4b636377093.png

十二、前端页面

1. 引擎模板

SpringBoot 推荐使用模板引擎来渲染html,如果你不是历史遗留项目,一定不要使用JSP,常用的模板引擎很多,有freemark,thymeleaf等,其实都大同小异

其中springboot 强烈推荐的是用thymeleaf

pom文件种添加thymeleaf的支持:

9cc552d5f3a0c8d6293e09c701341bc7.png

2. 新建Controller

2fe51263cc69a958be9476f1bac15b88.png

Springboot默认的模板配置路径为:src/main/resources/templates

在resources目录里面新建一个templates目录,在目录里面新建testThymeleaf.html文件

cb25c6d3ec3731ae5294f3114e34769a.png

在浏览器上输入:localhost:8080/tpl/themeleaf,可以看到页面。

02089f0ee6f37306405db6d9d976ce02.png

75ca842b8fb3c90bb258f4b636377093.png

十三、集成Swagger2 构建API文档

1. Swagger2 的作用

①. 随项目自动生成强大RESTful API文档,减少工作量

②. API文档与代码整合在一起,便于同步更新API说明

③. 页面测试功能来调试每个RESTful API

修改pom文件,添加swagger2的相关依赖

f6f06b2c80ca43ec4137d2907f766c29.png

2. 新建一个swagger的配置类SwaggerConfig.java

97a6e7a2fd19167811f4650edd3e9c8d.png

3. 新建Controller用于显示相关接口

3f8c2bcb41c977fc120fbda0954abd7d.png

访问:http://localhost:8080/swagger-ui.html

50dd71a10f039c4f3ac8f59aae5f6448.png

如何使用呢?

4e4f55615a93ea619dc44a038a0134ab.png

99ca92cf0014c472c2c8a6c52936a529.png

9d5609192952f9f6faa10324db7fca4a.png

以上就是swagger2的配置和使用。

75ca842b8fb3c90bb258f4b636377093.png

十四、日志集成

在springboot中默认使用的日志工具是logback,不过在提及具体的日志工具之前要提一个名词,这个名词就是slf4j(Simple Logging Facade For Java)

百度百科解释

https://baike.baidu.com/item/slf4j/6408868

slf4j不是具体的日志解决方案,它有点类似于jdbc,使用了门面模式,是一个针对各类日志的抽象实现,既然是抽象的日志实现,在springboot中肯定不需要额外导入。

注意:spring-boot-starter中就提供了对spring-boot-starter-logging的依赖

在spring-boot-starter-logging中可以看到以及集成了slf4j与具体实现logback的默认支持

1. 修改UserController

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

private final Logger logger = LoggerFactory.getLogger(UserController.class);

95877f9a58f2a516a09187dd212fbed9.png

在浏览器上输入:localhost:8080/hello,可以看控制台日志的输出

076580797fcec72ce73d12dc4fd6e2c1.png

2. 日志级别

修改controller 把日志的输出改成

logger.debug("这个一个hello日志");

这个时候重启,再调用,发现后台并不会有任何输出,这原因是日志级别在作祟

默认情况下,Spring Boot 配置的是INFO 日志级别,也就是会输出INFO级别以上的日志(ERROR, WARN, INFO)。

如果需要 Debug 级别的日志。在 src/main/resources/application.properties 中配置。

debug=true

此外,配置 logging.level.* 来具体输出哪些包的日志级别。

例如

logging.level.root=INFO

logging.level.org.springframework.web=DEBUG

logging.level.cn.cansluck.controller=DEBUG

2f6abf9bbefdfc47f840cfa0601d8986.png

这个时候,包括springframework.web以及cn.cansluck.controller的debug日志都可以输出来了

1c14fd18b8ecbfbb6170f2e808a016bd.png

3. 日志文件

一般情况下,springboot日志只会输出到控制台,并不会写入到日志文件,但是,在一些正式环境的应用中,我们需要通过在 application.properites 文件中配置 logging.file 文件名称和 logging.path 文件路径,将日志输出到日志文件中。

logging.path = /var/tmp

logging.file = xxx.log

logging.level.root = info

注意:

如果只配置 logging.path,在 /var/tmp文件夹生成一个日志文件为 spring.log。如果只配置 logging.file,会在项目的当前路径下生成一个 xxx.log 日志文件。

这里有一个坑,logging.path 和logging.file都配置了,只会有logging.file生效,所以,如果要指定日志生成的具体位置使用logging.file 配置就好

在application.properties中配置

logging.file =D:\\log\\enjoy.log

这样在F盘的相应位置出现日志文件

3. log4j2

在spring-boot-dependencies POMs中搜索spring-boot-starter-log4j2

发现Spring boot父Pom中自己提供了这个依赖,于是我们加入如下jar依赖:

修改pom.xml文件

7a3f0df911b4d291fe1c775698265d36.png

注意: 由于默认使用logback在扩展log4j2之前先要把logback移除

日志使用跟上面logback一样。

75ca842b8fb3c90bb258f4b636377093.png

十五、使用AOP统一日志处理

为了防止在工作中经常在代码中加入大量的日志处理代码,在实际项目开发中,一般使用AOP统一完成日志处理工作

1. 修改pom文件,引入springboot对aop的支持

1742686fe316704f8c70167ee875c833.png

2. 新增AOP日志处理类

24590ecb06f2fb8f909f374f0d48a3da.png

通过访问Controller可以从日志看到,AOP切面方法已经生效

2a8653b0696221198f224fdf52eb4be8.png

4c1cd68fa9e7d169cceeffd970f74683.png

总结    本文通过图文形式,学习Springboot快速入门,包括项目创建、Springmvc集成、MyBatis集成配置、事务集成配置、全局异常配置、Swagger2集成配置、AOP统一日志处理,将整个流程大概介绍了一遍,让想了解和学习Springboot的小伙伴能够对整体流程有个大概了解,也希望能够利用自己空闲时间按照上面流程完整操作一遍,可以加深自己的理解和印象。如有疑问欢迎评论留言,小编会及时回复哦~喜欢的小伙伴动动手指点个赞、收藏吧!

更多精彩敬请关注公众号

744a62e2a29dd6bbf861986dfe7b5702.png

Java极客思维

微信扫一扫,关注公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值