自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 SpringBoot2.0实战(17)整合SpringSecurity基于数据库登录鉴权

通过前一篇文章整合SpringSecurity之最简登录及方法鉴权,我们已经可以简单地使用 SpringSecurity 对应用实现登录鉴权,但是问题在于,用户信息或者是在配置文件中,或者是在代码中写死,应用启动后被加载至内存,这并不符合实际的生产需要,在实际的生产应用中,我们需要使用数据库对用户及角色信息进行持久化,在执行登录操作时,从数据库中获取用户信息。目标整合 SpringSec...

2020-04-29 20:49:32 3500

原创 SpringBoot2.0实战(16)整合SpringSecurity之最简登录方法鉴权

目标整合 SpringSecurity 实现最简登陆鉴权及方法鉴权,大致理解 SpringSecurity 的功用。操作步骤添加依赖编码Controller 层添加一个最简单的测试接口启动类可以看到,除了在 pom 文件加了一个 spring-boot-starter-security 依赖,其它跟创建最简 springBoot 应用...

2020-04-27 22:32:15 465

原创 SpringBoot2.0实战(15)整合Redis之集成缓存SpringDataCache

相关知识常用 Spring Cache 缓存注解@CacheConfig 在类上设置当前缓存的一些公共设置,比如缓存名称。 @Cacheable 作用在方法上,表明该方法的结果可以缓存,如果缓存存在,则目标方法不会被调用,直接从缓存中获取,如果缓存不存在,则执行方法体,并将结果存入缓存。 @CacheEvice 作用在方法上,删除缓存项或者清空缓存。 @CachePut 作用在方法上...

2020-04-26 21:38:48 261

原创 SpringBoot2.0实战(14)整合Redis之实现分布式锁

相关知识分布式锁分布式锁是控制分布式系统之间同步访问共享资源的一种方式,在分布式系统中,如果不同的应用之间共享一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,在这种情况下,便需要使用到分布式锁。互斥性。在分布式环境下,同一时间只有一个客户端能持有锁。 具备锁失效机制,防止死锁。例如锁的持有者在持有锁期间崩溃而没有主动解锁,锁需要在规定时间后自动失效,以...

2020-04-26 11:00:57 407

原创 SpringBoot2.0实战(13)整合Redis之初体验Lettuce

相关知识Redis 简介Redis 是一个开源的,基于内存中的,高性能的数据存储系统,它可以用作数据库、缓存和消息中间件。Redis 支持多种类型的数据结构,如:string、hashes、lists、sets、sortedSets等。Redis 内置了复制(replication)、LUA脚本(Lua scripting)、事务(transactions)、磁盘持久化(persi...

2020-04-23 22:55:23 343 1

原创 SpringBoot2.0实战(13)整合RabbitMQ之实现延迟队列、消息重试

相关知识什么是延迟队列队列中的消息在等待指定时间后,消费者才能够进行消费。应用场景商城系统,下单后半个小时未付款,自动取消订单实现方式RabbitMQ 本身没有直接支持延迟队列功能,但是通过控制消息的生存时间及死信队列,可以模拟出延迟队列的效果。RabbitMQ 控制消息的生存时间有两种方法:设置队列属性(x-message-ttl),队列中所有消息都有相同的过期时...

2020-04-14 21:58:24 557

原创 SpringBoot2.0实战(12)整合RabbitMQ之死信队列

相关知识什么是死信队列“死信”是RabbitMQ中的一种消息机制,当你在消费消息时,如果队列里的消息出现以下情况:消息被否定确认,使用 channel.basicNack 或 channel.basicReject ,并且此时requeue 属性被设置为false。 消息在队列的存活时间超过设置的TTL时间。 消息队列的消息数量已经超过最大队列长度。那么该消息将成为“死信”,“死...

2020-04-13 19:15:53 1063

原创 SpringBoot2.0实战(11)整合RabbitMQ之ACK消息确认

相关知识交换器direct:一对一 fanout:一对多 topic:模式匹配目标整合 Spring boot 提供的 spring-boot-starter-amqp,实现消息发送、消息消费、确认准备工作安装RabbitMQ请自行根据windows或者Linux进行安装操作步骤添加依赖添加后的整体依赖如下配置编码(消息发送方)定义 E...

2020-04-13 18:42:40 816

转载 面试官必问的8道volatile关键字命题,你答对了吗?

在Java相关的岗位面试中,很多面试官都喜欢考察面试者对Java并发的了解程度,而以volatile关键字作为一个小的切入点,往往可以一问到底,把Java内存模型(JMM),Java并发编程的一些特性都牵扯出来,深入地话还可以考察JVM底层实现以及操作系统的相关知识。目录一、面试官: Java并发这块了解的怎么样?说说你对volatile关键字的理解二、面试官: 能不能详细说下什么...

2020-04-07 16:13:00 227

原创 SpringBoot2.0实战(10)整合fluent-validator优雅业务校验

相关知识FluentValidator是一个工具类库,使用流式(Fluent Interface)调用风格让校验跑起来更优雅,代码更简洁,同时验证器(Validator)可以做到开闭原则,实现最大程度的复用。github地址:https://github.com/neoremind/fluent-validator中文使用手册:http://neoremind.com/2016/02/...

2020-04-06 21:42:12 716

原创 SpringBoot2.0实战(9)整合Mybatis-plus完成CURD

相关知识Mybatis-plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。Mybatis-plus官网:https://mp.baomidou.com/特性:无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作 强大的 CR...

2020-04-06 16:39:11 265

原创 SpringBoot2.0实战(8)整合Swagger2自动生成API文档

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。相关知识Swagger官网:https://swagger.io常用注解:@Api 用于类,表示标识这个类是swagger的资源@ApiOperation 用于方法,表示一个http请求的操作@ApiParam 用于方法,参数,字段说明,表示对参数的添加元数据(说明或...

2020-04-06 10:21:18 202

原创 SpringBoot2.0实战(7)整合MapStruct优雅地复制属性

在之前章节的例子中,我们在接收参数的时候都是使用的 User 类对象,这是一个 DO 对象,是用于与数据库进行交互的,而不是用于与前端业务进行交互的,所以需要创建一个 BO 业务对象用来与前端业务进行交互,保证数据隔离性及安全性。接收参数换成了 BO 对象,但数据入库使用的是 DO 对象,这中间就需要将 BO 对象的属性复制到 DO 对象,然后代码里就会出现大量的 do.set(bo.get(...

2020-04-05 20:25:10 1665

原创 SpringBoot2.0实战(6)整合hibernate-validator进行参数校验

spring-boot-starter-web 项目中默认已经集成了 hibernate-validator相关知识@AssertTrue // 用于 boolean 字段,该字段只能为 true@AssertFalse // 用于 boolean 字段,该字段只能为 false@DecimalMax // 用于 Number 字段,只能小于或等于该值@DecimalMin ...

2020-04-03 21:02:48 479

原创 SpringBoot2.0实战(5)配置Filter过滤器

本章目标学会在 SpringBoot 项目中配置 Filter,实现对请求出入参的日志打印。操作步骤添加依赖引入 Spring Boot Starter 父工程引入 spring-boot-starter-web 的依赖编码编写 Filter实现对 application/json 请求的拦截,因为请求内容使用流,所以需要多一次封装...

2020-04-03 17:06:59 1329

原创 SpringBoot2.0实战(4)配置拦截器

相关知识关于拦截器的相关知识可参考:https://jinnianshilongnian.iteye.com/blog/1670856本章目标学会在 SpringBoot 的项目中怎么配置拦截器操作步骤添加依赖引入 Spring Boot Starter 父工程引入 spring-boot-starter-web 的依赖编码编写拦截器...

2020-04-03 16:01:05 375

原创 SpringBoot2.0实战(3)SpringBoot单元测试

本章目标基于上一章,使用单元测试实现对增删查改接口的测试操作步骤添加依赖引入 spring-boot-starter-test 的依赖添加依赖后的整体 dependencies 如下所示编码测试用例编写在 src/test/java 源目录下编写测试用例代码分析@RunWith(SpringRunner.class) 指...

2020-04-03 15:16:08 566

原创 SpringBoot2.0实战(2)集成SpringBootJPA完成CURD

本章目标整合 SpringBootJPA,实现对 mysql 数据库表的增删查改操作。操作步骤初始化数据库在 mysql 的 test 库中创建表 user,脚本如下,其中主键设置为自动增长。添加依赖引入 Spring Boot Starter 父工程引入 `spring-boot-starter-web`、`spring-boot-starter-...

2020-04-02 20:59:43 666

原创 SpringBoot2.0实战(1)快速构建Web应用

本章目标使用 SpringBoot 完成一个简单的 Web 应用程序开发,初步体验 SpringBoot 快速、简洁的特性。操作步骤构建项目打开 Idea,依次选择 File -> New -> Module,打开 Module 面板。左侧栏选择 Maven,点击下一步。填写 groupId、artifactId、version,点击下一步。填写项目名,一般...

2020-04-02 19:58:52 329

转载 线程池

一. 线程池简介1. 线程池的概念: 线程池就是首先创建一些线程,它们的集合称为线程池。使用线程池可以很好地提高性能,线程池在系统启动时即创建大量空闲的线程,程序将一个任务传给线程池,线程池就会启动一条线程来执行这个任务,执行结束以后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个任务。2. 线程池的工作机制 2.1 在线程池的...

2020-04-02 10:24:44 54

转载 redis和mongodb各自的优缺点,怎么选择?

redis和mongodb各自的优缺点,怎么选择?Redis是神马?Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value非关系型数据库,并提供多种语言的API。redis是一个key-value存储系统。Redis是非关系型数据库的一种,经常用作缓存。和Memcached类似,它支持存储的value类型相对更多,包括string(字...

2020-04-02 09:58:44 943

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除