<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Java on 正能量</title><link>https://www.znl.net/categories/java/</link><description>Recent content in Java on 正能量</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><copyright>© 2026 正能量</copyright><lastBuildDate>Sun, 18 Oct 2026 15:28:43 +0800</lastBuildDate><atom:link href="https://www.znl.net/categories/java/index.xml" rel="self" type="application/rss+xml"/><item><title>Kubernetes 上的 Redis 部署</title><link>https://www.znl.net/posts/k8s-redis/</link><pubDate>Fri, 15 Aug 2025 21:56:57 +0800</pubDate><guid>https://www.znl.net/posts/k8s-redis/</guid><description>Pod 数量、Service 可达与 Redis 数据持久化分别解决不同问题；运行用户和 &lt;code&gt;fsGroup&lt;/code&gt; 要与实际镜像及挂载目录匹配。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/k8s-redis/featured.webp"/></item><item><title>Spring自定义Aop实现锁机制</title><link>https://www.znl.net/posts/spring-aop-lock/</link><pubDate>Thu, 13 Mar 2025 10:02:52 +0800</pubDate><guid>https://www.znl.net/posts/spring-aop-lock/</guid><description>锁注解和 SpEL 键只定义调用意图，实际互斥范围取决于锁实现和键生成规则；需要检查调用是否经过代理。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/spring-aop-lock/featured.png"/></item><item><title>Springboot实现读取Nacos中指定的配置文件并实现自动刷新</title><link>https://www.znl.net/posts/nacos-config-refresh/</link><pubDate>Thu, 12 Dec 2024 12:51:17 +0800</pubDate><guid>https://www.znl.net/posts/nacos-config-refresh/</guid><description>启动加载和后续监听回调是两个阶段，应确认首次配置缺失、解析失败和更新触发时分别如何处理。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/nacos-config-refresh/featured.png"/></item><item><title>缓存穿透，缓存击穿，缓存雪崩出现的原因及解决方案</title><link>https://www.znl.net/posts/cache-failures/</link><pubDate>Thu, 12 Dec 2024 11:04:01 +0800</pubDate><guid>https://www.znl.net/posts/cache-failures/</guid><description>先判断访问的是不存在的数据、单个热点过期，还是大量键或整个缓存服务失效，再选择参数校验、空值缓存、互斥重建或降级等措施。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/cache-failures/featured.webp"/></item><item><title>Spring OAuth2 Client通过code获取AccessToken</title><link>https://www.znl.net/posts/oauth2-code-token/</link><pubDate>Fri, 21 Jun 2024 20:51:41 +0800</pubDate><guid>https://www.znl.net/posts/oauth2-code-token/</guid><description>授权码需要与相应客户端、回调地址及授权上下文匹配，PKCE 的校验值必须来自同一次授权流程。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/oauth2-code-token/featured.png"/></item><item><title>Java根据硬件信息生成唯一机器码</title><link>https://www.znl.net/posts/java-machine-id/</link><pubDate>Thu, 06 Jun 2024 13:20:28 +0800</pubDate><guid>https://www.znl.net/posts/java-machine-id/</guid><description>示例组合处理器、磁盘和主板信息，实际可读取字段受硬件、权限与虚拟化环境影响；有些设备可能缺少序列号。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/java-machine-id/featured.png"/></item><item><title>修改Springboot启动的LOGO</title><link>https://www.znl.net/posts/spring-boot-banner/</link><pubDate>Tue, 07 Nov 2023 10:15:51 +0800</pubDate><guid>https://www.znl.net/posts/spring-boot-banner/</guid><description>Banner 只影响启动时的展示内容，可用于说明项目或版本；它出现并不代表依赖连接、端口监听和业务初始化全部完成。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/spring-boot-banner/featured.png"/></item><item><title>Spring Open Feign远程调用后，fallback回调无效的解决方案</title><link>https://www.znl.net/posts/feign-fallback/</link><pubDate>Thu, 19 Oct 2023 16:37:24 +0800</pubDate><guid>https://www.znl.net/posts/feign-fallback/</guid><description>原文依赖特定组件组合和版本，先确认引入的依赖、启用配置与客户端 fallback 声明是否一致。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/feign-fallback/featured.png"/></item><item><title>Java FlatMap</title><link>https://www.znl.net/posts/java-flatmap/</link><pubDate>Mon, 26 Sep 2022 17:35:46 +0800</pubDate><guid>https://www.znl.net/posts/java-flatmap/</guid><description>&lt;code&gt;map&lt;/code&gt; 为每个元素产生一个映射结果，&lt;code&gt;flatMap&lt;/code&gt; 再把映射得到的多个流展开为一个流。可先用“多组词语合并为词语流”理解原图。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/java-flatmap/featured.png"/></item><item><title>将System.out和 System.err输出到日志文件slf4j</title><link>https://www.znl.net/posts/stdout-slf4j/</link><pubDate>Wed, 03 Aug 2022 16:41:28 +0800</pubDate><guid>https://www.znl.net/posts/stdout-slf4j/</guid><description>这类桥接用于接纳仍直接输出到标准流的旧代码，最终日志位置和级别还由 SLF4J 绑定的后端决定。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/stdout-slf4j/featured.png"/></item><item><title>基于Web3j做账号签名认证</title><link>https://www.znl.net/posts/web3j-auth/</link><pubDate>Thu, 05 May 2022 21:10:02 +0800</pubDate><guid>https://www.znl.net/posts/web3j-auth/</guid><description>原代码恢复公钥并与地址比较，处理的是特定消息签名格式；消息长度应按协议要求的编码字节数计算，中文不能简单按字符串字符数代替。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/web3j-auth/featured.png"/></item><item><title>使用jib-maven-plugin调整Jvm内存大小</title><link>https://www.znl.net/posts/jib-jvm-memory/</link><pubDate>Wed, 02 Mar 2022 21:38:03 +0800</pubDate><guid>https://www.znl.net/posts/jib-jvm-memory/</guid><description>&lt;code&gt;jvmFlags&lt;/code&gt; 描述应用进程启动选项，容器内存上限则来自运行平台；百分比参数需要结合实际 JVM 和可见内存限额解释。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/jib-jvm-memory/featured.png"/></item><item><title>docker-compose部署elasticsearch和kibana单节点</title><link>https://www.znl.net/posts/elasticsearch-kibana/</link><pubDate>Sun, 19 Dec 2021 19:40:02 +0800</pubDate><guid>https://www.znl.net/posts/elasticsearch-kibana/</guid><description>这是用于理解两项服务如何联通的单节点示例；容器间地址、认证设置和镜像版本需要配套。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/elasticsearch-kibana/featured.png"/></item><item><title>关于Idea2017卡顿的问题</title><link>https://www.znl.net/posts/idea-performance/</link><pubDate>Tue, 26 Dec 2017 16:41:41 +0800</pubDate><guid>https://www.znl.net/posts/idea-performance/</guid><description>原文记录了两种不同方向：主机名相关环境与自定义 VM 参数。排查时应记录具体卡顿动作，而不是同时修改多项配置。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/idea-performance/featured.jpg"/></item><item><title>Linux 安装Redis</title><link>https://www.znl.net/posts/redis-install/</link><pubDate>Fri, 29 Sep 2017 14:00:20 +0800</pubDate><guid>https://www.znl.net/posts/redis-install/</guid><description>编译成功、进程启动和远程可连接是不同结果；先确认版本与配置文件路径，再按实际部署方式管理服务。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/redis-install/featured.jpg"/></item><item><title>Spring AOP 切面</title><link>https://www.znl.net/posts/spring-aop/</link><pubDate>Mon, 18 Sep 2017 05:36:51 +0800</pubDate><guid>https://www.znl.net/posts/spring-aop/</guid><description>从返回类型、包与类、方法名、参数逐段解释表达式，并拿一个希望命中的方法及一个不应命中的方法做对照。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/spring-aop/featured.jpg"/></item><item><title>通过Apanic解析中国IP</title><link>https://www.znl.net/posts/apnic-china-ip/</link><pubDate>Tue, 01 Nov 2016 11:11:16 +0800</pubDate><guid>https://www.znl.net/posts/apnic-china-ip/</guid><description>原题“Apanic”指 APNIC。脚本处理的是地址资源登记数据，读取记录时需要区分地区字段、资源类型、起始地址和数量。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/apnic-china-ip/featured.png"/></item><item><title>最新后台界面维护</title><link>https://www.znl.net/posts/admin-ui-notes/</link><pubDate>Thu, 21 Apr 2016 00:02:25 +0800</pubDate><guid>https://www.znl.net/posts/admin-ui-notes/</guid><description>迁移中只保留了原图链接，尚未找到可恢复的界面截图或实现代码，因此本篇是界面演进的资料线索。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/admin-ui-notes/featured.png"/></item><item><title>Spring MVC 找出所有的URL映射地址</title><link>https://www.znl.net/posts/spring-url-mappings/</link><pubDate>Wed, 20 Apr 2016 23:53:10 +0800</pubDate><guid>https://www.znl.net/posts/spring-url-mappings/</guid><description>示例读取处理器维护的映射信息，可用于理解控制器方法怎样对应到请求路径；它不是一次真实 HTTP 调用的执行轨迹。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/spring-url-mappings/featured.png"/></item><item><title>Spring MVC URL的正则表达式</title><link>https://www.znl.net/posts/spring-url-regex/</link><pubDate>Wed, 20 Apr 2016 23:50:34 +0800</pubDate><guid>https://www.znl.net/posts/spring-url-regex/</guid><description>示例通过路径模式限制变量内容，再用 &lt;code&gt;@PathVariable&lt;/code&gt; 接收；阅读时要区分 URL 中的正则语法和 Java 字符串中的转义。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/spring-url-regex/featured.png"/></item><item><title>Hibernate - Mapping Types</title><link>https://www.znl.net/posts/hibernate-types/</link><pubDate>Fri, 29 Jan 2016 17:50:22 +0800</pubDate><guid>https://www.znl.net/posts/hibernate-types/</guid><description>表中的名称属于 Hibernate 的映射层，不能直接等同于 Java 类名或任意数据库的实际列类型；还应考虑所用方言和框架版本。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/hibernate-types/featured.png"/></item><item><title>Java生成唯一ID</title><link>https://www.znl.net/posts/java-unique-id/</link><pubDate>Sat, 31 Oct 2015 23:52:05 +0800</pubDate><guid>https://www.znl.net/posts/java-unique-id/</guid><description>读代码时应找出时间、序列和随机部分，并确认计数状态存放在哪里；单进程中的同步并不能自动协调多个进程或多台机器。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/java-unique-id/featured.jpg"/></item><item><title>JAVA转化日期为人性化方式显示</title><link>https://www.znl.net/posts/java-relative-date/</link><pubDate>Thu, 22 Oct 2015 08:31:51 +0800</pubDate><guid>https://www.znl.net/posts/java-relative-date/</guid><description>这类格式化把绝对时间转换为“多久以前”等展示文字，原始时间戳仍应保留，用于排序、比较和需要精确时间的场景。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/java-relative-date/featured.jpg"/></item><item><title>IntelliJ IDEA注册码</title><link>https://www.znl.net/posts/idea-license-notes/</link><pubDate>Wed, 01 Jul 2015 18:25:09 +0800</pubDate><guid>https://www.znl.net/posts/idea-license-notes/</guid><description>文中属于 IDEA 13、14 年代的历史记录；出现旧序列号并不证明当前有合法授权，也不能推导其对新版本有效。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/idea-license-notes/featured.png"/></item><item><title>26个提升java性能需要注意的地方</title><link>https://www.znl.net/posts/java-performance/</link><pubDate>Tue, 09 Jun 2015 22:46:10 +0800</pubDate><guid>https://www.znl.net/posts/java-performance/</guid><description>原文汇总了对象、集合和字符串等方面的旧经验，其中固定性能提升比例、堆栈位置等概括不宜直接当作当前 JVM 的保证。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/java-performance/featured.jpg"/></item><item><title>什么是IaaS, PaaS和SaaS及其区别</title><link>https://www.znl.net/posts/cloud-service-models/</link><pubDate>Fri, 15 May 2015 23:32:15 +0800</pubDate><guid>https://www.znl.net/posts/cloud-service-models/</guid><description>比较时可问三个问题：谁维护操作系统，谁部署应用，谁负责使用和数据配置。服务商托管越多，用户自行控制的底层细节通常越少。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/cloud-service-models/featured.jpg"/></item><item><title>Java线程安全和非线程安全</title><link>https://www.znl.net/posts/java-thread-safety/</link><pubDate>Tue, 12 May 2015 17:23:44 +0800</pubDate><guid>https://www.znl.net/posts/java-thread-safety/</guid><description>关键是多个线程是否访问同一个可变对象，而不只是程序是否使用多线程。线程私有的集合与共享集合需要不同的并发设计。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/java-thread-safety/featured.jpg"/></item><item><title>接口和抽象类</title><link>https://www.znl.net/posts/java-interface-abstract/</link><pubDate>Thu, 01 Jan 2015 01:15:08 +0800</pubDate><guid>https://www.znl.net/posts/java-interface-abstract/</guid><description>接口适合表达可替换的行为契约，抽象类适合共享状态或实现；两者可以共同使用。原文用“能做什么”和“是什么”帮助入门，但不能代替具体设计约束。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/java-interface-abstract/featured.jpg"/></item><item><title>Svn钩子</title><link>https://www.znl.net/posts/svn-hooks/</link><pubDate>Fri, 04 Apr 2014 22:20:07 +0800</pubDate><guid>https://www.znl.net/posts/svn-hooks/</guid><description>脚本使用仓库路径和事务参数读取本次提交信息，并以非零退出码阻止不符合要求的提交；它应作为服务端钩子运行。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/svn-hooks/featured.jpg"/></item><item><title>Eclipse中设置${user}变量</title><link>https://www.znl.net/posts/eclipse-author/</link><pubDate>Fri, 21 Mar 2014 18:20:16 +0800</pubDate><guid>https://www.znl.net/posts/eclipse-author/</guid><description>修改代码模板只改变新生成注释的文字；设置 JVM 的 &lt;code&gt;user.name&lt;/code&gt; 则影响进程读取的用户属性。已有源码注释不会自动批量更新。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/eclipse-author/featured.jpg"/></item><item><title>QuartZ Cron表达式</title><link>https://www.znl.net/posts/quartz-cron/</link><pubDate>Thu, 05 Dec 2013 18:09:04 +0800</pubDate><guid>https://www.znl.net/posts/quartz-cron/</guid><description>Quartz 表达式从秒开始，与常见的五字段系统 crontab 不同；阅读时应先确认调度器类型，再逐字段解释例子。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/quartz-cron/featured.jpg"/></item><item><title>Ldap活动目录常用属性介绍</title><link>https://www.znl.net/posts/ldap-attributes/</link><pubDate>Wed, 30 Oct 2013 19:23:27 +0800</pubDate><guid>https://www.znl.net/posts/ldap-attributes/</guid><description>同一名称的显示信息、登录标识和唯一标识承担不同作用，不能只凭属性看起来相似就互换。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/ldap-attributes/featured.jpg"/></item><item><title>Nginx Windows版本启动文件</title><link>https://www.znl.net/posts/nginx-windows/</link><pubDate>Tue, 22 Oct 2013 00:56:01 +0800</pubDate><guid>https://www.znl.net/posts/nginx-windows/</guid><description>脚本依赖当前目录和固定版本子目录，运行位置、路径空格与多实例都会影响它找到哪个二进制和配置文件。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/nginx-windows/featured.png"/></item><item><title>Javascript实现类似java中的Map功能</title><link>https://www.znl.net/posts/javascript-map/</link><pubDate>Tue, 16 Jul 2013 21:55:33 +0800</pubDate><guid>https://www.znl.net/posts/javascript-map/</guid><description>原代码围绕键值存取、删除、枚举和数量等操作封装对象，阅读时先确认重复键覆盖与不存在键的返回约定。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/javascript-map/featured.png"/></item><item><title>软件开发过程</title><link>https://www.znl.net/posts/software-process/</link><pubDate>Thu, 16 May 2013 23:06:42 +0800</pubDate><guid>https://www.znl.net/posts/software-process/</guid><description>可把需求、设计、实现、测试和部署分别对应到需求说明、设计记录、代码、验证结果和上线方案；模型名称本身不能代替这些可检查的结果。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/software-process/featured.png"/></item><item><title>Java图片合并成GIF图片</title><link>https://www.znl.net/posts/java-gif/</link><pubDate>Tue, 14 May 2013 09:15:08 +0800</pubDate><guid>https://www.znl.net/posts/java-gif/</guid><description>迁移得到的原文只有标题，没有可恢复的合成代码。按这个主题实现时，需要准备按顺序排列的图片、统一的画布尺寸，以及每一帧的显示时间。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/java-gif/featured.png"/></item><item><title>Java随机验证码</title><link>https://www.znl.net/posts/java-captcha/</link><pubDate>Tue, 14 May 2013 09:13:39 +0800</pubDate><guid>https://www.znl.net/posts/java-captcha/</guid><description>图片生成只是验证码流程的一部分，接入时还需要把挑战结果与对应会话关联，并明确有效期及使用次数。原代码中的字体、颜色和干扰线影响可读性。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/java-captcha/featured.png"/></item><item><title>获取min到max的随机数</title><link>https://www.znl.net/posts/java-random-range/</link><pubDate>Fri, 10 May 2013 19:56:58 +0800</pubDate><guid>https://www.znl.net/posts/java-random-range/</guid><description>原代码返回范围是 &lt;code&gt;[min, max)&lt;/code&gt;：包含 &lt;code&gt;min&lt;/code&gt;，不包含 &lt;code&gt;max&lt;/code&gt;。例如 &lt;code&gt;min=3&lt;/code&gt;、&lt;code&gt;max=6&lt;/code&gt; 时可能得到 3、4、5，得不到 6。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/java-random-range/featured.png"/></item><item><title>java四舍五入</title><link>https://www.znl.net/posts/java-round/</link><pubDate>Fri, 10 May 2013 19:52:34 +0800</pubDate><guid>https://www.znl.net/posts/java-round/</guid><description>原方法的 &lt;code&gt;rang&lt;/code&gt; 表示小数位数，返回值仍是 &lt;code&gt;double&lt;/code&gt;，因此保留两位小数不代表输出时一定显示两个尾随零。展示格式与数值计算需要分开处理。</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://www.znl.net/posts/java-round/featured.png"/></item></channel></rss>