加载中

Java

文章分类

浏览该分类下的所有文章

237 篇文章 20

实现异步天气数据获取与Spring缓存集成

本文介绍在 Spring Boot 中通过 @Async 实现天气数据的异步获取,并结合 @Cacheable 将结果缓存,以减少对高德天气 API 的重复调用。代码演示了获取客户端 IP、解析地区、调用高德地理编码和天气接口、处理返回数据并放入模型,缓存键为 "todayWeather"。文中提醒自行实现 IP 解析工具、替换 API 密钥,并确保项目已引入 Spring Cache 与 Web 相关依赖。通过异步与缓存的组合,可提升响应速度、降低服务器负载。

Java 17 新功能介绍(LTS)

2021 年 9 月 14 日发布的 Java 17 是长期支持(LTS)版,带来 14 项新特性:恢复始终严格的浮点语义;新增统一的 RandomGenerator 接口与工厂;在 macOS 上采用 Apple Metal 渲染并支持 AArch64 架构;删除已废弃的 Applet API;加强 JDK 内部封装,取消 --illegal-access 选项;预览 Switch 模式匹配;移除 RMI Activation;正式推出密封类;剔除实验性的 AOT/JIT 编译器;弃用 Security Manager;孵化外部函数与内存 API;二次孵化 Vector API;以及支持基于上下文的反序列化过滤器。全文提供下载链接与官方文档,属 Java 新特性教程系列。

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

文章介绍了在 SpringBoot 项目中如何实现 Elasticsearch 按日期动态创建索引。通过在实体类的 @Document 注解里使用 EL 表达式(如 `product_#{@esIndex}`),并在配置类中定义名为 `esIndex` 的 Bean,返回当前日期(或时间戳)作为索引后缀。利用 @Scheduled 定时任务每天零点销毁并重新注册该 Bean,同时手动调用 `IndexOperations.create()` 创建新索引,以保证 shards、replicas 等参数不丢失。实体需关闭自动建索引(`createIndex = false`),并在 Repository 中使用标准 CRUD。文中还提供了在保存前检查索引是否存在的替代方案,以及通过 Controller 测试动态索引的完整示例。

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 用于高效网络请求,强化了 DateTimeFormatter 直接解析 LocalDate/Time/DateTime,推出低延迟的 ZGC 垃圾回收器。文章建议在使用这些特性时升级依赖、使用 JFR 监控性能、定期代码审查并持续学习,以确保兼容性和代码质量,充分发挥 Java 11 提升开发效率和运行性能的优势。

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 服务,实现高吞吐量和弹性伸缩。