加载中

Java

文章分类

浏览该分类下的所有文章

237 篇文章 20

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

本文介绍在 Spring Boot 中结合使用 @Async 与 Spring Cache 实现天气数据的异步获取与缓存。通过 @Async 将调用高德地图接口的耗时网络请求异步化,提升并发响应能力;使用 @Cacheable 将查询结果缓存到名为 weatherCache 的缓存中,避免同一地区的重复请求,降低服务器负载。示例代码包括获取客户端 IP、解析地区、调用高德地理编码与天气接口、处理返回数据并将结果放入 Model。文中强调需自行实现 IP 解析工具、替换 API Key,并确保项目已引入 Spring Cache、Web 等依赖。整体方案可显著提升天气展示的实时性和系统性能。

Java 17 新功能介绍(LTS)

Java 17 于 2021‑09‑14 正式发布,作为 LTS 版本,带来 14 项核心改进:恢复严格浮点语义;引入统一的伪随机数生成器 API;在 macOS 使用 Apple Metal 渲染并支持 AArch64 架构;删除已废弃的 Applet API;加强 JDK 内部封装,移除 --illegal-access 选项;预览 Switch 模式匹配;移除 RMI Activation;正式推出密封类;剔除实验性的 AOT/JIT 编译器;弃用 Security Manager;孵化外部函数与内存 API;二次孵化 Vector API;以及提供上下文感知的反序列化过滤器。这些特性提升了语言安全、性能与跨平台能力。

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

通过在 SpringBoot 中使用 @Document 的 EL 表达式,将索引名设为 “product_#{@esIndex}”,并在配置类提供 esIndex bean 返回当天日期(或时间戳)。利用定时任务每天零点销毁并重新注册该 bean,随后手动调用 ElasticsearchRestTemplate 创建新索引,以确保 shards、replicas 等参数生效。实体类需关闭自动建索引(createIndex = false)。也可在保存前判断索引是否存在再更新 bean。文中给出完整的配置、实体、Repository 与 Controller 示例,演示批量/单条保存并在 Kibana 中观察动态索引的生成。

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

本文示例演示如何在表单输入框右侧嵌入“×”图标,实现实时清除功能。通过在 HTML 中加入包裹图标的 `<span>`,使用 CSS 绝对定位将其置于输入框右侧并隐藏;随后利用 JavaScript 监听 `input、focus、blur` 等事件,在输入框有内容时显示图标,点击图标后清空文本并再次隐藏。该实现代码简洁、界面美观,提升了用户的交互便利性和整体体验。

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

本文介绍了在 Spring Boot 项目中使用 PageHelper 与 Lambda 表达式实现统一、简洁的分页封装。首先在 pom 中引入 `pagehelper-spring-boot-starter`,然后创建 `BaseQueryParam` 用于接收 `pageNum`、`pageSize` 参数。接着实现泛型类 `NewPageBean<T>`,在静态方法 `generatePage` 中通过 `PageHelper.startPage(...).doSelectPage(select)` 完成查询并包装成 `PageInfo`,再将总数、列表及分页细节封装到 `MyPage` 中返回。文中给出 Mapper 接口及对应 XML,示例 Controller 只需调用 `NewPageBean.generatePage(() -> taskMapper.list(param), param, Task.class)` 即可得到包含 `total、list、pageInfo、num` 的统一响应。最后展示了访问 `http://localhost:9090/demo/test?pageNum=2&pageSize=2` 的返回示例,验证了分页功能的正确实现。

装饰者模式

装饰者模式是一种结构型设计模式,通过在不修改原有类的前提下,为对象动态添加新功能。实现步骤包括:①定义组件接口;②实现具体组件;③创建抽象装饰者类,持有组件引用并委托调用;④继承抽象装饰者实现具体装饰者,在其 operation 方法中加入新增行为。客户端可通过组合不同装饰者(如 ConcreteDecoratorA、ConcreteDecoratorB)对同一具体组件进行多层包装,灵活扩展行为而不影响原组件及其他对象。

单例模式

单例模式确保一个类仅有唯一实例并提供全局访问点。文中介绍了五种常见实现:①懒汉式在首次调用时创建,但在多线程下不安全;②加synchronized的线程安全懒汉式;③双重检查锁定通过volatile和局部同步提升性能;④饿汉式在类加载时即实例化,天然线程安全;⑤使用enum实现单例,简洁且安全。不同方案适用于不同场景,开发者应依据并发需求和初始化时机选择合适实现。

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

本文阐述了 Java 并发中的两种关键机制:volatile 用于保证共享变量的可见性并阻止指令重排,适合简单状态标记;Atomic 类通过底层 CAS 实现无锁原子操作,既提供可见性又保证复合操作的原子性,适用于计数、递增等复杂场景。对比后指出,volatile 在单纯读写时开销更小,而 Atomic 在需要原子性时性能优于 synchronized。文章通过代码示例演示了两者的使用方式,并强调在实际开发中需根据具体需求权衡选择,以实现高效且安全的并发控制。

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

本文介绍了Java 并发包中的两大同步工具 CountDownLatch 与 CyclicBarrier。CountDownLatch 通过计数器让一个或多个线程等待指定数量的任务完成后再继续,适用于一次性任务收敛。CyclicBarrier 则让一组线程在同一屏障点相互等待,全部到达后一起继续,并且可循环复用,适合多阶段并行计算。文中配以简洁代码示例,比较了两者的设计理念和适用场景,强调熟练使用这些工具可显著提升并发程序的效率与可靠性。

Java 11的新特性与最佳实践

Java 11 作为 LTS 版本,带来了关键新特性:全新非阻塞 HTTP 客户端 API(java.net.http.HttpClient)、增强的 DateTimeFormatter 支持直接解析 LocalDate、LocalTime、LocalDateTime,以及低延迟的 ZGC 垃圾回收器。文章建议在使用这些特性时,先确保依赖库兼容 Java 11,利用 JFR 等工具监控性能,开展代码审查以保持质量,并保持持续学习以跟进社区更新,从而充分发挥 Java 11 在开发效率和运行时性能上的提升。

Nginx线上配置https示例文件

本文提供了一个完整的 Nginx 配置示例,实现对域名 www.hqxiaozou.top/hqxiaozou.top 的 HTTPS 加密访问。配置包括全局指令、日志格式、文件发送优化等;在 443 端口的 server 块中启用 SSL,指定证书和私钥路径,并通过 `proxy_pass` 将请求转发至内部 IP 与端口,同时设置真实 IP 头部;在 80 端口的 server 块中使用永久重写将所有 HTTP 请求重定向到 HTTPS。最后通过 `include /etc/nginx/conf.d/*.conf` 引入其他子配置。

响应式编程与Project Reactor

响应式编程以数据流和事件为核心,强调异步、非阻塞和背压控制,提升系统的高效与可靠。Project Reactor 是 Java 生态的实现,主要包括 Reactor Core(提供 Mono 与 Flux 两种数据流)、Reactor Netty(基于 Netty 的高性能网络层)和 Reactor Spring(与 Spring 的无缝集成)。Mono 表示零或一个元素,Flux 表示零到多个元素,二者配合丰富的操作符完成流的转换、过滤、聚合等。背压机制确保生产者与消费者速率匹配,Schedulers 负责调度线程实现并行与异步。文中示例使用 Spring WebFlux 与 Flux.interval 构建每秒推送数据的响应式 Web 服务,展示了 Reactor 在高并发、低延迟场景的实用性。通过掌握这些概念,开发者能够更简便地构建弹性伸缩、高吞吐量的现代应用。