Java

浏览该分类下的所有文章

SpringBoot+Elasticsearch按日期实现动态创建索引

文章介绍了在 SpringBoot 中通过 @Document 的 EL 表达式实现 Elasticsearch 按日期动态创建索引的完整方案。核心思路是把索引后缀(如 yyyy_MM_dd)封装为 Bean(esIndex),并在每天零点的定时任务中销毁旧 Bean、重新注册新值,同时手动调用 ElasticsearchRestTemplate 创建索引,以保证 shards、replicas 等配置不丢失。实体类需声明 createIndex = false,避免自动创建导致参数缺失;示例代码包括配置类、实体、Repository 与 Controller,演示了定时更新索引和保存数据后在 Kibana 中观察新索引的效果。

HTML集成优雅的实时输入清除功能

本文介绍了在网页表单中实现实时输入清除的完整方案。通过在输入框右侧嵌入一个隐藏的“×”图标(HTML + <span>),利用 CSS 将图标定位于输入框内部,并通过 JavaScript 监听 input、focus、blur 等事件,在有内容时显示图标、点击后清空文本并隐藏图标。实现步骤简洁、代码可复用,能够提升表单的交互便利性和整体用户体验。

PageHelper结合Lambda表达式实现简洁的分页封装

本文演示了在Spring Boot 项目中通过引入 `pagehelper‑spring‑boot‑starter`,结合 Java Lambda 表达式,实现统一、简洁的分页封装。首先定义 `BaseQueryParam` 只包含 `pageNum`、`pageSize`,供所有查询继承;随后实现通用的 `NewPageBean<T>`,在 `generatePage` 方法中使用 `PageHelper.startPage(...).doSelectPage(ISelect)` 通过 Lambda 调用 Mapper,自动返回 `total`、`list` 与 `MyPage`(页码、页大小、总页数、前后页)等分页信息。示例代码展示了 `TaskMapper`、对应 XML 与 `TaskController` 的调用方式,访问 `http://localhost:9090/demo/test?pageNum=2&pageSize=2` 即可得到结构化的分页响应。整个方案实现了分页逻辑的高度复用与代码简化。

装饰者模式

装饰者模式是一种结构型设计模式,通过在运行时为对象动态添加新功能而不修改原类。实现步骤包括:定义Component接口;实现ConcreteComponent;创建实现Component并持有Component引用的抽象Decorator;在ConcreteDecoratorA、ConcreteDecoratorB等具体装饰者中扩展operation方法添加新行为。客户端可通过把装饰者层层包装ConcreteComponent,实现灵活组合行为,体现了装饰者模式在不影响原有对象的前提下增强功能的优势。

单例模式

单例模式旨在保证一个类只有唯一实例并提供全局访问点。文中介绍了五种常见实现:①懒汉式(非线程安全);②同步懒汉式(通过synchronized保证安全);③双重检查锁定(在必要时同步,性能更佳);④饿汉式(类加载即实例化,天然线程安全);⑤枚举实现(简洁且安全)。每种方案适用于不同的并发需求,开发者应依据实际场景选择最合适的实现方式。

Java并发编程:从volatile关键字到Atomic类的底层原理与实战

本文阐述了 Java 并发中的两种可见性与原子性保障手段。volatile 关键字通过强制读写主内存、禁止指令重排,实现变量的即时可见,适用于单一状态标记等轻量读写场景;而 java.util.concurrent.atomic 包提供的 Atomic 类利用硬件层面的 CAS 无锁算法,确保复合操作的原子性,避免 synchronized 的锁开销,适合计数、递增等高并发写场景。文章通过代码示例演示两者的使用方式,并对 volatile 与 Atomic 在适用场景、性能和数据一致性方面进行对比,强调在实际开发中需根据业务需求权衡选择,以实现高效且安全的并发控制。

Java并发工具类:从CountDownLatch到CyclicBarrier的实战应用

本文系统阐述了 Java 并发包中的两大同步工具——CountDownLatch 与 CyclicBarrier。CountDownLatch 通过计数器让一个或多个线程等待指定次数的任务完成后再继续,适用于“一次性”任务汇总;示例展示了主线程阻塞直至三个子线程调用 countDown()。CyclicBarrier 则让一组线程在同一屏障点相互等待,计数归零后所有线程一起放行,并且可以循环使用,适合多轮协同处理;示例演示了三条线程在 barrier.await() 后同步继续。文章比较了两者的设计理念与使用场景,强调掌握这些工具可提升 Java 并发程序的效率和可靠性。

Java 11的新特性与最佳实践

Java 11作为LTS版本,重点推出了三大新特性:全异步的java.net.http.HttpClient 替代阻塞的HttpURLConnection;DateTimeFormatter 的 parse 方法简化 LocalDate、LocalTime、LocalDateTime 的字符串解析;以及低延迟的 ZGC 垃圾回收器,提升长时运行应用的响应。文章还提出使用 Java 11 时的最佳实践:确保依赖兼容、利用 JFR 等工具监控性能、定期代码审查并持续学习社区新动态,以充分发挥新 API 与工具带来的开发效率和性能提升。

Nginx线上配置https示例文件

本文提供了一个完整的 Nginx HTTPS 配置示例。全局设置包括日志、连接数、文件发送等;在 `http` 块中定义日志格式和基本参数。`server` 块一监听 443 并启用 SSL,指定域名、证书路径、私钥,并通过 `proxy_pass` 将请求转发至后端 IP+端口,同时设置真实 IP 头。另设 80 端口 `server`,使用 `rewrite` 永久重定向所有请求到 HTTPS。最后通过 `include /etc/nginx/conf.d/*.conf` 加载其他配置文件。

响应式编程与Project Reactor

响应式编程以数据流和事件为核心,强调异步、非阻塞和背压控制。Project Reactor 是 Java 的实现,提供 Reactor Core(Mono、Flux)、Reactor Netty 与 Reactor Spring 等组件,支持流的转换、过滤、聚合以及线程调度。Mono 表示单值或错误,Flux 表示零到多值流。背压让消费者调节生产速率,Schedulers 控制并行执行。结合 Spring WebFlux,可用 Flux.interval 等操作轻松构建高并发、低延迟的响应式 Web 服务,实现高吞吐量和弹性伸缩。

浅谈工厂模式与策略模式

本文简要介绍了两种常用的 Java 设计模式。工厂模式通过统一接口和独立工厂类封装对象创建,支持在不改动已有代码的情况下添加新产品;策略模式将可变算法抽象为策略接口并实现多个具体策略,使行为可在运行时自由切换。两者分别解决对象实例化和算法封装的灵活性问题,提升系统的模块化、可扩展性和可维护性。

Lambda表达式与流(Stream) API

本文概述了 Java 8 引入的 Lambda 表达式和 Stream API,阐述 Lambda 作为匿名函数实现函数式接口的方式,使集合操作更简洁;介绍 Stream 通过流水线式的中间、终结操作实现顺序或并行的数据处理,并给出过滤计数等示例。进一步分析了 Lambda 在编译后生成闭包类、Stream 的管道模型等内部机制。最后提出最佳实践,如避免在 Lambda 中修改外部变量、合理使用并行流以及区分中间与终结操作,以规避性能和行为问题。全文强调掌握这两项特性可提升 Java 代码的可读性、维护性和执行效率。