自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis分布式缓存+Redis分布式锁实现高并发场景下的缓存策略

这里写自定义目录标题项目背景前提代码实现逻辑获取缓存缓存的生成、更新代码示例1. 调用方法2. 核心代码逻辑3. 辅助类项目背景在某个项目,我们遇到了每秒百万QPS的情况,尤为特殊的是,集群部署了1000个实例,但是我们的数据库性能十分孱弱,Feign调用第三方接口响应时长慢,我们需要一种在百万级QPS,数据库或者Feign调用慢的环境下,依旧能给前端100毫秒的响应时间,经过探索,我们采用了Redis分布式缓存,使用Redission分布式锁实现缓存的更新。前提Redis集群(Redis单机,哨

2020-12-16 10:26:09 688

原创 HBase管理offset,解决kafka头越界或尾越界问题(HBase存储offset可以更换为Mysql、Redis、Zookeeper)

HBase管理offset,解决kafka头越界或尾越界问题(HBase存储offset可以更换为Mysql、Redis、Zookeeper什么是越界?头越界的原因尾越界的原因解决方案流程图代码实现调用方式举例什么是越界?越界包括头越界或尾越界。指的程序消费的是kafka offset不在kafka的队列里面,可能是数据过期或者kafka数据被清除###头越界的原因数据过期:指的是kafka中存储的数据会在一定时间内过期,比如数据的过期时间设置为7天。如果此时Spark、Flink、Java等程

2020-07-03 11:34:11 852 1

转载 Spark Streaming + Kafka Integration Guide 位置策略和消费策略译文

LocationStrategies 位置策略The new Kafka consumer API will pre-fetch messages into buffers. Therefore it is important for performance reasons that the Spark integration keep cached consumers on executors (rather than recreating them for each batch), and prefe

2020-07-01 09:39:13 468

原创 Shiro-Redis集群在Spring Boot中实践(实现用户登录、权限管理、用户踢出、密码错误次数过多不允许登录、记住我,修改密码)

Shiro-Redis集群在Spring Boot中实践Shiro-Redis集群在Spring Boot中实践(前后端分离)1. 项目背景2. 准备工作3. 数据库表1.用户表(user表)2.角色表(role表)3.用户 - 角色对应表(user_role表)4. 权限表(permission表)5.角色 - 权限对应表(role_permission)Shiro-Redis集群在Sprin...

2020-04-30 14:42:52 502 1

原创 Spark+kafka+scala入门

Spark+kafka+scala入门1. Scala编程思想(1) val常量,var变量,在声明变量的时候不需要说明具体的类型,类似于javascript语言(2) def表示声明函数或方法,其中参数名颠倒写,即变量名在前:类型,返回值不需要写returndef getPath(path:String):String={ println(path) path}(3) fo...

2020-03-30 10:58:08 4606

原创 Spark UI监控指标查看

1. Spark监控页进入对应的application进入Tracking URL选择Streaming2. 监控指标Input Size 每个批次处理输入数据大小(如多少条日志)Processing Time 每个批次处理时间Scheduling Delay 每个批次延迟时间Status 每个批次的状态 queued排队等待,processing正在执行Activ...

2019-09-27 14:45:51 1852

原创 IDEA 编码格式配置

务必将IDE的编码统一修改为UTF-8IDEA中操作路径为:File | Settings | Editor | File Encodings将如下三项修改为UTF-8格式IDE EncodingsProject EncodingsDefault encoding for properties files将其他项目也设置默认UTF-8,无需下次设置 File | Other Sett...

2019-09-26 11:55:01 421

原创 Java 8 时间日期工具类

import org.springframework.util.Assert;import java.time.*;import java.time.format.DateTimeFormatter;import java.time.temporal.IsoFields;import java.util.Date;/** * jdk8的日期时间工具类 * @author lic...

2019-09-24 12:14:17 148

原创 Elastic Search最佳实践

ES最佳实践(6.x)按天生成index,支撑每天10亿级日志量入库。ES日志采用按天生成index方法,查询先确定索引位置,如log_20190801,log_20190802。再去ES中查找动态模板与指定字段类型配合使用,优先采用指定类型,字段类型指定为keyword,不分词。针对精确查询:使用term/terms + filter可完整查询字段并缓存结果。针对模糊查询,使用w...

2019-09-23 19:54:51 482

原创 Elastic Search工具类

项目背景需要在非Spring环境(Spark)下使用ES的增删改查,新增此工具类方便开发。maven依赖 <!-- 若需要对ES增删改查 需引入ES高级客户端 --> <dependency> <groupId>org.elasticsearch.client</groupId> ...

2019-09-23 19:47:35 335

转载 Spring MVC + Slf4j + Log4j2 日志文件系统配置

https://www.jianshu.com/p/191273d04d2d整合的很完美~测试可用

2019-05-10 10:18:43 2662

原创 普通Maven项目打包jar,提供第三方调用

新建本地项目pom.xml<?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" xsi:schemaLocat...

2019-04-02 10:53:02 1442

原创 Log4j整合阿里云日志服务

### 日志级别 ERROR > WARN > INFO > DEBUG #### 优先采用slf4j获取log 所有的第三方jar都不太想看到输出日志,但是error的级别以上的需要# private static final Logger logger = LoggerFactory.getLogger(Test.class);# 而不是直接使用log4j的方式:ri...

2019-03-28 09:56:36 2151

原创 JavaSE中使用JPA(Hibernate 5.0 + mysql)框架

项目背景项目是Spark程序,原先的项目采用的是jdbc的形式连接数据库,十分繁琐且并发性能十分孱弱,故找出了在非Spring环境中使用JPA的方法使用方法maven依赖 <!-- 数据库相关 --> <!-- 通过hibernate连接数据库 默认连接池大小20 --> <dependency> <g...

2019-03-25 10:10:29 319

原创 Spring Boot2统一异常处理

Spring Boot 2.0 统一异常处理为什么要统一异常处理项目框架及异常类型项目代码pom依赖(只写出该模块涉及依赖)配置yml(properties基本一样)通用返回类统一异常处理类实现ErrorController接口为什么要统一异常处理项目开发形式为前后端分离,采用Restful接口形式开发,对异常的处理与页面业务数据统一以json形式返回,登录等接口由前端路由实现。项目框架及异...

2019-03-25 09:42:01 8603 4

原创 Mysql :根据某字段值做判断再来更新某字段的值

一、问题描述:    今天更新某表时出现You can't specify target table '表名' for update in FROM clause这种错误,意即不能先select出同一表中的某些值,再update这个表(在同一语句中),即不能依据某字段值做判断再来更新某字段的值。二、解决方案:     将SELECT出的结果再通过中间表SELECT一遍,具体可参考如下:...

2018-11-26 10:26:48 11403

原创 Nginx 配置二级域名指向不同的端口

一、问题描述:    服务器有两个tomcat的,配置为8081端口和8888端口,想通过ss.loveyoursmile.top访问8081端口的tomcat的,通过monitor.loveyoursmile.top。二,解决方案:    nginx的示例配置如下: server { listen 80; ...

2018-11-21 10:53:48 4107

原创 图片压缩处理以及网络图片转base64编码工具类

一、需求分析    在项目中,需要对本地的图片进行缩放处理(按指定长宽缩放等),方便前端展示缩略图,获取更快的页面加载速度。另外就是针对网络上的图片需要进行base64编码处理(如百度信息流的图片上传需要对图片进行base64编码,然后再上传)二、代码分析        调用方式如main方法所示import org.apache.commons.lang.StringUtils;import ...

2018-07-16 09:59:42 1453

原创 带参数的网络文件下载

一、需求详述    需要针对在网络上的资源文件下载到本地保存,并且需要在下载文件前设置请求参数。此时的请求是POST类型。二、代码实现 /** * @Description : 根据参数下载文件 * @Date : 2018/7/11 16:51 * @Author : Licf * @Modified By : Licf */ pu...

2018-07-12 11:15:26 1343

原创 Swagger 与 Spring Boot REST API 集成

一、Swagger介绍            Swagger(Swagger 2)是描述和记录REST API的一个规范。它指定了REST Web服务的格式,包括URL,资源,方法等。Swagger将从应用程序代码生成文档,并处理渲染部分。二、引入依赖     &lt;!-- 配置swagger2 --&gt; &lt;dependency&gt; &lt;groupId&gt;io....

2018-04-13 15:55:59 179

原创 Spring Boot的生产级特性 - Metrics 监控和管理

一、特性介绍    Metrics基本上是成熟公司里面必须做的一件事情,简单点来说就是对应用的监控,之前在一些技术不成熟的公司其实是不了解这种概念,因为业务跟技术是相关的 当业务庞大起来,技术也会相对复杂起来,对这些复杂的系统进行监控就存在必要性了,特别是在soa化的系统中,完整一个软件的功能分布在各个系统中,针对这些功能进行监控就更必要了 而Spring Boot Actuator 提供了met...

2018-04-13 14:08:33 8038

原创 记录一次fastjson调用的奇怪问题

一、项目背景        研究什么时候会调用fastjson,什么时候调用默认的jackson二、使用对比    1.Spring项目开启fastjson支持         &lt;!-- 启动spring mvc的注解功能 --&gt; &lt;mvc:annotation-driven&gt; &lt;mvc:message-converters regist...

2018-04-08 11:54:15 331

原创 Spring 3.x使用PageHelper插件分页查询

1. PageHelper介绍    PageHelper是国人开发的一款极其简单的数据库分页插件。只要在Java代码里添加一行简单的分页就可以实现简单的分页。参考官方github文档。2. 示例代码    2.1 添加PageHelper的maven依赖 &lt;dependency&gt; &lt;groupId&gt;com.github.pagehelper&lt;/groupId...

2018-03-29 17:37:41 500

原创 自定义注解与Redis结合加快查询速度

1. 项目背景        项目中有一些统计报表等等已经统计好的,不会变化的数据,需要展示给前端。这时,采用的方法是使用redis缓存json结果,加快查询速度。并且使用自定义注解作为切面,具体执行方法为切点,只要在具体需要缓存的Controller上面添加@CacheHandle注解即可。Redis里面存在数据的话去Redis缓存里面查找。否则去调用具体的执行方法到数据库查询。这种方法在于对代...

2018-03-29 12:00:20 569

原创 通过切面捕捉方法异常,并添加错误码返回前端的一点思考

这几天看到某个源码,返回的是Object类型的对象,再通过切面来对Object返回类型添加正确与否的包装类型返回json,这种类型的返回值有个巨大的问题是,无法返回自定义的错误码,虽然节省了工作,导致错误码的添加不能在代码里进行处理,只能通过抛出异常来解决,切面捕捉到异常以后,返回 @Around("within(com.*.controller..*) &amp;&amp; @annota...

2018-03-26 15:04:11 5442

原创 log4j日志的配置文件详解

#DEBUG &lt; INFO &lt; WARN &lt; ERROR &lt; FATAL#此句为将等级为INFO的日志信息输出到stdout和R这两个目的地,stdout和R的定义在下面的代码,可以任意起名。# 等级可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,如果配置OFF则不打出任何信息,如果配置为INFO这样只显示INFO, WARN, ERROR...

2018-02-12 10:10:48 413

原创 密码存储以及网络传输的加密算法-Base64加密加盐后MD5的加密

一、项目背景 在使用HTTP协议传输文本,接入第三方接口时,同时需要一个验签环节,在数据库密码入库是也需要一个加密环节,为了提高安全性,可以采用BASE64加盐后再进行加密的算法。二,实现原理 如果是验签,双方约定一个共同的盐值,针对要传输的字符串进行BASE64加盐加密,再对MD5进行加盐加密,即可保证安全性。三、实现代码3.1 base64加密工具类import

2018-02-06 16:56:58 2636

原创 Spring的事务回滚机制

Spring事务管理是根据异常来进行回滚操作; Spring与Mybatis整合时,虽然在Service方法中并没有check异常,但是如果数据库有异常发生,默认会进行事务回滚。 Spring 如果不添加rollbackFor等属性,Spring碰到Unchecked Exceptions都会回滚,不仅是RuntimeException,也包括Error。 如果在事务方法中捕获异常并进行处理,

2017-11-28 14:50:51 4780

原创 Java使用465端口发送邮件(绕过25端口限制)

1.项目背景此前使用25端口发送邮件时在本地可以跑,但是阿里云封掉了25端口,导致部署在阿里云上面的项目不能正常发邮件。进过比较,我选中更改端口为465解决这个问题。赵阿里官方解除25端口限制太麻烦了。2.发送邮件源码其中的环境变量由开发,测试,生产 3种环境,我是通过不同编译环境获取到配置文件中不同的值,对应dev,test,aliyun三种。源码如下:/** * @a

2017-11-09 20:45:48 11263 6

原创 按金额平均批量分配订单算法思考与实现

1.项目背景最近遇到需要从经理批量分配订单到主管,主管批量分配订单到人员,我们只需要设计一种算法经理到主管(主管到人类似),尽量保证经理分配到主管的订单的平均金额与数据库里面的平均金额相等。我为此设计了两种算法如下,仅供参考。2.算法以及java实现2.1 算法12.1.1 算法思路此算法是先传入所有组(一组对应一个主管)需要分配的订单数,按分配的订单数从大到小排序,比

2017-11-01 16:57:54 5017

原创 Spring MVC参数绑定失败

1.客户端请求到达Spring MVC的Controller层以后,调用HandlerAdapter的方法进行方法以及参数绑定,其中这个绑定过程是自动完成的。此注解默认已导入将json数据转换为Java对象的bean <bean id="stringConverter" class="org.springframework.http.converter.StringHttpMe

2017-10-16 15:47:29 794

原创 从web.xml进入Spring MVC 源码分析(4.x)

1.从web.xml文件说起   1.1  web.xml的作用web.xml是web工程的配置文件,容器加载web工程时,会首先从WEB-INF中查询web.xml,并加载其中的配置信息,可以将web.xml认为是web工程的入口。初始化Java EE 工程的配置信息一般会涉及以下方面:比如Welcome页面、servlet、servlet-mapping、filter、listen

2017-09-29 12:32:32 487

原创 对HTTP header以及浏览器上传数据格式的部分理解

1. HTTP请求的头文件1.1  Accept: text/html 表示浏览器可以接受的请求类型,  Accept: */*  代表浏览器可以处理所有类型,(一般浏览器发给服务器都是发这个)1.2 Accept-Encoding 浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate)1.3 Accept-Languag

2017-09-28 10:32:01 2031

原创 Java代理模式 (静态代理,JDK动态代理,CGlib动态代理)

一. 代理模式简介Java中代理模式分为静态代理,JDK动态代理,CGlib动态代理三种。下面针对每一项具体介绍。代理是为了在方法前后做一些操作,比如记录方法的运行时间,记录,拦截等等。二. 静态代理静态代理就是使用一个代理类可以用来完成原本需要在实现类调用的方法前后添加操作,比如需要调用sayHello(name)方法,此时,代理类生成了原实现类HelloImpl的实例,并调用,从m

2017-09-27 12:17:48 373

原创 Spring AOP的实现策略与使用

1.AOP的实现策略(1)Java SE动态代理:    使用动态代理可以为一个或多个接口在运行期动态生成实现对象,生成的对象中实现接口的方法时可以添加增强代码,从而实现AOP。缺点是只能针对接口进行代理,另外由于动态代理是通过反射实现的,有时可能要考虑反射调用的开销。(2)字节码生成(CGLib 动态代理)    动态字节码生成技术是指在运行时动态生成指定类的一个子类对象,并覆盖

2017-09-21 00:38:07 313

原创 阿里Druid连接池配置

1.启用Druid连接池1.基于Maven配置如下(Gradle类似),pom.xml引入如下依赖: com.alibaba druid ${druid-version} 2.配置数据库连接 <bean id="dataSource" class="com.lianqian.urs.util.UrsDruidDataSource" d

2017-09-20 16:43:32 2069

原创 线程池的作用,应用场景与原理

1.线程池的作用 1.减少在创建和销毁线程上所花的时间以及系统资源的开销    2.如不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存以及”过度切换”。线程池,就是在调用线程的时候初使化一定数量的线程,有线程过来的时候,先检测初使化的线程还有空的没有,没有就再看当前运行中的线程数是不是已经达到了最大数,如果没有,就新分配一个线程去处理,就像餐馆中吃饭一样,从里面叫一

2017-09-19 20:01:16 1800

原创 mybatis使用技巧

1.返回值设置为实体Bean最好,也可以使用hashmap等接收,但不方便。2.在User.xml可以定义传入类的别名,方便快捷,不需要传入类的全名,使用方式如下:<typeAlias type="com.someapp.model.User" alias="User"/>3.通常情况下,mybatis可以自动匹配实体类与数据库表的列名。也可以使用as来使数据库列名与实体类属性

2017-09-19 17:10:54 346

原创 postman使用注意事项

test

2017-09-19 15:15:14 526

空空如也

空空如也

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

TA关注的人

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