自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 docker 多网卡指定网卡出网

docker 利用iptables 实现多万网卡分发流量

2024-06-28 12:40:13 524

原创 nginx+rsyslog+kafka+clickhouse+grafana 实现nginx 网关监控

上面都配置完了之后可以先验证下,保证数据最终到ck,如果有问题,需要再每个节点调试,比如先调试nginx->rsyslog ,可以先不配置kafka 输出,配置为console或者文件输出都可以,具体这里就不写了。这里做了一个类型转换,因为nginx,request-time 单位是s,我想最终呈现在grafana 中是ms,所以这里做了转换,当然grafana中也可以做。kafka 相关部署这里不做赘述,只要创建一个topic 就可以。

2023-12-29 17:45:41 1866 1

原创 spring 运行时替换 单例bean 实现

spring bean 运行时动态更换,实现类似热部署

2022-06-10 15:49:55 2941 2

原创 大白话告诉你jni注入漏洞

前言前两天又看到fastjson 暴雷说有漏洞,加上之前的log4j好像也是有jni漏洞,所以空闲时候去研究了下这个玩意,发现网上说的不是很清除,对我这样的小白来说有点难懂,所以写篇文章记录下本篇文章不作为专业解读,只是方便理解环境jdk 1.8 251为了方便复现,最好选择版本低的什么是jniJNDI 全称为 Java Naming and Directory Interface,即 Java 名称与目录接口名称服务,简单来说就是通过名称查找实际对象的服务目录服务是名称服务的一种拓展,除

2022-05-31 15:32:32 874

原创 微信内置浏览器校验限制绕过

前言微信有些页面在浏览器打开和微信内打开是不一样的,因为做了环境的校验浏览器访问 https://shminorshort.weixin.qq.com/security/readtemplate?t=login_verify_entrances/w_tcaptcha&wechat_real_lang=zh_CN&aid=2000000038&clientype=1&lang=2052&apptype=undefined&captype=7&dist

2022-05-13 11:37:06 12313 1

原创 mac m1搭建java opencv 环境(遇到的坑记录)

前言mac m1 环境搭建 opencv 环境遇到的坑不少,特此记录opencv 版本:4.5.5踩坑安装官网有详细教程但是版本却只有3.x概括如下:安装ant:brew install ant修改brew中opencv的配置:brew edit opencv将 -DBUILD_opencv_java=OFF 改成 -DBUILD_opencv_java=ON最终构建:brew install --build-from-source opencv最后构建也确实能成功,但是这个关键的

2022-04-26 10:41:50 4419

原创 spring 事务源码分析(四)传播机制总览

前言本文主要回答一个问题,spring 如何处理事务的隔离级别事务传播级别事务是逻辑处理原子性的保证手段,通过使用事务控制,可以极大的避免出现逻辑处理失败导致的脏数据等问题。传播级别定义的是事务的控制范围org.springframework.transaction.annotation.Propagation其中嵌套事务单独写篇博客叙述源码分析在 spring 事务源码(二)一文中已经提到了一个关键的方法org.springframework.transaction.support.A

2021-12-30 14:33:51 348

原创 Mybatis-plus 多表联查实现(非手写sql)

项目地址https://gitee.com/hanscoding/mybatis-plus-helper引入依赖 <dependency> <groupId>io.github.githgf</groupId> <artifactId>mybatis-plus-helper</artifactId> <version>0.0.2</version&gt

2021-12-17 16:10:38 2724 1

原创 mybatis-plus 自定义UpdateWrapper(二)实现列的case set

前言小编在crud业务中会遇到case set的场景,update `TD_XXX`set`status` = case `id` when 12 Then 1 when 13 Then 2 when 14 Then 1 endwhere `id` in (12,13,14)一般来说都是写在xml中,但是其实mybatis-plus也可以<dependency> <groupId>org.mybatis.spring.boot&l

2021-11-18 09:59:31 1378

原创 mybatis-plus 自定义UpdateWrapper(一)实现列自增

前言crud业务中难免会有列的自增、自减,如果项目中集成的是mybatis-plus的话不做任何修改大概只有两种方案使用UpdateWrapper拼接直接写原生sql到xml中但是两种方法都不优雅,因为都需要写死列名字(如果优雅我还写啥文章。。。)那么我就尝试能够实现自定义的LambdaUpdateWrapper<dependency> <groupId>org.mybatis.spring.boot</groupId>

2021-11-17 13:55:33 6123 2

原创 mybatis-plus 自定义QueryWrapper(一)实现查询函数

前言以下所有代码和观点来源均为 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.1</version> </depend

2021-11-08 16:40:01 6292

原创 spring 事务源码(三)如何保证被@Transactional标记方法中的所有sql都在一个事务内

核心问题spring 如何保证被事务注解标记方法中的所有sql都在一个事务内测试代码还是之前的代码,但是这次得改下,想办法让sql抛出异常<select id="getNum" resultType="java.lang.Integer"> select count(*) from ss where 1 = 1; </select> @Transactional public void test(){

2021-09-08 16:44:41 998

原创 spring 事务源码(二)事务切面详细

前言上文说到事务注解处理的切面如何注入、解析,这篇文章说下具体事务切面如何运行事务测试代码环境jdk 1.8spring boot 2.0.4mybatis-plus-boot-starter 3.4.1@Componentpublic class WebHelper { @Autowired CourseItemServiceImpl courseItemService; @Transactional public void test(){

2021-08-26 10:38:44 746

原创 spring 事务源码(一)事务切面注入、解析

前言最近在研究事务的相关源码准备为项目中业务场景进行改造,写个博客记录,顺便分享如何查找调试源码的方法准备调试代码@Componentpublic class WebHelper { @Transactional public void test(){ System.out.println("test"); throw new RuntimeException(""); }}源码分析首先看事务注解什么时候解析,并且注入切面这里分享

2021-08-22 10:43:56 896

原创 spring 多租户数据源实现事务一致性

前言之前我写了一篇spring boot 集成 mybatis-plus实现多租户数据源本来用的很爽,但是最近需要实现不同租户之间的事务一致性,所以讲解决方案记录如下大致思路先假设有两个租户 A,B,分别需要执行方法 ma(),mb()伪代码如下try{ ma(); mb();}catch(..){ .....}首先我第一时间想到用编程式事务操作,编程式事务能可控制的让所有事务一起提交、一起回滚,如果用平常使用的@Transactional 注解是不行的,因为执行的sql对应的数据

2021-08-19 18:05:39 437

原创 银行家算法及其c++代码实现

最近小编在学习自考操作系统的过程中,了解到了一种可以避免进程死锁的算法-----银行家算法如果您已经知道什么是银行家算法,只想看代码,直接到 源码部分什么是银行家算法银行家算法是操作系统中避免死锁的一种算法什么是死锁和我们线程死锁类似,不同线程持有对方的锁,多个线程又不能释放锁,即产生死锁类似上图,P1 申请 输出设备,但是输出设备被P2占有,P2又申请输入设备输入设备又被P1占有形成回路如何避免呢?和简单只要在资源分配前检测当前系统是否处于安全状态,是否能被分配,分配之后系统是否还是安

2021-08-05 14:45:18 2647

原创 基于frp实现将安卓手机变成代理服务器

公司有一个业务场景,需要利用分布在全国各地的一些手机作为代理服务器拿到这任务的我是一脸懵逼的,这tm都行。。。不过这让我让我想到之前用的内网穿透 frp内网穿透大致原理可看我之前文章https://blog.csdn.net/weixin_39660224/article/details/119185186?spm=1001.2014.3001.5501搭建环境条件公网服务器安卓手机frp 服务端包和客户端的包公网服务器配置下载frp 和linux amd64位的包 https:/

2021-07-28 17:56:02 6625

原创 大白话告诉你内网穿透原理和验证

内网穿透到底干啥的这里不做详述,这篇文章主要是讲这玩意怎么做的分析网上有很多原理图,但是说实话鄙人天资愚钝没咋看懂,在网上疯狂百度和个人的验证之后,得出如下简图其实很简单想让我们内网的服务能被外网访问到,只需要一个能被公网访问的服务器就行内网服务器和外网的服务器建立tcp通讯用户想访问内网服务器时候,需要先请求外网服务器,外网服务器再将请求的数据原样推送给内网的服务器同理当内网服务器要将数据推送给用户,也是原路返回,先给外网服务器,然后外网服务器在将数据给用户验证验证过程其实也非常简

2021-07-28 17:34:00 1744

原创 spring boot mail发送邮件异常解决

问题描述DEBUG: JavaMail version 1.6.1DEBUG: successfully loaded resource: /META-INF/javamail.default.providersDEBUG: Tables of loaded providersDEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,co

2021-06-02 16:59:27 4345 6

原创 mybatis plus+spring boot 多租户动态数据源实现方案

需求在很多具体应用场景中,我们需要用到动态数据源的情况,比如多租户的场景,系统登录时需要根据用户信息切换到用户对应的数据库。又比如业务A要访问A数据库,业务B要访问B数据库等,都可以使用动态数据源方案进行解决。作为合格的程序员第一时间肯定是去百度,但是呢既然我写了这篇博客那么肯定是没能很好的集成到我项目中,网上写的一篇文章说基于spring的AbstractRoutingDataSource 就可以实现,但是我试了不行,因为我自己项目不是用的jdbcTemplate 也可能是我使用姿势不对,反正没有用上

2021-04-12 17:50:44 964 2

原创 feign 获取请求真实目的ip地址

需求最近小编的项目中出现了很多feign 调用出现 Read Time out 的异常,但因为没有集成链路追踪的第三方框架,查不到原因。所以想到打印请求的ip地址,判断是指定的服务器出现的问题还是所有服务器都有这个问题,但是feign 打印异常日志不会显示目的端地址,这就很难受了没办法只能自己改装下大致想法需要改装肯定需要知道feign 具体请求调用的源码,大致需要知道下面几个问题feign 集成了ribbon 如何在负载均衡之后获取真实的ip地址feign 实际请求 http 源码在哪能否替

2021-04-02 14:57:02 8078 2

原创 【jenkins 异常】org.eclipse.jgit.errors.InvalidObjectIdException: Invalid id xxxxx

问题描述前段时间遇到一个jenkins 构建失败的问题,详细堆栈如下FATAL: Invalid id: refs/remotes/origin/origin/test^{commit}org.eclipse.jgit.errors.InvalidObjectIdException: Invalid id: refs/remotes/origin/origin/test^{commit} at org.eclipse.jgit.lib.ObjectId.fromHexString(ObjectId.

2020-11-29 22:24:40 1130

原创 mybatis 打印自定义完整日志

需求项目中遇到需要打印sql语句日志,还有其执行时间,还要把sql语句美化下(把 ?替换成实际的参数、换行符删除),目的在于打印sql语句时加入我们自己的日志关键字。比如说项目中集成了链路追踪功能,那么我们想打印sql 语句时,能如下输出:span:xxxx, [SQL:......] 执行耗时 [.. ms]这样如果我们有集成了es的话后期出问题查日志很方便,只要有这个链路id,我们就可以找到所有这个链路中执行的sql(异步除外)这个肯定是用mybatis plugins没错了,但是具体sql

2020-11-14 18:16:46 1807

原创 自定义 feign 调用实现 hystrix 超时、异常熔断

需求描述spring cloud 项目中feign 整合 hystrix经常使用,但是最近发现hystrix功能强大,但是对我们来说有些大材小用。首先我只需要他的一个熔断作用,就是说请求超时、异常了返回 FeignClient注解中配置的fallback,不需要非阻塞操作、也不需要重试,hystrix 调用feign时候做了线程池隔离处理,这样增加了项目复杂度(线程池参数配置、线程少了请求服务直接拒绝,多了线程得管理。。。)目前feign 超时之后是直接抛异常的,这样的话虽然是及时熔断了,但是正常的程

2020-11-05 11:25:23 1618

原创 Feign 集成 Hystrix实现不同的调用接口不同的设置

问题描述小编在写项目时遇到一个需求:假设现在有三个项目A、B、C,其中A、B作为服务提供方,C作为调用方,需要实现C在调用A、B时实现不同的超时时间,比如C调用A时超时是2s,调用B时超时是3s。。。。本来以为是很简单的事,但是面向百度编程时发现没有搜索到,官网也没有,这就难受了,小编属于那种不会主动研究源码的,都是项目有需要或者说看到别人改造了啥玩意特别有意思,否则都不去喵一眼,现在没办法只能研究一波源码,手动改造。正文正文分为三个部分描述源码研究提出方案方案实现源码研究先说说如果

2020-11-03 20:46:03 1099 2

原创 服务器配置ssh 登录,取消账号密码登录

服务器配置ssh 登录,取消账号密码登录准备环境:被连接的远程服务器:(A) IP : xxx.xxx.1xx.xxx 密码:1234连接的远程服务器:(B) IP : xxx.xxx.xxx.xxx 密码:1234在(B)服务器端配置1.生成公钥秘钥:s ssh-keygen 生成的秘钥文件在/root/.ssh/下2.添加需要连接远程服务的服务器的认证 ssh-copy-id -i /root/.ssh/id_rsa.pub root@A服务器ip地址 会让你输入服务

2020-09-23 10:55:06 1431

原创 MybatisPlusExcepection: can not find lambda cache for this property [XX] for entity [xxx]

项目有用到mybatis-plus还是挺香的,但是遇到一个坑com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: can not find lambda cache for this property [dbName] of entity []意思是实体类enetity及其字段没有缓存或者说指定字段没有缓存这个需要具体问题具体分析,得先找到在哪缓存的?什么时候缓存的?问题和解决方案我这里的问题是因为继承太多正常是一个mapp

2020-09-17 17:57:51 13564 6

原创 Spring Aop 源码笔记和源码阅读个人技巧分享

概述用过spring 框架的小伙伴都知道,aop对spring 的重要性,学习源码必不可少,文本记录一些源码跟踪源码技巧学习心得,需要纠错和改正的请在下方留言aop 原理大致分析这个网上一搜一大堆,重复阐述没有意义,说下我个人理解,关键两个字 代理什么叫代理,和银行一样,你干啥都要经过人家的手,这样只要你钱有变动银行都知道了spring 也是一样,假设有个类public class A{ void test(){ system.out.println("test run"); }}

2020-07-10 18:43:14 322 2

原创 java反编译jar包并修改class文件重新打包

前言这两天碰到一个需求:需要修改一个jar包中的逻辑代码,并且重新打包本来是很简单的问题,但是因为这个jar包不是可执行的jar包(没有main方法入口),jar反编译之后又是不能通过idea重新打包,因为jar是混乱的所以费了点时间,在此记录下解决思路反编译jar包首先用一些反编译工具类似 jad-gui 之类的 ,将项目反编译成java文件包示例的jar包并不是业务真正使用,只是写博客demo,假设这个包就叫 demo.jar这时候导出为java文件即可用javac 编译成clas

2020-06-12 19:23:10 7556 1

原创 elasticsearch+kibana 日志系统配置java日志解析和过滤无用字段

前言elk日志系统用法此篇文章不做描述,一般来说elk是elastic、logstash、kibana,但是小编所在公司不是大公司,logstash如果和elastic放在一台服务器中,一般的服务器拖不动,按照之前的经验如果数据量大,内存至少在8g之上,那么就不配置logstash了,elastic内置的解析器能实现一般的业务要求了具体操作elastic配置ingest(解析器)inges...

2020-03-21 16:30:58 1024

原创 jenkins项目迁移

jenkins利用rest api项目迁移引言具体方案具体实现注意事项引言jenkins 怎么玩这里不做重复,主要是说jenkins迁移的问题,差了网上的方案都是复制整个jobs、users、plugin目录还有config.xml,如果数据不多还好但是jobs如果保留了很多的构建历史,那么真个jobs目录可能会达到10g甚至更多,这里提供一个相对来说优雅的方案具体方案Jenkins 提供...

2019-12-26 15:35:57 1589 6

原创 java Selenium 滑块验证破解

目标前两天发现个好玩的工具Selenium,可以模拟人进行游览器操作,赶紧趁热打铁玩个小demo,滑块验证现在使用普遍,就是为了验证是否是机器人,但是这个是可以破解的,且听我娓娓道来思路计算滑块距离模拟人进行滑块拖动解决前提Selenium 官网下载jar包,先搭建环境第一个问题我在另一篇博客已经详细描述现在是第二个问题如何拟人化的拖动滑块,滑的太快不行,太慢也不行,这里我提...

2019-11-20 15:35:05 3717 7

原创 windows java opencv怎么玩

opencv windows环境搭建opencv 干啥的自行百度,这里只说怎么玩windows环境的首先官网下载下载之后是个exe,打开运行安装即可,目录结构如下idea Java使用opencv导入jar包在启动的jvm参数中加上,这是要引入dll依赖-Djava.library.path=E:\programe\opencv\opencv\build\java\x64运...

2019-11-20 15:10:18 494

原创 java opencv 计算滑块横移距离

目标滑块验证是现在用的较为普遍的验证是否为机器人的方案,也相对其他验证来说比较好破解的,因为只需要计算出滑块横移距离就行思路想要计算距离得知道如下几个数据,假设图片左下角为坐标原点O滑块在图中的的起始坐标(图中B点x坐标)缺口在原图中的坐标(图中A点坐标)第一问题好解决下html代码就知道了主要是第二个问题得通过某种方式得到原图中缺口的位置,再根据比例缩小坐标值就行解决过程...

2019-11-20 15:00:48 3513 4

原创 nacos更换数据库为mysql

nacos默认的是嵌入式的数据库dery,不方便观察数据,再0.7+之后版本都可以支持自定义数据库要求数据库版本5.6.5+先将数据备份2. 将conf文件夹下的 nacos-mysql.sql 执行下nacos设置数据库,conf/application.properties文件spring.datasource.platform=mysqldb.num=1db.url...

2019-09-26 15:10:51 5843 6

原创 java常用数据类型

java常用数据类型本人自学java小白一个,现在就是作总结,以备几天后的面试java常用的数据类型可以分为:基本数据类型和Date、String一、基本数据类型:四大类(图片使用XMind做的用了感觉还不错)不是很详细但是新手入门看看也够了如图所示,基本数据类型也分四大类:字符型、布尔型、浮点型、整数型,带星号的是基本类型的封装类,主要提供对基本数据类型的相关操作,简单来...

2019-09-10 10:40:43 601

原创 面向对象三大特征之封装

面向对象的编程思想,在java中任何事物都可以是对象,比如说猫、狗、猪他们都是动物,那么就可以将动物这一种类定义为对象 任何事物的对象化带来的好处就是在开发时高内聚、低耦合等等(只要知道面向对象很好就行) 而在对象中主要的组成部分是:属性、方法 比如说猫狗猪的共同属性就是有身高、体重、颜色等等,能吃能睡 代码如下: public class anim

2019-09-10 10:40:11 201

原创 面向对象三大特征之多态

先来一波解释:多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改

2019-09-10 10:40:00 214

原创 面向对象三大特征之继承

上次我总结到了封装,今天来总结下继承 继承顾名思义就是儿子继承老爸的东西,在java中我们为了减少代码的重复性、复杂度,减少系统冗余等等(其实也就是偷个懒,省时省力) 换而言之什么时候用呢,就是存在多个类中存在相同属性和行为时,将这些内容抽取到单独A类中,那么多个类无需再定义这些属性和行为,只要继承A类即可。A类即为父类,其他继承A类的类就是子类,子类可以继承父类中非私有的属性和方法这之

2019-09-10 10:39:49 239

原创 抽象类、接口、内部类

**抽象类** 抽象方法就是没有“{}”的方法,在抽象方法前面修饰用abstract 拥有抽象方法的类就是抽象类,抽象类要使用abstract关键字声明。 代码如下所示:abstract class A{//定义一个抽象类 public void fun(){//普通方法 System.out.println("存在方法体的方法"); }

2019-09-10 10:39:28 172

空空如也

空空如也

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

TA关注的人

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