自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

偶尔记一下 - mybatis.io

没事看看 - MyBatis工具

  • 博客(438)
  • 资源 (7)
  • 收藏
  • 关注

原创 混淆技术研究笔记(四)反篡改介绍

前面我们已经对代码进行了混淆,想修改代码是很难的,如果我们打包包含的代码很多,为了功能的完整性,我们可能会要求核心代码不允许被覆盖,被混淆的代码通过某些工具还是可以改名的,比如把超长的名字改短,然后再覆盖代码,有很多手段能绕过,为了再增加一些难度,本文考虑使用RSA对称加密对混淆后的代码进行加密,不允许修改混淆后的类名,不允许修改文件内容。使用文件校验和:可以使用文件校验和算法(如MD5或SHA-256)计算JAR包的校验和,并将校验和值保存在可信任的位置(如服务器)。混淆后的代码更难被篡改和逆向工程。

2023-10-11 09:00:00 348

原创 混淆技术研究笔记(三)多模块混淆

虽然这里很简单,但是我实际要处理的这个项目有4级多模块,总共能打包七十几个模块,而且要和旧版打包方式接近,因此耗时很久,最难的就是上一节介绍的,如果有多种混淆配置(能配置多个,比如 a 依赖 b,b 依赖 c 的情况,如果配置到 a 中,在 a 中对a,b,c进行混淆,确实能实现对 jar 包内容的混淆,但是当执行。发布时,Maven会根据模块依赖顺序计算构建的顺序,第一个构建的模块会走完全部的生命周期后,再对第二个模块进行相同的处理,依次执行完全部的模块。中添加a,b,c的依赖,保证最后执行,在。

2023-10-10 09:00:00 279

原创 混淆技术研究笔记(二)yGuard入门

可以配置多个,但是maven执行的机制导致这里能被有效混淆的只能有1个,后续实现的多模块混淆是利用了Maven生命周期的一些特点实现的。,这个明显没有对应的 jar,这种写法是无法自动解析为对应jar包的,使用Maven时需要注意,官方示例和文档中也有类似的错误。进行了排除,如果你的混淆配置更复杂,优先级无法确定时,上面的配置粒度仍然不够小,应该把。上面相当于两部分规则,第一部分是完全混淆的代码,第二部分是完全保留的代码,当配置多块时,配置,一般情况下不需要细致的具体的方法进行配置,通过。

2023-10-09 09:00:00 1104

原创 混淆技术研究笔记(一)常见工具介绍

第一节先来点简单的内容,下面是通过 AI 生成的几款常见的混淆工具简介及对比。├─module-a├─module-b└─module-c一般只能分别对a,b,c进行混淆,我称这种为单模块混淆。模块之间如果存在调用关系,就要把需要暴露的接口配置为不混淆,否则混淆后互相不认识就无法调用了,这是单模块混淆的最大特点,如果需要被调用,一定会暴露入口。多模块。

2023-10-08 19:30:00 968

原创 虚拟线程最佳实践

虚拟线程的数量众多,赋予了虚拟线程强大的力量:通过允许服务器同时处理更多请求,它们可以更有效地运行以每个请求线程风格编写的服务器应用程序,从而提高吞吐量并减少硬件浪费。我们应该有多少个虚拟线程的问题变得显而易见,就像我们应该使用多少个字符串在内存中存储一​​组用户名的问题一样显而易见:虚拟线程的数量始终等于并发任务的数量在您的应用程序中。尽管您可以将平台线程池视为处理从队列中提取的任务的工作人员,并将虚拟线程视为任务本身,在它们可以继续之前被阻塞,但计算机中的底层表示实际上是相同的。

2023-09-20 21:17:27 834 2

原创 Virtual Threads 虚拟线程

平台线程被实现为操作系统 (OS) 线程的薄包装器。平台线程在其底层操作系统线程上运行 Java 代码,并且平台线程在平台线程的整个生命周期内捕获其操作系统线程。因此,可用平台线程的数量仅限于操作系统线程的数量。平台线程通常具有大型线程堆栈和由操作系统维护的其他资源。它们适合运行所有类型的任务,但资源可能有限。

2023-09-20 20:56:14 462

原创 Linux环境Runtime如何运行子进程?

这是一个Linux环境特定的问题,最简单避免的方式就是在Linux环境制作Linux的安装包。如果遇到类似问题,可以查看jres中所有可执行程序是否有执行的权限。

2023-09-06 08:45:00 433

原创 git fsmonitor--daemon 占用目录,导致无法修改

这个守护进程是一个长时间运行的进程,用于监视单个工作目录并维护最近更改的文件和目录的列表。git status 之类的命令如果只要求对工作目录的更改进行汇总并且可以避免扫描磁盘,则可以提高性能。(或者PowerToys) 发现占用该目录的进程,右键打开。为什么会有大量 git 占用目录呢?右键增加命令行列后如上图所示,大量。此时就可以修改文件名了。

2023-05-22 18:30:00 874 7

原创 WSL2 对外暴露端口

参考文档按照下面的操作步骤进行操作。

2023-04-24 19:30:00 5308 2

原创 MyBatis游标Cursor在Oracle数据库上的测试

除了上面的列出的几种情况下,还试过多种不同的配置,耗时没有比2.5更好。除了MySQL中需要通过作为标记开启流式传输外,其他数据库都是正常的用法,通过控制fetchSize大小来减少内存占用和数据库交互次数。

2023-03-27 23:59:08 1113

原创 MyBatis游标Cursor的正确用法和百万数据传输的内存测试

很早以前为了处理大量数据想过使用Cursor,当时发现没有效果,就没有继续深入。这次为了搞清楚Cursor是否真的有用,找些资料和源码发现是有效果的,只是缺了必要的配置。

2023-03-25 23:23:48 8600 7

原创 多种工具协同创建一个基于CentOS,包含最新版本sysstat的镜像

服务器上部署了sysstat,通过sar可以保留系统监控记录,从服务器下载数据在别处分析时,不是很方便,因此考虑构建一个方便使用的Docker镜像辅助工作。

2023-03-23 12:29:55 434

原创 MySQL JDBC 中 tinyint(1) 处理为Boolean 的代码逻辑

MySQL JDBC 中tinyint(1)类型,在查询时默认会被处理为Boolean类型。

2023-02-16 19:30:00 3345 2

原创 2022 年博客总结

时间过的飞快,孩子也快4岁了,1号带孩子去玩雪,发生了一件有趣的事,发个视频。带孩子玩雪我拉着闺女,闺女拉着儿子,忽略了力的作用,我以为只有我在使劲,实际上闺女需要需要更大的力拉着儿子。走着走着,突然一轻,然后闺女被拽了出去,摔个屁股墩,儿子直接滑了下去。闺女爬回圈中被我带了上去。

2023-01-02 14:53:40 2494 2

原创 事务性发件箱模式:解决数据库事务和消息的一致性

事务性发件箱模式是一种解决数据库事务和消息的一致性问题的方法。它的基本思想是,将消息的发送操作与数据库的更新操作绑定在一起,保证这两个操作是原子性的,要么都成功,要么都失败。在传统的数据库应用中,数据库事务与消息的发送是独立的两个操作,如果数据库事务因为某种原因失败了,消息可能已经被发送出去了,这就导致了数据的不一致性。事务性发件箱模式的目的就是解决这个问题。事务性发件箱模式的实现方式有多种,其中一种是将消息的发送操作与数

2022-12-07 21:00:00 1395

原创 logback 集成 logstash

到这里可以看到,上面提供的完整配置中,没有介绍常见的控制台输出,其他都是必要的配置。input {tcp {}}output {}stdout {}}上面的配置会为每个appname创建对应的索引,在 Kibana 中的 DavaView 可以配置app*索引来查看所有应用的日志。

2022-11-26 12:17:21 3441 5

原创 实时输出Java8 HashMap数据结构

看过 Java 8 HashMap 源码的知道底层数据结构是数组、链表和红黑树实现的,从Debug调试或者序列化输出的都是K,V值,没法直观的看到上述的数据结构,为了直观的看到数据结构存储方面的变化,本文通过动图演示HashMap的结构变化。下面开始,当链表长度超过8时,会转换树,转换树时会判断 table数组的长度是否超过64,由于此时长度为16,会先通过。等到下一次的时候,链表长度超过8,数组到了64,链表就转换为了红黑树(树形结构中B为黑,R为红)。链表长度10的时候,由于数据大小32,会先。

2022-11-23 19:08:16 1104

原创 WSL2 中 docker volume 的位置

想通过file/tail方式收集Docker日志,在linux没找到docker的容器目录,docker inpsect显示的位置也不存在,搜索了一些资料也不对,最后在找到了答案。按照nvRelax的回复,找到了该位置。

2022-11-09 21:30:00 1249

原创 Java 输出 JSON 日志

Java logback JSON 日志集成 fluentd 和 logstash

2022-11-08 22:45:00 764

原创 Java Process:另一个程序正在使用此文件,进程无法访问

debug过程中,修改 getCommands 中的 fileName 时也能成功,有时候修改就不能成功,有时候文件名短的时候能经常性的成功,偶尔会有长文件名的时候也能成功。,错误已经很直接了,但是由于在 Mac 和 Linux 环境没有问题,因此觉得类似的代码在 Windows 上也不存在问题。” 时,这个文件大概率就是你操作的文件,如果找不到其他被使用的地方,可能就是你自己重复使用了同一个文件。最近处理奇怪的问题时,犯了个低级错误,浪费了不少时间,甚至都看了 jdk 底层的 c 代码。

2022-09-28 20:36:18 6295

原创 Java 泛型的读写规则:PECS

PECS 是 “Producer Extends Consumer Super” 的缩写,是 Java 泛型中的重要用法。PECS 就是当你需要遍历某一个类型和子类的集合数据时,集合相当于生产者,此时泛型使用 。当需要往某个类型的集合添加类和子类实例时,集合相当于消费者,此时泛型使用 。对 Java 泛型 PECS 的讲解中,大多是从参数使用的角度来的,本文结合调用传值和参数使用对比来看 PECS 的两种情况。当我们想要遍历读取某个集合时,需要使用 ,用上面类型为例,为了方便查看编译时的错误,直接上截图:

2022-09-26 19:30:00 1271

原创 nginx反向代理location和proxy_pass的映射关系

配置nginx反向代理时,总是需要尝试多次才能配置成功,通过本文做个记录,方便以后查看。

2022-09-04 08:15:00 1681 3

原创 mysql 8.0 树形数据的查询

mysql 8.0 树形数据的查询。

2022-08-24 19:00:00 1376

原创 Mac 上 JMeter 5.3 以后版本乱码

使用的Darklaf2.7.3版本,这个版本不支持中文,从https//github.com/weisJ/darklaf来看,在3.0.0版本可能支持中文了,将JMeter中的jar包直接替换3.0.0是无法启动的,实际上在Mac上用这个主题也没有必要,因此直接切换为其他主题就能解决问题。尝试给JMeter升级Darklaf3.0.0版本后,仍然有中文乱码,由于本地gradle环境有问题,在线上不方便调试gui,所以没有从根本解决该问题。...

2022-07-18 17:15:00 440

原创 云原生简介

云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。云原生计算基金会(CNCF)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。从定义来看,可以简单归纳下面三个方面。...

2022-07-15 07:45:00 433

原创 通用 Mapper 核心实现 Provider 2.1.0 版本发布

核心实现中定义了对象和表之间映射关系数据的结构和获取方式,通过 SPI 支持部分自定义扩展。Provider 中的实现中需要返回 类型的字符串(而不是SQL),通过中间缓存在 中获取真正的 SQL 信息。当前项目没有直接提供可用的通用方法,方法在 mybatis-mapper/mapper( gitee | GitHub )中提供。大版本更新,默认不需要给所有字段添加注解,可以通过 指定字段转换样式,默认空时使用 。想要覆盖默认值时,通过属性 进行修改。在类路径下面创建 配置文件,通过 指定值。

2022-07-09 19:07:22 758 1

原创 Java 通用配置(七)1.1.0 版本发布

最初想直接在 mybatis-provider 项目中添加一个 config 包来实现这些功能,也确实这么做的,后来想要拆出来时发现用到了 mybatis-provider 中的代码,又不想拆了,但是最后为了能直接支持 Spring,又不想让 mybatis-provider 中出现 Spring 依赖,终于拆了出来。在开发 1.0.0 的过程中,耗时最多的地方是版本配置的实现,一开始考虑到版本配置文件可以出现在任何地方,因此需要扫描所有位置来找符合规范的配置文件,然后从配置文件中挑选指定的一个配置文件使用

2022-07-09 18:15:00 457

原创 Java 通用配置(六)扩展示例

前面的三、四、五各实现一种配置方式,只看到了代码,还没看到具体的使用效果,所以这一篇用一个具体的例子来演示如何使用用户配置和版本配置,通过单元测试来查看用法和效果。我们先回到第一篇中的起因,mybaits-mapper 中不想在每个字段上增加注解,因此底层的 mybatis-provider 项目中增加了 样式,在实体上配置样式后,只要字段符合规则,就不需要加注解配置,没有这个功能前相当于字段名和表名是直接映射的,但是多数情况下,我们都希望字段和列能按照驼峰转下划线方式进行转换,所以这种方式就是新版本的默

2022-07-09 12:15:00 553

原创 Java 通用配置(五)集成 Spring

作为一个 Java 通用配置管理,想让用户使用更简单,只需要依赖一个模块就行:如果用户运行在 Spring Boot 环境,就让 Spring Boot 相关配置自动生效,不用再增加和 spring 相关的通用配置依赖。想要做到这一点就需要对可选的功能做好隔离,避免因为缺少类无法运行。想集成 Spring 肯定要先添加 Spring 依赖,因为是可选的支持,所以依赖也必须配置为可选:设置 之后,其他项目在依赖 时不会自动引入 spring 依赖,这就避免了依赖传递带来的污染,如果你在有 Sprin

2022-07-09 08:00:00 743

原创 Java 通用配置(四)版本配置实现

版本配置是提供给模块开发者使用的,模块的使用者可以使用默认的最新版本配置或者通过参数指定要使用的版本配置。模块开发者一般会把配置和代码一起打包,配置文件通常都在 jar 包内,所以需要从 jar 包读取资源,在读取资源时有很多情况需要考虑,如果允许配置文件出现在任意的 jar 包中,就需要对所有 jar 包中的资源进行扫描,就和 Spring 中配置的扫描包一样,指定范围越小,扫描处理越快。综合考虑性能和功能,这里的版本配置中指定了如下的要求:有了上述规则后,就需要确定该使用哪个版本的配置文件。假设项目刚

2022-07-08 18:00:00 497

原创 Spring Cloud 多租户灰度设计

SaaS微服务环境中,每个租户都有自己独立的数据库,当应用服务升级时(通常数据库表结构或数据需要同步改动时),需要保证升级后的租户能够使用升级后的应用服务,没有升级的租户仍然使用旧版本的服务。框架使用 Spring Cloud(不带 Alibaba,抛弃 Dubbo 了)。运行环境为 K8s 集群。K8s 中的部署名(deploy)和 Spring Cloud 服务名()相同,有小bug补丁更新时直接替换部署的镜像,版本不变,此时可以通过让实例数的滚动更新可控即可实现另一个概念上的灰度更新(不涉及后端库的变

2022-07-08 08:00:00 1051

原创 Java 通用配置(三)用户配置实现

用户和版本配置都需要读取文件,但是两者的难度相差很大,本节先来看看用户配置的设计和实现。这里的用户配置是一个抽象实现,当具体模块需要使用时需要继承该类进行实现,抽象类中定义了一定的规范和实现,下面先看抽象类的定义:方法说明在当前方法实现的 中,通过 排除了一些字段的获取,在后续又通过加锁方式对用户配置进行初始化,初始化完成后,在从初始化后的 中读取 。在上面抽象类中,有两个抽象方法,这两个方法是用于具体实现的,第一个 方法,用于定义获取配置文件信息的 key,例如返回值可以是 ,用户配置中会通过

2022-07-07 18:15:00 591

原创 Java 通用配置(二)JVM和环境变量实现

本篇内容先选择了最简单的 JVM 和环境变量进行实现,实现过程中可以了解一个简单的规则,SPI 的配置等等,算是复杂实现前的开胃小菜。直接实现前面定义的 接口就可以,系统变量太简单,以至于没有内容可讲:系统变量 JVM 参数方式是目前优先级最高的配置方式,代码中可以看到是 方式读取的,所以在代码中可以通过 进行设置,只要在 前设置了,读取都会有效。除了代码方式外,JVM 真正常用的地方还是在执行代码时,例如 Spring Boot 可执行 Jar 包运行时:假如我们通过系统服务的方式运行 java

2022-07-07 08:15:00 1862

原创 Java 通用配置(一)设计

有用户提出 mybatis-mapper 能不能不在字段上加这么多注解,很麻烦,陆陆续续有不少用户都提到了这个。最初设计必须加就是为了防止 tk-mapper 中存在的配置问题,都按这种标准去使用,就不会遇到类似下面的问题:为了解决上面的问题,tk-mapper 中有很多对应的配置,大量的配置会使新人上手变的困难。增加配置后,在不同框架中集成时配置方式不同,这又会产生大量配置不生效的问题。mybatis-mapper 中虽然需要大量注解,但是可以通过代码生成器自动生成,如果是全新项目还好说,已有项目想集成,

2022-07-06 19:13:41 1626

原创 Spring Boot 容器镜像分层构建

本文参考文档Spring Boot 容器镜像Spring Boot Maven 插件参考指南本文使用 Maven 进行配置,Gradle 可以参考下面文档Spring Boot Gradle 插件参考指南场景最常见的是容器镜像,将依赖、代码、配置分层后可以利用容器镜像层缓存机制加快构建和下载,这个场景使用分层是最优最简单的。k8s 移除 Docker 后,文档中的 Docker 都去掉了…现在也把常说的 Docker 镜像 改成了 容器镜像还有一个场景是一开始没预料到的,.

2022-05-20 20:30:00 539 1

原创 Skywalking Java 插件开发太简单了

在写 Skywalking Java 插件开发注意点 时,就感觉不舒服,扩展不应该这么麻烦,既然 skywalking-agent 中存在第三方的类,直接用不就好了吗,何必用 maven-shade-plugin 这么麻烦。经过验证,确实很简单。pom.xml 依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht

2022-05-10 11:05:32 1305

原创 【过时】Skywalking Java 插件开发注意点

官方文档:Java Plugin Development Guide官方插件: https://github.com/apache/skywalking-java正常按照官方文档操作后,测试时,可以参考官方 SkyWalking的远程调试。我直接把插件引入到项目中后增加断点即可调试(需要注意和 agent plugins目录中的 jar 一致)。测试过程中一直没有效果,debug才发现在执行过程中抛出了异常,异常没有输出,只能 debug 看到,第一次遇到的错误是 net.bytebuddy 相.

2022-05-09 19:00:00 994

原创 Spring Boot Jar 包启动时如何加载外部资源

在项目有读取配置文件的地方,项目打包为 jar 后,无法从外部替换默认的配置文件,通过 Spring Boot 一系列的配置可以解决该问题。直接谷歌搜索查到:Spring Boot Executable Jar with Classpath其中一个 Peter Tarlos 的答案是完整的,本文的内容也是以这里为起点,通过查找官方文档来说明如何实现。关键的 PropertiesLauncherExecutable Jars Spring Boot’s executable jars, their

2022-04-06 23:22:11 5379

原创 通过 GitHub Actions 自动发布项目到 Maven 中央仓库

基础的 Maven 配置参考官方文档:https://central.sonatype.org/publish/publish-guidehttps://central.sonatype.org/publish/publish-maven本文对应的演示项目:https://github.com/abel533/autodeploy-maven-central配置 Maven 插件上面官方文档也有用法。插件详细文档: https://help.sonatype.com/repoman

2022-04-04 23:01:48 1234

原创 OpenResty实现按租户灰度发布

K8s上的一套SaaS服务,每个租户都有自己的独立数据库,前后端分离,后端微服务,前端Nginx。当SaaS服务升级的时候,需要按照租户逐个进行升级,因此升级过程中需要逐步将租户迁移到新的服务上,后端基于 Spring Cloud Gateway 实现,前端通过 OpenResty 结合 K8s Service 实现。OpenResty 配置代码基础代码如下:worker_processes 1;error_log logs/error.log debug;events { work

2022-03-28 21:30:00 3266

jp.gr.java_conf.ussiy.app.propedit_6.0.3.zip

Eclipse属性资源文件插件。

2016-05-12

SQL转Java代码小工具

可以将多行SQL转换为程序可用的字符串。详情看博客相关文章。

2013-06-08

Excel通用导出excel文件

Excel 通用导出 excel 文件

2013-02-25

vote 投票功能 纯html

附件,相关文章介绍,查看本人CSDN博客:div+css+jQuery简单实现投票功能..

2012-08-15

读取Excel的POI jar包

读取Excel的必备JAR包,可以从poi官方下载。

2012-03-17

Excel通用读取模块源码和JAR

由于平时经常需要处理读取Excel,所以写了这样一个小模块来处理读取Excel... 关于写出Excel的功能,以后再写一个通用的。

2012-03-17

w3school完整版-最新编译-2011-10-7

w3school完整版-最新编译-2011-10-7 和网站上内容一样,方便查看。

2011-10-07

空空如也

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

TA关注的人

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