自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Lumia

Seize the day.

  • 博客(51)
  • 收藏
  • 关注

原创 分布式事务-基于可靠消息的最终一致性实现

CAP与BASE我们都知道,传统数据库事务具有ACID的特性,但在分布式环境下,追求强一致性在大多数情况下无法满足高性能需求。分布式系统的CAP理论告诉我们,一致性、可用性、分区容忍性无法同时满足,最多只能满足其他两项。CAP理论描述如下:一致性(Consistency):所有节点在同一时间读到同样的数据;可用性(Availability):无论是成功还是失败,每个请求都能收到一个反馈。可用性强调的是服务可用,不保证数据的正确性;分区容忍性(Partition-Tolerance):即使系统中有

2020-06-06 20:32:04 848

原创 分布式事务 -两阶段提交及Atomikos在Spring Boot的使用

基于XA规范的两阶段提交方式事务在业务的开发中有着至关重要的作用,事务具有的ACID的特性能保证业务处理前后数据的一致性:原子性(Atomicity): 事务执行的所有操作,要么全部执行,要么全部不执行;一致性(Consistency): 事务的执行前后,数据的完整性保持一致;隔离性(Isolation): 两个或多个事务并行执行时是互不干扰的;持久性(Durability): 事务执行完成后,其对数据库数据的更改会被永久保存下来;在单机环境下,数据库系统对事务的支持是比较完善的;但当对数据进行

2020-05-24 01:29:35 1216

原创 高性能队列——Disruptor认识

Disruptor是什么Disruptor是一个由英国外汇交易公司LMAX研发并开源的高性能的有界内存队列,其主要用于在线程之间完成数据的传递。对数字从1开始累加,LinkedBlockingQueue与Disruptor对比结果:1000wLinkedBlockingQueue耗时:1552msDisruptor耗时:500ms5000wLinkedBlockingQueue耗时...

2020-03-01 18:15:49 557

原创 Spring Boot,自定义starter实现

“约定优于配置”是Spring Boot倡导的一个思想,而其自动配置的特性则恰好体现了这一思想。有了自动配置,不仅简化了Maven的依赖配置,更重要的是摆脱了以往使用Spring框架开发时,所必须编写的一堆繁琐的xml配置文件。而要使用自动配置,我们也只需要简单的在依赖中引入Starter依赖即可,例如,要在Spring Boot中启用Spring MVC,我们只需要在pom文件中引入spring...

2019-07-08 23:28:32 357

原创 Java类的热加载原理与实现

1 类加载原理Java类的加载过程主要分为三个步骤,加载、链接、初始化,其中将类加载到JVM中的工作由类加载器完成。在加载阶段,类加载器可以从不同的数据源(jar文件、class文件、网络文件)读取 Java 字节代码,并转换成 java.lang.Class类的一个实例。在Java中,主要提供有四种类加载器,引导类加载器(BootStrapClassLoader)、扩展类加载器(ExtCla...

2019-06-03 00:09:30 5730 2

原创 CAS单点登录:CAS客户端搭建(整合Shiro和Spring Boot)

上一篇我们试着搭建了一个简单的CAS服务端,在这一篇中,我们将整合Shiro搭建一个CAS客户端。1 新建Maven项目,引入相关依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=

2019-03-09 23:57:36 2124

原创 CAS单点登录:CAS服务端搭建

1 单点登录与CAS单点登录(Single Sign On,SSO)是一种登录管理机制,主要用于多系统集成,即在多个系统中,用户只需要到一个中央服务器登录一次即可访问这些系统中的任何一个,无须多次登录。常见的例子就是,当我们在淘宝网上登录了之后,如果再访问天猫网的话是不需要再次登录的。CAS是SSO的一种实现方式,CAS系统分为服务端与客户端,服务端提供登录认证的功能,客户端需要跳转到服务端进...

2019-03-09 01:03:03 659

转载 Shiro扩展:添加验证码支持(整合Spring Boot)

1 新建Spring Boot项目,添加Shiro依赖 <!-- shiro --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifac

2019-02-26 10:38:36 497

原创 Spring Cloud入门:消息驱动(Spring Cloud Stream)

文章实例使用的Spring Cloud版本为Finchley.SR1,Spring Boot版本为2.0.4。1 Spring Cloud StreamSpring Cloud Stream是一个用于构建消息驱动的微服务应用的框架,其提供的一系列抽象屏蔽了不同类型消息中间件使用上的差异,同时也大大简化了Spring在整合消息中间件时的使用复杂度。1.1 Spring Cloud Stre...

2019-01-23 00:04:42 875

原创 实现延时任务可以有几种方式

在开发中,延时任务属于比较常见的需求,比如,订单在限定时间内未支付则自动取消并释放库存;外卖的商家端在设置特定时间后仍未接单时则自动接单等这都需要延时任务来完成。实现延时任务的方式可以有许多种:1 DelayQueue(JDK提供实现)2 ScheduledExecutorService(JDK提供实现)3 Redis(使用ZSET数据结构实现)4 RabbitMQ实现下面我们来简单看...

2019-01-18 00:05:30 1004

原创 JWT的使用:Spring Cloud微服务接口鉴权

0 JWT是什么JWT(JSON Web Token)是一种开放标准,它以一种紧凑且独立的方式,可以在各方之间作为JSON对象安全地传输信息。其认证原理是,客户端向服务器申请授权,服务器认证以后,生成一个token字符串并返回给客户端,此后客户端在请求受保护的资源时携带这个token,服务端进行验证再从这个token中解析出用户的身份信息。0.1 JWT的结构一个JWT是一个字符串,其由H...

2019-01-13 18:46:07 11147 8

转载 Java中equals和hashCode方法的作用

《Effective Java》equals和hashCode方法是Object类中定义的两个方法:public native int hashCode();public boolean equals(Object obj) { return (this == obj);}本文就这两个方法谈谈它们的作用与联系。1 equals方法当我们要比较两个数是否相等时,常常通过==...

2018-12-23 21:19:32 1287

原创 Redis中Bitmaps的使用(签到功能的实现)

Bitmaps并不属于Redis中数据结构的一种,它的命令基于String操作,是set、get等一系列字符串操作的一种扩展,与其不同的是,它提供的是位级别的操作,从这个角度看,我们也可以把它当成是一种位数组、位向量结构。当我们需要存取一些boolean类型的信息时,Bitmap是一个非常不错的选择,在节省内存的同时也拥有很好的存取速度(getbit/setbit操作时间复杂度为O(1))。1 ...

2018-12-23 10:42:06 2856 2

转载 Java中clone()方法的使用

Java编程思想对象克隆是指创建已有对象的一个拷贝,如果想要修改一个对象,但同时不想改变调用者的对象,那么克隆会是很好的解决方式。在Java中,实现对象的克隆只需要覆盖Object提供的clone()方法,并将方法访问级别改为public,同时要注意对象所属类必须实现Cloneable接口,否则在调用clone()方法时会抛出CloneNotSupportedException异常。1 ...

2018-12-16 13:17:38 318

转载 Java中finalize()方法的使用

Java编程思想finalize()方法是Object类中提供的一个方法,在GC准备释放对象所占用的内存空间之前,它将首先调用finalize()方法。其在Object中定义如下:protected void finalize() throws Throwable { }1 finalize()调用的时机与C++的析构函数(对象在清除之前析构函数会被调用)不同,在Java中,由于GC...

2018-12-08 23:59:49 45012 10

转载 Java中final关键字的使用

《Java编程思想》final是Java的一个非访问控制修饰符(non-access modifier),可以用于修饰变量、方法和类,有着“不可变”的作用。下面我们简单看一下final有哪些用法。1 final变量当一个变量被final修饰时,它分为两种情况:当这个变量是一个基本数据类型时,这时就意味着该变量是可读的、不可更改的常量(constant),对于常量,有两个方面的应用:(...

2018-12-02 19:18:59 350

原创 Spring Cloud入门:API网关服务(Spring Cloud Gateway)

文章实例使用的Spring Cloud版本为Finchley.SR1,Spring Boot版本为2.0.4。1 Spring Cloud Gateway在微服务架构中,网关作为服务的一个统一入口,所有的外部客户端访问都需要经过它来调度和过滤,可以实现的功能包括动态路由、负载均衡、授权认证、限流等。Spring Cloud Gateway是Spring官方基于Spring 5.0,Spr...

2018-11-20 22:49:59 1730

原创 Spring Cloud入门:分布式配置中心(Spring Cloud Config)

文章实例使用的Spring Cloud版本为Finchley.SR1,Spring Boot版本为2.0.4。1 Spring Cloud ConfigSpring Cloud Config是Spring Cloud团队创建的一个全新项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端与客户端两个部分。其中服务端也称为分布式配置中心,它是一个独立的微服务应用...

2018-11-19 00:00:30 275

原创 Spring Cloud入门:声明式服务调用(Spring Cloud Feign)

1 Spring Cloud FeignSpring Cloud Feign是一套基于Netflix Feign实现的声明式服务调用客户端。使用Spring Cloud Feign,我们只需创建一个接口并用注解的方式来配置它,即可完成对服务提供方的接口绑定,简化了在使用Spring Cloud Ribbon时自行封装服务调用客户端的开发量。2 实例2.1 创建Spring Boot应用,引入...

2018-11-12 23:49:12 553

原创 Spring Cloud入门:客户端负载均衡(Spring Cloud Ribbon)

1 Spring Cloud RibbonSpring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模板请求自动转换成客户端负载均衡的服务调用。RestTemplate是Spring提供的一个获取HTTP服务的类,它简化了与HTTP服务器的通信,并遵循了R...

2018-11-11 23:20:04 408

原创 Spring Cloud入门:高可用服务注册中心

1 高可用服务注册中心上一节服务注册与服务发现 中,我们尝试了服务注册中心的构建,但在微服务架构这样的分布式环境中,我们需要充分考虑发生故障的情况,所以在生产环境中必须对各个组件进行高可用部署,Eureka Server的高可用是通过启动多实例,并将自己作为服务向其他服务注册中心注册自己,最终形成的一组相互注册的服务注册,以实现服务清单的互相同步,达到高可用的效果。2 双节点服务注册中心实例...

2018-11-11 18:04:29 211

原创 Spring Cloud入门:服务注册与服务发现

文章实例使用的Spring Cloud版本为Finchley.SR1,Spring Boot版本为2.0.4。1 Spring Cloud Eureka(服务注册与发现)Spring Cloud Eureka 是Spring Cloud Netflix项目下的服务治理模块。服务治理是微服务架构中最为核心和基础的模块,它主要用户实现各个微服务实例的自动化注册与发现。服务注册:在服务治理框架...

2018-11-11 11:12:28 280

原创 Spring Boot统一异常处理

Java异常分为非检查异常(Error和RuntimeException以及它们的子类)以及检查异常(除Error 和 RuntimeException的其它异常),检查异常需要我们显式地进行try,catch处理或者throws,而非检查异常则不需要。 程序中出现异常通常是我们不希望看到的,但合理地定义和处理Java异常,却可以给编程带来很大的便利。比如,合理地定义业务异常,结合Spring提...

2018-08-27 23:00:39 483

原创 IDEA下,打包Spring Boot项目

一、以jar包形式发布 pom.xml配置<!-- ... --><packaging>jar</packaging><!-- 以jar包形式打包 --><build> &

2018-07-29 17:30:52 864

原创 IDEA下,Spring Boot项目启用热部署功能

热部署的功能可以使我们在修改了源代码之后,在不重启服务器的情况下就可以实现项目的重新编译/部署,让修改生效。 下面是IDEA下,Spring Boot项目启用热部署的设置 1、File-Settings-Compiler,勾选Build project automatically: 2、Ctrl+Shift+Alt+”/”,选择Registry,勾选compiler.automake.a...

2018-07-29 11:39:53 214

转载 解决“Idea下项目无法找到*.xml配置文件”的问题

解决方案:pom.xml文件添加如下配置<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</in

2017-08-24 19:58:11 3435

转载 将Maven项目的Dynamic Web Module 改为3.1版本

1 转到Navigator 视图,.settings文件夹下,打开如下文件: 将jst.web 的version改为3.1,如下: 2 右击项目,打开properties,设置java版本为1.8并应用: 3 打开web.xml,更改为:<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/20

2017-08-06 20:05:44 7801 1

转载 解决“Spring 使用MapperScannerConfigurer无法读取*.properties文件"的问题

问题详情:org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.mybatis.spring.mapper.MapperScannerConfigurer#0' defined in class path resource [config/spring-beans.xml

2017-08-04 00:58:03 2294

转载 Eclipse:启用代码自动补全功能

Window->Preferences->Java->Editor->Content Asist,勾选Enable auto activation在Auto activation triggers for Java后面的文本框里只有一个“.”,将其改为“.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”即可。

2017-07-29 16:00:25 515

原创 Maven:安装过程以及在eclipse上的使用

安装和配置下载Apache Maven请确保已安装JDK,并 且“JAVA_HOME” 变量已加入到 Windows 环境变量。Maven下载地址:http://maven.apache.org/download.cgi ,进入后找到(下图所在位置)下载: 注意Maven3.3+需要JDK1.7版本或以上。详情请看官网安装和配置将下载到的maven压缩包解压到你的存放目录(比如我的:D:\De

2017-07-28 14:09:47 424

原创 JavaWeb项目:Shiro实现简单的权限控制(整合SSM)

该demo整合Shiro的相关配置参考开涛的博客数据库表格相关设计 表格设计得比较简单,导航栏直接由角色表auth_role的角色描述vRoleDesc(父结点)和角色相关权限中的权限描述(标记为导航结点)vPermissionDesc(展开子项)组成。 Shiro相关设置密码输入错误次数限制//密码重试5次次数限制 public class RetryL...

2017-07-27 22:06:40 29268 37

原创 解决Spring MVC整合Shiro出现无法访问静态资源文件的问题

问题描述:Chrome 控制台下报“Resource interpreted as Stylesheet but transferred with MIME type text/html”,css,js等文件无法正确被加载。原因出在了配置shiro过滤器时设置了“/**=user”,使得在未登录状态下无法正确加载静态文件。解决方案:<!-- Shiro的Web过滤器 --> <bean id

2017-07-26 17:31:34 13863

转载 checkbox标签的一些用法(jQuery操作)

//监听选中事件$("#checkbox1").change(){ //判断是否为选中状态 //也可以这样$(this).prop("checked") if($(this).is(":checked")){ //do something }else{ //other }}//改变checkbox的状态$("#check

2017-07-23 17:03:08 692

转载 解决Spring MVC DispatcherServlet拦截“/”时,无法访问静态资源的问题

方式一:激活Tomcat的defaultServlet来处理静态文件<!--web.xml--><servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.js</url-pattern> </servlet-mapping><!--其他静态资源如*.css、*

2017-07-15 09:15:33 2926

转载 解决错误"SLF4J: Failed to load class 'org.slf4j.impl.StaticLoggerBinder'"

错误: SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for

2017-07-08 11:19:52 987

原创 Struts2:stream和json类型的返回

Action代码片段public class AjaxAction extends ActionSupport{ private User user; private InputStream result; public User getUser() { return user; } public void setUser(User user)

2017-06-21 16:36:58 1149

原创 Mybatis:映射解决列名不匹配的方法

方法一:使用别名数据库CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `namee` varchar(64) NOT NULL DEFAULT '', `phone` varchar(16) NOT NULL DEFAULT '', PRIMARY KEY (`id`)) ENGINE=Inn

2017-06-16 10:00:28 3710

原创 Swing JTextArea避免自动缩放的做法

JScrollPane scroll=new JScrollPane(textArea=new JTextArea());textArea.setRows(5);textArea.setLineWrap(true);

2016-12-21 21:56:54 1208

转载 Swing JTable的一些用法:单元格触发事件、设置可编辑单元格

//contents为表格显示的内容,一个二维数组;titles为表格表头DefaultTableModel newTableModel = new DefaultTableModel(contents,titles){ @Override public boolean isCellEditable(int row,int column) {

2016-12-21 21:19:08 8209

转载 Hiberante3.6的使用入门

1、Hibernate3.6的主要AIP组件1.1 Configuration:用于配置并且启动Hibernate框架每个Hibernate配置文件对应一个Configuration对象。Hibernate通过Configuration实例的configure()方法读取配置文件Hibernate.cfg.xml,在通过Configuration实例的buildSessionFactory()方法创

2016-12-19 18:01:57 410

空空如也

空空如也

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

TA关注的人

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