- 博客(71)
- 资源 (1)
- 收藏
- 关注
原创 Liquibase preConditions 执行前判断详解
用于Liquibase执行前的判断, 可以附加到或changeSet中,以控制数据库的更新和执行。以下是使用的几个场景:记录changelog的作者在创建changelog时的假设。强制运行changelog的用户不违反这些假设。在执行不可恢复的更改(例如dropTable)之前,请执行数据检查。根据数据库的状态来控制运行哪些changesets和不运行哪些changesets。具体描述和使用也可查看官网。
2026-01-20 17:31:41
616
原创 SpringBoot 集成 Liquibase
Liquibase是一个数据库修改的解决方案,使您能够从开发到生产更快、更安全地修改和发布数据库变更。Liquibase有多种使用方式, 直接集成到SpringBoot中是比较简单的一种, 它会在SpringBoot启动时自动检测运行, 省略了升级时手动运行Liquibase的步骤.更详细的描述请查看官网。
2026-01-20 17:29:53
728
原创 Spel的用法
SpEL即Spring Expression Language, Spring表达式语言, 能够在运行时构建复杂的表达式, 读写对象属性, 调用对象方法等等,与Spring完美契合. 赋予了Java动态功能, 利用其动态特性, 可以实现审批流等等。还有其它运算, 如算术运算、逻辑运算、比较运算、类实例化、instanceof、内联List、内联数组、集合投影、集合选择…
2025-12-22 09:58:16
275
原创 Linux 防火墙开放/限制端口
本文介绍了Linux系统中管理防火墙端口的两种主要方法:iptables和firewalld。使用iptables时,可通过命令查看、添加或删除规则来开放/限制端口,并支持TCP/UDP协议,修改后需保存规则。firewalld则通过firewall-cmd工具管理端口,可针对不同区域设置永久性规则,修改后需重载生效。两种方法均可实现端口访问控制,用户可根据系统环境选择合适的工具。
2025-12-20 08:42:43
816
原创 java 读取特定数据超时返回默认值如何设计?
我们可以通过多种方式实现,包括使用Future、CompletableFuture、线程池配合超时控制,或者使用CountDownLatch等同步工具。下面介绍几种常见的实现方式。我们面临一个场景:需要读取某个数据,如果操作超时,则返回特定数据。这种场景在分布式系统、网络请求、数据库查询等中非常常见。注意:中断任务不一定能立即停止任务,这取决于任务是否响应中断。因此,我们通常还会设置一个超时时间,避免无限期等待。
2025-11-18 17:33:35
347
原创 java并发 定时读取和清空ConcurrentMap如何保证线程安全?
针对短时高发、时效性不高的数据持久化场景,可以采用原子替换方案:使用AtomicReference原子替换整个ConcurrentHashMap。核心思路是通过getAndSet()方法在定时任务中原子化获取并清空缓存数据,同时其他线程继续写入新创建的Map。该方案实现简单高效,无锁竞争,仅可能在替换瞬间丢失极少量数据(可接受),适合高并发场景。若数据量极大,可采用分段处理方案减少单次处理压力,但实现复杂度较高。相比synchronized锁方案,原子替换避免了全局锁的性能损耗。
2025-11-18 17:11:25
571
原创 Arthas 监控java程序的线程,内存,CPU等
Arthas 是一款非常强大的 Java 诊断工具,由阿里巴巴开源。它能在不修改应用代码、不重启服务的情况下,对线上问题进行实时诊断和排查。后,它会列出当前机器上所有的 Java 进程,你只需要输入对应进程的序号,就能附加到目标应用上,开始诊断。连接到目标应用后,你就进入了 Arthas 的交互界面。下表汇总了最常用和关键的诊断命令,帮助您快速上手。下图是使用脚本方式监控的示例。
2025-11-18 13:42:59
816
原创 ES踩了一坑 script查询与float类型的精度
摘要:在Elasticsearch查询中,发现计算比例时结果异常。查询单个文档时receivableAmount显示6.38,但在区间查询时实际运算值为6。经排查发现是由于字段被错误定义为scaled_float类型且精度设为1,导致数据截断。最终通过调整字段类型并重建索引解决问题,这揭示了ES中数据类型设置对查询结果的重要影响。(149字)
2025-11-14 16:51:14
289
原创 spring-boot和spring-cloud、spring-cloud-alibaba的版本对应关系
spring-boot和spring-cloud、spring-cloud-alibaba的版本对应关系。
2025-11-11 10:49:02
1052
原创 ES查询语法总结
本文介绍了Elasticsearch的主要查询方法: 全文检索:包括Match Query(分词搜索)和Multi-match Query(多字段搜索) 精确查询:涵盖Term Query(精确匹配)、Terms Query(多值匹配)、Range Query(范围过滤)和Exists Query(字段存在性检查) 复合查询:重点介绍Bool Query,支持must、must_not、should和filter逻辑组合 特殊查询:包含Match_all、Wildcard、Prefix和Fuzzy等特殊查询
2025-11-03 15:51:42
1068
原创 ES 使用URL增删改查
本文介绍了 Elasticsearch 通过 RESTful API 进行数据操作的基本方法。内容涵盖创建索引、插入/更新/查询/删除文档等基础操作,以及批量处理和聚合查询等高级功能。详细说明了 URL 结构、HTTP 方法使用,并补充了认证方式的两种实现,包括 URL 明文认证和 Basic Auth 请求头认证。适用于快速上手 ES 的 API 调用,但需注意生产环境避免 URL 明文传递凭证。
2025-11-03 15:46:08
1127
原创 SpringCloud 获取Feign请求的真实IP地址
文章摘要:本文介绍如何通过自定义Feign客户端获取真实请求IP地址。核心方法是替换默认的Feign HttpClient,具体实现包括:1)创建配置类FeignClientConfig,使用自定义的InFeignClient替代默认客户端;2)实现InFeignClient类继承Client.Default,重写execute方法处理请求。这种方案通过拦截Feign请求,可以在执行前后获取请求信息,适用于需要监控或记录请求来源IP等场景。代码示例展示了完整的配置和实现过程。
2025-10-17 14:50:20
245
1
原创 @FeignClient 添加请求头header的4种方法
本文介绍了在Feign客户端中添加请求头的几种方法。对于单个请求,可通过三种方式实现:1)在@RequestMapping注解的headers属性中添加;2)使用@RequestHeader注解传递头信息;3)通过@Headers注解添加固定头信息。对于全局需求,可通过实现RequestInterceptor接口,在apply方法中统一添加请求头,如从当前请求中获取并传递Authorization等头信息。这些方法可根据不同场景灵活选择,满足微服务间调用的头信息传递需求。
2025-10-17 14:48:41
419
原创 java 文件压缩/解压工具类
本文介绍了一个常用的Java文件压缩工具类FileUtil,主要功能包括: 文件复制功能:提供copyTo()方法实现文件复制,支持自动获取文件扩展名和覆盖已存在文件。 ZIP压缩功能: zipFiles()方法可将多个文件压缩为ZIP包 zipFilePath()方法支持文件和目录的递归压缩 zipFolder()方法专门用于压缩整个文件夹 实现特点: 使用Java原生ZIP库处理压缩 支持Windows/Linux路径分隔符处理 包含完善的错误处理和日志记录 使用Hutool工具类简化IO操作 该工具类
2025-10-15 16:51:33
167
原创 java8 最优雅的多线程开发——CompletableFuture
CompletableFuture是Java 8引入的异步编程工具,支持任务编排和函数式处理。它提供runAsync()和supplyAsync()创建任务,join()/get()获取结果。为避免线程饥饿,建议为不同业务创建独立线程池而非使用默认的ForkJoinPool.commonPool()。CompletableFuture支持thenApply()、handle()等方法进行任务链式处理,以及thenCombine()、allOf()等组合多个任务。代码示例展示了如何用thenCombine()
2025-09-30 10:40:41
1023
原创 Spring Boot 事件发布与监听 观察者模式的实际应用
Spring Boot基于观察者模式提供事件发布与监听机制,实现组件解耦通信。核心包括事件(继承ApplicationEvent)、发布者(ApplicationEventPublisher)和监听器(实现ApplicationListener或使用@EventListener注解)。实现步骤:1)创建自定义事件类;2)定义监听器处理逻辑,支持同步/异步执行;3)通过ApplicationEventPublisher发布事件。高级特性包括异步处理(结合@Async和线程池配置)和事务绑定事件,适用于用户注册
2025-09-25 17:22:08
982
原创 spring 自定义注解+AOP切面,控制任务是否执行
本文介绍了使用Spring AOP实现任务开关控制的方法。首先定义了一个自定义注解@TaskSwitch,包含任务名称、开关状态和工作日执行限制等参数。然后通过切面类TaskControlAop实现环绕通知,根据注解参数判断是否执行任务,并支持工作日限制和异常处理。最后在业务方法上添加注解并启用AOP代理即可实现灵活的任务控制。这种方法实现了业务逻辑与控制逻辑的解耦,便于任务的状态管理和执行控制。
2025-09-24 09:14:51
150
原创 Spring注解不生效?
摘要: Spring注解(如@Async、@Transactional)或自定义注解在同类方法间调用时不生效,原因是AOP动态代理仅拦截外部调用。解决方案: 使用AopContext.currentProxy():通过代理对象调用方法,需配置@EnableAspectJAutoProxy(exposeProxy=true)。 抽取方法到新类(推荐):遵循面向接口编程,将注解方法移至独立类中调用。 示例验证: 事务注解失效时,需通过代理调用insert()方法方可回滚。 异步调用失效时,将@Async方法移到
2025-09-24 09:09:06
394
原创 jdk9+ jdk11 如何配置gc日志
JVM日志参数配置指南 本文介绍了JDK9+版本中JVM日志参数-Xlog的详细配置方法。主要内容包括:参数格式说明(四个占位符:日志内容、输出类型、日志标记、输出配置),日志级别表(trace到error),输出类型表(stdout/file),日志标记表(time/pid等)。同时提供了-Xms/Xmx等堆参数配置示例,并指出JDK9后废弃了PrintGC等旧参数。最后附有官方文档链接和日志效果示例图,帮助开发者正确配置JVM日志功能。
2025-09-18 09:27:23
478
原创 jdk下载地址【官网】
本文提供了两个主流Java开发工具包(JDK)的下载链接:OpenJDK和Oracle JDK。用户可通过修改URL末尾的版本号(如11)来获取不同版本的JDK。OpenJDK是开源版本,Oracle JDK则包含商业功能。两个链接均支持Java 11等多个版本下载,方便开发者根据需求选择合适的JDK版本进行开发。
2025-09-18 09:24:07
175
原创 如何禁用笔记本键盘? 笔记本键盘坏了
摘要:笔记本键盘出现自动输入"q"的故障,尝试扣键和禁用驱动无效后,最终通过命令提示符禁用内置键盘成功。具体步骤:以管理员身份运行cmd,输入"sc config i8042prt start= disabled"并重启即可禁用键盘;恢复时使用"sc config i8042prt start= auto"命令。该方法经测试有效,为键盘故障提供了一种解决方案。(99字)
2025-09-18 09:19:16
747
1
原创 Maven 深入profiles和mirrors标签
Maven的settings.xml文件中,<profiles>用于定义可动态切换的全局配置(如仓库地址、环境变量等),通过<activeProfiles>或命令行参数激活,实现多环境隔离;而<mirrors>则用于配置仓库镜像地址,可结合profiles实现不同环境的镜像切换。profiles适用于全局配置,而pom.xml中的profiles仅作用于当前项目。两者配合可提升多环境构建效率,但需注意ID唯一性和敏感信息加密。
2025-09-17 15:11:10
1760
原创 IDEA 不显示Local Changes / Shelf
摘要:在IntelliJ IDEA中设置非模态提交界面,需进入File → Settings → Version Control → Commit,勾选"Use non-modal commit interface"选项。该操作允许在不关闭当前窗口的情况下提交代码变更,提升开发效率。
2025-09-17 15:05:54
465
1
原创 Maven 只打包部分模块,跳过单元测试... 常用打包参数
本文总结了Maven构建工具的常用命令行参数,分为七大类:基础参数(如跳过测试、调试模式)、模块控制(指定构建模块及其依赖)、打包控制(跳过Assembly插件等)、构建输出(自定义目录和文件名)、插件参数(JAR/Shade插件配置)、性能优化(并行构建)以及完整应用示例。同时强调了参数顺序、插件配置优先级和依赖冲突等注意事项,帮助开发者灵活控制Maven构建流程,适用于不同开发场景。
2025-09-17 15:03:17
648
原创 java 根据getter和setter方法的Lambda表达式获取字段名
本文介绍了通过Java的SerializedLambda类实现Lambda表达式方法名获取的技术方案。核心思路是利用Lambda序列化时生成的SerializedLambda对象,通过反射调用其writeReplace()方法获取方法信息。文章提供了完整的代码实现,包括IGetter和ISetter接口定义,以及LambdaBeanUtils工具类,实现了从Lambda表达式获取方法名、转换为数据库字段名和对象属性名的功能。关键方法getSerializedLambda()通过反射机制获取Lambda序列化
2025-09-12 14:20:54
393
原创 java 生成随机数的5种方式 其中SecureRandom可指定算法
本文介绍了Java中生成随机数的多种方法:1. 基础方法(非安全场景)包括Math.random()和Random类,适用于游戏、测试等场景;2. 安全随机数生成使用SecureRandom类,支持DRBG算法,适用于加密等高安全需求场景;3. 多线程环境下推荐使用ThreadLocalRandom;4. 高级技巧包括自定义随机分布。文章还对比了不同随机数生成器的特性,并提供了详细的代码示例和安全配置说明。
2025-09-12 11:09:33
1397
原创 docker 拉取本地镜像
摘要:Docker拉取本地镜像的三种方法:1)使用docker pull从本地仓库拉取;2)通过docker load命令加载tar格式的镜像文件;3)先用docker save导出镜像为tar文件,再用docker import导入。用户可根据实际需求选择适合的方法。(99字)
2025-09-10 17:07:20
350
原创 docker 重命名镜像
在Docker中无法直接重命名镜像,但可通过以下方法实现类似效果:1)使用docker tag命令为镜像添加新标签;2)删除旧镜像后重新以新名称拉取或构建;3)在Docker Compose文件中更新镜像名称并重新部署。这些方法都不会影响容器运行,其中标签方式最简单常用。
2025-09-10 17:06:53
689
原创 docker 设置镜像源
摘要:本文介绍了如何配置Docker镜像加速源。首先创建并编辑/etc/docker/daemon.json文件,添加包含22个国内镜像源地址的registry-mirrors配置项,并设置2个不安全注册表地址。然后执行systemctl daemon-reload重载配置,重启Docker服务后,通过docker info命令验证配置是否生效。该配置可显著提升国内用户拉取Docker镜像的速度。
2025-09-10 17:05:30
183
原创 Springboot整合Jasypt 对配置文件中的密码进行加密
摘要: 本文介绍了使用Jasypt实现Spring Boot配置文件加密的方法。首先添加Maven依赖,配置加密参数(盐值、算法等)。然后提供加解密工具类,支持多种PBE算法,并演示了加密/解密流程。配置文件中敏感信息需替换为ENC(加密结果)格式。为增强安全性,建议自定义加密器,通过实现StringEncryptor接口并指定算法和盐值,避免默认加密规则带来的风险,最后通过jasypt.encryptor.bean配置启用自定义加密器。
2025-09-09 10:23:14
402
原创 jsessionid 到底是什么
摘要 本文探讨了Web应用中URL中出现的jsessionid参数及其作用。jsessionid是J2EE容器用于标识用户会话的变量,通常通过Cookie存储在内存中,但若用户禁用Cookie,则需通过URL重写方式传递(形如;jsessionid=xxx)。为确保会话可用性,开发者应使用response.encodeURL()或response.encodeRedirectURL()方法处理跳转URL,自动适配Cookie禁用场景,维护会话连续性。文中强调了正确处理jsessionid对保障Session
2025-09-09 10:21:24
1311
原创 CAS Session过期时间配置 从源码分析
本文分析了CAS系统中TGT(Ticket Granting Ticket)的过期策略配置机制。通过源代码解析发现,TGT过期策略主要通过CasCoreTicketsConfiguration类实现,提供多种策略:1)当maxTimeToLiveInSeconds和timeToKillInSeconds均小于零时TGT永不过期;2)默认组合策略为8小时绝对过期或2小时空闲过期;3)可配置Hard Timeout强制过期策略。特别指出Remember Me功能会覆盖其他策略,当启用时强制使用HardTimeo
2025-09-09 10:09:10
864
原创 CAS6.3 SSO单点服务搭建
CAS 6.3环境搭建与数据库认证配置摘要 本文介绍CAS Server 6.3的环境搭建与配置过程。环境要求包括JDK11、Gradle 7.0+和Tomcat 9.0+。详细说明了Gradle的配置方法,包括阿里云镜像设置和build.gradle文件修改。通过执行gradlew命令完成项目构建,并配置允许HTTP访问。最后演示了如何集成MySQL数据库进行用户认证,包括添加JDBC依赖、配置数据库连接参数和设置密码加密方式(支持BCRYPT等算法)。文中还提供了测试账号和访问示例,帮助用户快速验证配置
2025-09-08 08:44:03
1877
原创 非对称加密RSA、DSA和ECC Java实现
非对称加密算法主要包括RSA、DSA和ECC三种。RSA基于大数分解难题,可用于加密和数字签名;DSA专注于数字签名验证;ECC利用椭圆曲线数学,在相同安全性下使用更短密钥。文章通过Java代码示例展示了三种算法的实现,包括密钥生成、加密解密、签名验证等核心功能。其中RSA和DSA使用标准JDK库,而ECC需要BouncyCastle提供支持。这些算法在保障数据安全传输和身份认证方面发挥着重要作用。
2025-09-05 10:59:16
374
原创 AES对称加密 Java实现
AES是目前广泛使用的对称加密算法,支持128/192/256位密钥长度。它采用分组加密模式(如ECB、CBC、CTR等)处理变长数据,其中CBC和CTR模式安全性较高。明文不足16字节时需填充(如PKCS5Padding)。Java实现示例展示了密钥生成、ECB/CBC/CTR模式的加密方法,涉及密钥处理、初始向量(IV)生成等关键步骤,通过Cipher类完成加密操作,最后使用Base64编码输出密文。
2025-09-05 10:57:55
485
原创 python爬虫 获取最近7/15/30/40天的天气
这是一个Python天气爬虫脚本,可以从tianqi.com网站获取指定城市的天气预报。主要功能包括:1) 读取city_list.txt中的城市列表(格式为城市名-拼音);2) 自动爬取40天天气数据;3) 将结果写入city_weather.txt文件。使用BeautifulSoup解析网页,requests获取数据,支持修改获取天数(7/15/30/40)。首次运行会自动创建示例城市列表文件。
2025-09-05 10:09:36
264
原创 python 获取必应每日壁纸,并设为桌面
本文介绍了一个Python脚本,用于自动下载Bing每日壁纸并设置为桌面背景。代码支持Windows和Linux系统,主要功能包括:1)获取Bing壁纸URL和版权信息;2)下载保存图片到指定目录;3)添加文字水印;4)自动设置壁纸。Windows系统使用win32api设置壁纸,Linux使用gsettings命令。脚本可配置为定时任务实现每日自动更新。安装依赖库包括requests、Pillow和pypiwin32。代码提供了两种水印添加方式:Linux使用convert命令,Windows使用PIL库
2025-09-05 10:04:55
217
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅