• 分布式事务的七种实现方案汇总

    背景随着微服务的普及,分布式事务成为了系统设计中不得不面对的一个问题,而分布式事务的实现则十分复杂。阅读本文之前,需要你对数据库事务的ACID、CAP理论、Base理论以及两阶段提交有一定的认知,不熟悉者请自行百度或者阅读参考博客1、2、3和4。除此之外,在阅读本文过程中,如果对某种方案不理解,强烈建议先阅读对应方案中的参考博客后再阅读本文中对应的介绍。为了便于后文叙述,这里对...

    Java 2020年12月15日 1196 0
  • Springboot+MybatisPlus高效实现增删改查

    Mybatis-Plus基于mybatis做了增强,大大简化了单表CRUD操作,而且Mybatis-Plus是无侵入性的,不会影响现有项目,Mybatis-Plus提供了代码生成器,可以根据数据库表一键生成对应的service、mapper、xml文件,service和mapper提供了丰富的CRUD操作方法,xml文件也是非常简洁。目前最新版本是3.4.1版本。最新版本蛮看一...

    Java 2020年12月14日 3535 0
  • 完美的分布式监控系统——普罗米修斯

    DevOps工程师或SRE工程师,可能都知道Prometheus普罗米修斯。Prometheus于2012年由SoundCloud创建,目前已经已发展为最热门的分布式监控系统。Prometheus完全开源的,被很多云厂商(架构)内置,在这些厂商(架构)中,可以简单部署Prometheus,用来监控整个云基础架构设施。比如DigitalOcean或Docker都是普罗米修斯作为基...

    Java 2020年12月14日 1721 0
  • 动态高并发时为什么推荐重入锁而不是Synchronized?

    前言碎语Synchronized和 ReentrantLock 大家应该都不陌生了,作为java中最常用的本地锁,最初版本中 ReentrantLock 的性能是远远强于 Synchronized 的,后续java在一次次的版本迭代中 对 Synchronized 进行了大量的优化,直到 jdk1.6 之后,两种锁的性能已经相差无几,甚至 Synchronized 的自动释放锁...

    Java 2020年12月14日 1637 0
  • Spring Boot 整合 Netty

    前言Protobuf介绍使用代码编写服务端客户端功能测试其它前言本篇文章主要介绍的是SpringBoot整合Netty以及使用Protobuf进行数据传输的相关内容。Protobuf会简单的介绍下用法,至于Netty在之前的文章中已经简单的介绍过了,这里就不再过多细说了。Protobuf介绍protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立...

    Java 2020年12月13日 1091 0
  • 快速实现图形验证码、token验证

    验证码(图形、短信、邮箱)、token机制对于系统的安全性已经是老生常谈;本文将结合spring-security快速实现Google图形验证码、token的安全性校验。 技术储备1、UserDetailsService接口/** * Core interface which loads user-specific data. * <p> * It is us...

    Java 2020年12月13日 1449 0
  • 探究神秘的SpringMVC,寻找遗失的web.xml踪迹

    寻找遗失的 web.xml在开始 Spring MVC 的分析之前,先来聊一聊 Java 初学者接触的最多的 Java Web 基础。还记得我的第一个 Web 工程是由 Servlet、Velocity 和 Filter 来完成的,那时几乎所有人都是根据 Servlet、JSP 和 Filter 来编写自己的第一个 Hello World 工程。那时,还离不开 web.xml ...

    Java 2020年12月12日 1188 0
  • 如何做一个防重设计

    前言在业务设计中防重设计是一个关键点,以接口设计为例,防重就是防止接口被多次调用而产生脏数据,比如支付订单出现重复支付,所以说防重至关重要,在如何防重之前我们首先看一下是如何出现重复请求的。何时出现多次调用多次调用接口的出现有主观原因比如:人为的重复请求攻击,用户的误操作等;也有客观原因比如:为了健壮性进行超时重试;重复请求攻击对于这种恶意攻击,其实已经属于安全范畴了,我们可以...

    Java 2020年12月11日 1152 0
  • 从 0 学习 Spring 缓存数据

    前言昨天在开发业务时,打算加入缓存层来提高系统响应速度。查找了一些资料,发现 Spring 的缓存功能十分强大!只需要添加少量的代码,就可以轻松缓存方法所返回的对象。这篇文章通过描述一个实际使用例子,介绍 Spring Cache 的使用限制以及注意事项。环境准备Redis 5+JDK 1.8+Gradle 6+一款你喜爱的 IDE实践过程添加依赖打开 build.gradle...

    Java 2020年12月11日 1147 0
  • 如何在项目中优雅的校验参数

    前言验证数据是贯穿所有应用程序层(从表示层到持久层)的常见任务。通常在每一层实现相同的验证逻辑,这既费时又容易出错。为了避免重复这些验证,开发人员经常将验证逻辑直接捆绑到域模型中,将域类与验证代码混在一起,这些验证代码实际上是关于类本身的元数据,与业务逻辑不相关。JSR 380——Bean Validation2.0——定义了用于实体和方法验证的元数据模型和API,将数据校验逻...

    Java 2020年12月11日 1315 0
  • springboot 基于数据库的乐观锁实现

    何谓悲观锁与乐观锁悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Java中synchronized和Reentr...

    Java 2020年12月09日 1691 0
  • 搭建百万连接服务,使用netty完成websocke的推送

    (一)使用websocket① 介绍webSocket协议是基于TCP的一种新的网络协议。他的出现实现了网络和浏览器全双工通信,允许服务器主动发送信息给客户端。客户端 给 服务器发消息是半双工,服务器给客户端也发送消息就是全双工。多客户端多语言多浏览器支持:浏览器,php,Java,ruby,nginx,python,Tomcat,erlang,.net等等。专栏从0开始学会k...

    Java 2020年12月09日 1773 0
  • 分布式高并发服务三种常用限流方案简介

    服务限流场景在高并发大流量系统中,由于并发大造成服务资源不足,负载过高,进而引发致一系列问题,这里的流量一般都是突发性的,由于系统准备不足,很难短期扩容来应对 ,进行限流是最常用的手段,所以说限流也是服务稳定性治理重要的手段。限流可能发生在多个层面:用户网络层:突发的流量场景如热点事件流量(秒杀事件、热门抢购,微博热搜),恶意刷流,竞对爬虫等。内部应用层:上游服务的异常调用,脚...

    Java 2020年12月09日 1234 0
  • 什么是悲观锁和乐观锁?

    思维导图文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary悲观锁悲观锁是平时开发中经常用到的一种锁,比如ReentrantLock和synchronized等就是这种思想的体现,它总是假设别的线程在拿线程的时候都会修改数据,所以每次拿到数据的时候都会上锁,这样别的线程想拿这个数据就会被阻塞。如图所示...

    Java 2020年12月08日 1385 0
  • 运用拦截器与注解,在SpringBoot中实现自定义权限认证

    权限的认证框架很多,比如Shiro与SpringSecurity。今天使用拦截器与注解的方式,实现一个自定义的权限认证。目前,系统中需要两种角色,分别是平台管理员与普通用户,他们各自拥有不同的权限。在真正开始他们的操作之前,系统要求先登录。(1)第一次登陆系统后,之后利用Cookie与Session来标识用户。先写好Cookie与Session的工具类备用CookieUtil...

    Java 2020年12月08日 1625 0
  • 搞懂Java本地事务和分布式事务

    什么是事务事务的概述是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合(工作逻辑单元);事务的特性事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。原子性(atomicity):事务是一个不可分割的工作单位,事务中包括的诸操作要么都做...

    Java 2020年12月08日 3005 0
  • Springboot过滤器和拦截器详解及使用场景

    一、过滤器和拦截器的区别1、过滤器和拦截器触发时机不一样,过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。2、拦截器可以获取IOC容器中的各个bean,而过滤器就不行,因为拦截器是spring提供并管理的,spring的功能可以被拦截器使用,在拦截器里注入一个service,可以调用业务逻辑。而过...

    Java 2020年12月08日 1403 0
  • 大牛教大家如何用SpringBoot技术快速实现天气预报系统

    从一个天气预报系统讲起本节通过Spring Boot技术快速实现一个天气预报系统。通过这个系统,一方面可以了解Spring Boot的全面用法,为后续创建微服务应用打下基础;另一方面,该系统会作为本节进行微服务架构改造的非常好的起点。下面以前面创建的hello-world应用作为基础进行改造,成为新的应用micro-weather-basic。开发环境为了演示本例,需要采用如下...

    Java 2020年12月08日 1337 0
  • 腾讯牛逼!终于开源了自家的 JDK——Kona

    是的,继阿里 2019/03 开源基于 OpenJDK 的长期支持版本 Alibaba Dragonwell 之后,腾讯也发布了自家的开源免费的 JDK 版本——Tencent Kona,必须替小马哥宣传一波。看了下 Github 腾讯开源版 JDK 的发布记录:最早是在 2019/11/04 这天发布的 Tencent Kona v8.0.0 版本,没错,最近栈长村里通网了,...

    Java 2020年12月07日 1627 0
  • Java 8时间类,越用越香

    为什么会在Jdk8中加入很多时间类非线程安全java.util.Date 是非线程安全的,所有的日期类都是可变的,这是Java日期类最大的问题之一。Date date = new Date(); for (int i = 0; i < 100; i++) {    new Thread(new Runnable() {     ...

    Java 2020年12月07日 1327 0
  • 不会吧,居然现在还没有人知道JDBC的核心API吗?

    一、常用JDBC API在java.sql包中包含体现JDBC基本功能的若干接口和类:1.Driver 接口:代表驱动程序2.DriverManager 类:驱动程序管理员3.Connection 接口:代表数据库连接4.Statement 、PreparedStatement、CallableStatement 接口:代表数据库操作对象5.ResultSet 接口:代表结果集...

    Java 2020年12月06日 1110 0
  • Java 实现6种负载均衡算法

    1、完全随机算法缺点:所有服务器的访问概率都是相同的。package com.example.demo.core.random; import java.util.Arrays; import java.util.List; import java.util.Random; /** * 负载均衡算法 * 完全随机算法 */ public class RandomS...

    Java 2020年12月06日 1121 0
  • SpringBoot中如何灵活的实现接口数据的加解密功能?

    数据是企业的第四张名片,企业级开发中少不了数据的加密传输,所以本文介绍下SpringBoot中接口数据加密、解密的方式。一、加密方案介绍二、实现原理三、实战四、测试五、踩到的坑一、加密方案介绍对接口的加密解密操作主要有下面两种方式:1.自定义消息转换器优势:仅需实现接口,配置简单。劣势:仅能对同一类型的MediaType进行加解密操作,不灵活。2.使用spring提供的接口Re...

    Java 2020年12月04日 1340 0
  • Spring @Async 使用

    开启异步支持@Configuration @EnableAsync public class SpringAsyncConfig { ... } 默认情况下,@EnableAsync检测Spring的@Async注释和EJB 3.1 javax. EJB .异步;此选项还可用于检测其他用户定义的注释类型。@Async注解使用无返回值@Async public void asyn...

    Java 2020年12月03日 1072 0
  • 消息中间件RocketMQ

    RocketMQ的前世今生RocketMQ是一款阿里巴巴开源的消息中间件,在2017年9月份成为Apache的顶级项目,是国内首个互联网中间件在 Apache 上的顶级项目。RocketMQ的起源受到另一款消息中间件Kafka的启发。最初,淘宝内部的交易系统使用了淘宝自主研发的Notify消息中间件,使用Mysql作为消息存储媒介,可完全水平扩容。为了进一步降低成本和提升写入性...

    Java 2020年12月03日 2607 0
  • SpringBoot中的定时任务的同步与异步你确定真的知道?

    定时任务调度功能在我们的开发中是非常常见的,随便举几个例子:定时清除一些过期的数据,定时发送邮件等等,实现定时任务调度的方式也十分多样,本篇文章主要学习各种实现定时任务调度方式的优缺点,以便为日后选择的时候提供一定的参考。本篇要点介绍Timer实现定时任务。介绍ScheduledExecutorService实现定时任务。介绍SpringBoot使用SpringTask实现定时...

    Java 2020年12月02日 1585 0
  • springboot 排除自动配置的 4 种方法

    Spring Boot 提供的自动配置非常强大,某些情况下,自动配置的功能可能不符合我们的需求,需要我们自定义配置,这个时候就需要排除/禁用 Spring Boot 某些类的自动化配置了。比如:数据源、邮件,这些都是提供了自动配置的,我们需要排除 Spring Boot 的自动化配置,交给我们自己来自定义,该如何做呢?今天栈长给你介绍 4 种排除方式,总有一种能帮到你!方法1使...

    Java 2020年12月02日 1710 0
  • 从零开始搭建Kafka+SpringBoot分布式消息系统

    前言由于kafka强依赖于zookeeper,所以需先搭建好zookeeper集群。由于zookeeper是由java编写的,需运行在jvm上,所以首先应具备java环境。(ps:默认您的centos系统可联网,本教程就不教配置ip什么的了)(ps2:没有wget的先装一下:yum install wget)(ps3:人啊,就是要条理。东边放一点,西边放一点,过段时间就不知道自...

    Java 2020年12月02日 1056 0
  • springboot中定时任务执行Quartz的使用

    环境:springboot2.2.11.RELEASE2种方式执行定时任务1、通过springboot的方式2、使用Quartz实现定时任务方式一:通过springboot的定时任务1、开启定时任务功能@EnableScheduling@SpringBootApplication @EnableScheduling public class SpringBootQuartzSc...

    Java 2020年12月02日 1458 0
  • Spring Boot Admin快速打造监控平台

    使用过Spring boot的开发者都知道actuator,它是Springboot提供的用来对应用系统进行自省和监控的功能模块,借助于Actuator开发者可以很方便地对应用系统某些监控指标进行查看、统计等。但比较遗憾的是没有可视化界面,只能通过干燥的json数据来查看相应的指标,如下图:今天我们介绍一个可视化的监控指标平台Spring Boot Admin,它利用sprin...

    Java 2020年12月01日 3463 0