Java
文章平均质量分 90
仲尼叔叔
个人博客地址:http://karma520.com
展开
-
史上功能最全的 Java 权限认证框架!
来源:GitHub上sa-token 项目今天给大家推荐的这个开源项目超级棒,可能是史上功能最全的 Java 权限认证框架!这个开源项目就是:sa-token 。Sa-Token是什么?sa-token是一个轻量级Java权限认证框架,主要解决:登录认证、权限认证、Session会话、单点登录、OAuth2.0 等一系列权限相关问题框架针对踢人下线、自动续签、前后台分离、分布式会话……等常见业务进行N多适配,通过sa-token,你可以以一种极简的方式实现系统的权限认证部分与其它权限认证框.原创 2021-07-13 10:59:06 · 1285 阅读 · 0 评论 -
熟练掌握 MyBatis-Plus,一篇就够!
mybatis-plus是一款Mybatis增强工具,用于简化开发,提高效率。下文使用缩写mp来简化表示mybatis-plus,本文主要介绍mp搭配SpringBoot的使用。注:本文使用的mp版本是当前最新的3.4.2,早期版本的差异请自行查阅文档官方网站:baomidou.com/快速入门创建一个SpringBoot项目导入依赖<!-- pom.xml --><?xml version="1.0" encoding="UTF-8"?><projec转载 2021-07-01 16:55:20 · 826 阅读 · 0 评论 -
如何使用canal解决mysql与redis数据一致性问题?
问题;如果数据库数据发生了变化,如何将变化的数据同步给redis?1.直接删除redis缓存,见代码2.基于MQ形式实现同步(略)3.基于canal订阅binlog二进制文件,通过mq实现异步同步基于canal订阅binlog同步原理:1.canal服务器伪装成mysql的从节点,订阅mysql 的binlog二进制文件2.当mysql主节点binlog发生改变时,会通知给canal服务器端3.canal服务器将改变的数据转换成json数据发送canal客户端4.在canal客户端中原创 2020-12-21 11:32:51 · 1487 阅读 · 0 评论 -
Swagger整合Gateway网关
1.添加maven依赖 <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</arti...原创 2020-03-06 00:15:31 · 5733 阅读 · 4 评论 -
SpringCloudAlibaba之Sentinel框架
一、Sentinel 介绍随着微服务的流行,服务和服务之间的稳定性变得越来越重要。 https://github.com/alibaba/Sentinel[Sentinel] 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。https://github.com/alibaba/Sentinel[Sentinel] 具有以下特征:丰富的应用场景: Sentine...原创 2020-02-06 15:59:27 · 1935 阅读 · 0 评论 -
RabbitMQ消息中间件使用
RabitMQ消息中间件一、介绍RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件),RabbitMQ服务器是用Erlang语言编写的。 RabitMQ官方网站1.点对点模式(简单)2.工作模式 (一对多)3.发布订阅4.路由模式5.topic模式(通配符)6.RPC模式7.发布者确定模式二、安装1.下载并安装erlang,下载...原创 2019-12-15 18:29:30 · 444 阅读 · 0 评论 -
Redis自动过期机制
实现需求:处理订单过期自动取消,比如下单30分钟未支付自动更改订单状态实现方案:使用Redis Key自动过期出发事件通知使用定时任务30分钟后检查按照每分钟轮训检查CREATE TABLE `order_number` ( `id` int(11) NOT NULL AUTO_INCREMENT, `order_name` varchar(255) DEFAUL...原创 2019-11-21 17:35:18 · 1227 阅读 · 0 评论 -
Redis如何实现分布式锁
一、Redis分布式锁实现思路Redis实现分布式锁基于SetNx命令,因为在redis中key是保证是唯一的。所以当多个线程同时创建setNx时,只要谁能够创建成功谁就能获取到锁。Set命令:每次set时,可以修改原来旧值;SetNx命令:每次SetNx检查key是否已经存在,如果已经存在的话就不会执行任何操作,返回0;反之,新增该key。获取锁的时候:当多个线程同时创建SetNx k...原创 2019-12-02 10:50:34 · 1288 阅读 · 0 评论 -
Zuul网关服务集成阿波罗及Swagger文档配置
1.在Apollo配置中心创建项目,并导入配置。[ { "name": "app-member", "location": "/app-member/v2/api-docs", "version": "2.0" }, { "name": "app-weixin", "location": "...原创 2019-06-01 15:59:54 · 607 阅读 · 0 评论 -
Nacos整合SpringCloud(配置中心、注册中心)
1.什么是Nacos?Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。2.Nacos配置中心整合2.1 启动 Nacos Server 并添加配置1.下载地址:直接下载:Nacos Server 下载页源码构建:Github 项目页面2.启动Linux/Unix/Mac 操作系统,执行命令 sh startup.sh -m s...原创 2019-06-03 12:14:27 · 231694 阅读 · 17 评论 -
Spring之多种注入Bean方式
1.使用@Configuration配置容器//MySpringConfig.java@Configuration //等同于配置的spring配置文件@Lazy//默认开启懒加载(True)public class MySpringConfig { @Bean public User user() { return new User(10, "小明");...原创 2019-07-10 10:12:43 · 705 阅读 · 0 评论 -
纯手写SpringMVC框架
一、创建maven项目带webapp目录的maven项目1.pom.xml <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1....原创 2019-07-25 15:59:03 · 1193 阅读 · 0 评论 -
Gradle入门及SpringBoot项目构建
一、介绍Gradle 是一种构建工具,它抛弃了基于XML的构建脚本,取而代之的是采用一种基于 Groovy(现在也支持 Kotlin)的内部领域特定语言。二、特点Gradle是很成熟的技术,可以处理大规模构建Gradle对多语言、多平台支持性更好Gradle关注在构建效率上Gradle发布很频繁,重要feature开发计划透明化Gradle社区很活跃,并且增加迅速三、安装1....原创 2019-07-22 17:04:06 · 23279 阅读 · 8 评论 -
SpringBoot 整合 apollo
简介Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。Apollo和Spring Cloud Config对比通过对比,可以看出,生成环境中 Apollo 相比 Spring Cloud Config 更具有优势一些。安装 Apoll...原创 2019-03-06 09:34:00 · 231 阅读 · 0 评论 -
Spring Boot 最核心的 25 个注解,都是干货!
学习和应用 Spring Boot 有一些时间了,你们对 Spring Boot 注解了解有多少呢?今天栈长我给大家整理了 Spring Boot 最核心的 25 个注解,都是干货! Spring Boot 最核心的 25 个注解 1、@SpringBootApplication 这是 Spring Boot 最最最核心的注解,用在 Spring Boot 主类上,标识这...原创 2019-03-02 11:13:00 · 580 阅读 · 0 评论 -
springboot+redis项目实战
1.在springboot项目的pom.xml文件里加入redis的jar依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...原创 2019-02-22 10:02:00 · 923 阅读 · 0 评论 -
Java创建图形验证码工具类
public class RandomValidateCodeUtil { public static final String RANDOMCODEKEY = "RANDOMVALIDATECODEKEY";// 放到session中的key private String randString = "0123456789";// 随机产生只有数字的字符串 private String /...转载 2019-07-22 17:44:09 · 272 阅读 · 0 评论 -
DTO与DO转换、Vo转Dto工具类
public class MiteBeanUtils<Dto, Do> { /** * dot 转换为Do 工具类 * * @param dtoEntity * @param doEntity * @return */ public static <Do> Do dtoToDo(Object dtoEntity, Class<Do>...转载 2019-07-22 17:46:04 · 5885 阅读 · 0 评论 -
基于注解方式启动SpringMVC
一、Maven依赖 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.0.5.RELEASE</version> ...原创 2019-07-23 10:01:27 · 1126 阅读 · 0 评论 -
SpringBoot2.0之SpringApplication源码分析
此源码分析针对于SpringBoot的2.0.1.RELEASE版本一、首先我们先看到启动类中二、点击进入SpringApplication的run方法由此可以看出SpringApplication.run(AppWeiXin.class, args);实际上是返回的有对象的。即ConfigurableApplicationContext三、继续进入run方法由此我们可以知道Co...原创 2019-08-01 10:56:08 · 364 阅读 · 1 评论 -
SpringMVC源码分析之DispatcherServlet
SpringMVC核心就是DispatcherServlet,被称为前端控制器,所有请求都会转发到DispatcherServlet,然后再通过DispatcherServlet执行具体的控制层,最后返回modelAndView给客户端视图展示。SpringMVC中常用的几个概念,处理器映射器(HandlerMapping)、处理器适配器(HandlerAdapter)和视图解析器(ViewR...原创 2019-07-23 15:22:29 · 429 阅读 · 0 评论 -
纯手写ArrayList集合框架
本文章只针对于ArrayList的常用API一、创建MyList接口public interface MyList<E> { int size(); public E remove(int index); boolean add(E e); E get(int index);}二、创建MyArrayList,并实现MyList接口public...原创 2019-08-07 11:03:04 · 188 阅读 · 0 评论 -
纯手写LinkedList集合框架
本文章只纯手写了LinkedList的常用API一、创建MyList接口public interface MyList<E> { int size(); public E remove(int index); boolean add(E e); E get(int index);}二、创建MyLinkedList,并实现MyList接口pub...原创 2019-08-11 00:54:58 · 165 阅读 · 0 评论 -
Springboot整合shiro(及yaml配置形式)
1.shiro是什么?Shiro是Apache下的一个开源项目。shiro属于轻量级框架,相对于SpringSecurity简单的多,也没有SpringSecurity那么复杂。以下是我自己学习之后的记录。官方架构图如下:2.主要功能shiro主要有三大功能模块:1. Subject:主体,一般指用户。2. SecurityManager:安全管理器,管理所有Subject,可以配合...原创 2019-10-09 16:10:31 · 9103 阅读 · 1 评论 -
Dockerfile
一、dockerfile常用命令指令描述FROM构建的新镜像是基于哪个镜像;例如:From centos:6MAINTAINER镜像维护者姓名或邮箱地址;例如:MAINTAINER wangmhRUN构建镜像时运行的Shell命令;例如:RUN [“yum”,“install”,“httpd”],RUN yum install httpdCMD运行容...原创 2019-04-10 10:06:17 · 192 阅读 · 0 评论 -
携程Apollo(阿波罗)安装部署以及整合SpringBoot
1.为什么要使用分布式配置中心?统一管理微服务配置文件,可以实现动态刷新配置文件。SpringCloudConfig与阿波罗的区别:前者是将配置存放到git中,后者是将配置存放到数据库中。2.搭建分布式配置中心阿波罗1.下载aplolo配置中心https://github.com/nobodyiam/apollo-build-scripts2.上传到服务器中,并解压unzi...原创 2019-06-01 02:21:08 · 2460 阅读 · 4 评论 -
Mybatis源码分析之SqlSessionFactoryBuilder
1.首先是通过Resource中的getResourceAsReader方法加载配置文件信息。 // 1.定义mybatis_config文件地址 String resources = "mybatis_config.xml"; // 2.获取InputStreamReaderIo流 Reader reader = Resources.getResourceAsReader(resourc...原创 2019-06-05 21:43:47 · 438 阅读 · 0 评论 -
Springboot整合JOOQ
jOOQ是一个基于Java的编写SQL的工具包,具有:简单,轻量,函数式编程写SQL等独特优势,非常适合敏捷快速迭代开发。SQL语句:SELECT AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME, COUNT(*) FROM AUTHOR JOIN BOOK ON AUTHOR.ID = BOOK.AUTHOR_ID WHERE BOOK.LANG...原创 2019-05-06 17:25:16 · 3098 阅读 · 1 评论 -
Spring Data Elasticsearch
Elasticsearch提供的Java客户端有一些不太方便的地方:很多地方需要拼接Json字符串,在java中拼接字符串有多恐怖你应该懂的需要自己把对象序列化为json存储查询到结果也需要自己反序列化为对象因此,我们这里就不讲解原生的Elasticsearch客户端API了。而是学习Spring提供的套件:Spring Data Elasticsearch。1.简介Spring...原创 2019-01-11 11:44:06 · 429 阅读 · 0 评论 -
Idea快速入门指南
Idea快速入门指南1.安装1.1.安装我们使用的是最新的2017.3.4版本:双击打开,选择一个目录,最好不要中文和空格:然后选择桌面快捷方式,请选择64位:然后选择安装:开始安装:然后勾选安装后运行,Finish:1.2.首次配置然后是UI界面选择,有白色和黑色两款,总有一款适合你:把不需要的组件禁用:插件暂时不选择安装,以后有需求还可以来安装:...原创 2019-01-11 14:40:46 · 1249 阅读 · 0 评论 -
部分Java注解用法
java用@interface Annotation{}定义一个注解@Annotation,一个注解是一个类。注解相当于一种标记,在程序中加上了注解就等于为程序加上了某种标记,javac编译器就可以用反射来了解你的类以及各种元素上有无任何标记,看你有什么标记,就去干相应的事。1、@Override用在方法上,当我们想重写一个方法时,在方法上加@Override,当方法的名字出错时,编译器...原创 2019-04-02 10:31:13 · 221 阅读 · 2 评论 -
Java实现JWT的Token认证机制
基于JWT的Token认证机制实现1.什么是JWTJSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。2.JWT组成一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签证头部(Header)头部用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。这也可以被表示成一个JSON对象。{"t...原创 2019-04-11 10:21:34 · 13241 阅读 · 4 评论 -
BCrypt密码加密
Spring Security提供了BCryptPasswordEncoder类,实现Spring的PasswordEncoder接口使用BCrypt强哈希方法来加密。BCrypt强哈希方法,每次加密结果都不一样。1.引入依赖<dependency> <groupId>org.springframework.boot</groupId> <art...原创 2019-04-10 17:15:09 · 2076 阅读 · 0 评论 -
分布式ID生成器(雪花算法)
数据库在生产环境中需要分片部署(MyCat),所以我们不能使用数据库本身自增功能来产生主键值,只能由程序来生成唯一的主键值。因此我们可以采用开源的twitter的snowflake(雪花)算法。默认情况下41bit的时间戳可以支持该算法使用到2082年,10bit的工作机器id可以支持1024台机器,序列号支持1毫秒产生4096个自增序列id。snowFlake的优点在于整体上按照时间自增顺序...原创 2019-04-10 16:08:28 · 903 阅读 · 0 评论 -
23种设计模式
一、设计模式的分类总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。其实还有两...转载 2018-09-18 03:45:25 · 159 阅读 · 0 评论 -
Java ExecutorService四种线程池
1、new Thread的弊端执行一个异步任务你还只是如下new Thread吗?[java] view plain copy1. new Thread(new Runnable() { 2. 3. @Override 4. public void run() { 5. // TODO Auto-generated method stub 6. ...原创 2018-03-27 10:52:44 · 690 阅读 · 0 评论 -
Java中的集合功能整理
1.选择合适的集合类。 Set:是一个接口,无序集合,不能包含重复元素。同时身为接口不能生成对象。但是类HashSet和TreeSet实现了该接口,所以通常使用的也是这两个。 HashSet:该集合中主要存放的一些无序元素。如果你只是想用一个‘罐子’盛东西,其他什么都不关心,可以选它。 TreeSet:该集合除了实现Set接口还实现了SortedSet接口。也就是说可...原创 2018-03-27 10:52:11 · 167 阅读 · 0 评论 -
log4j日志配置
事例:log4j.properties### 设置Logger输出级别和输出目的地 ###log4j.rootLogger=debug, stdout,logfile### 把日志信息输出到控制台 ###log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.errlog4j...原创 2018-03-27 10:51:32 · 172 阅读 · 0 评论 -
SpringBoot2.0使用FastDFS实现上传
1.什么是分布式文件系统分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。通俗来讲:传统文件系统管理的文件就存储在本机。分布式文件系统管理的文件存储在很多机器,这些机器通过网络连接,要被统一管理。无论是上传或者访问文件,都需要通过管理中心来访问2.什么是FastDFSFastDFS...原创 2019-01-03 23:48:38 · 1231 阅读 · 0 评论 -
zuul报forward错误问题
zuul报forward错误问题 com.netflix.zuul.exception.ZuulException: Forwarding error原因可能是zuul超时,未在配置中配置重试机制解决方法:在application.yml中添加以下内容ribbon: ReadTimeout: 60000 #读出超时的时间 ConnectTimeout: 60000 #连接超时的时...原创 2018-11-26 17:04:58 · 2976 阅读 · 0 评论