加载中

Java

文章分类

浏览该分类下的所有文章

237 篇文章 20

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

本文介绍在Spring Boot中通过@Async实现异步调用、@Cacheable实现缓存,高效获取并存储天气数据的完整方案。首先启用Spring异步支持,使网络请求在后台执行,提升响应速度;随后使用Spring Cache缓存当天天气,避免重复调用高德天气API,降低服务器负载。示例代码展示了获取客户端IP、解析地区、调用高德地理编码与天气接口、处理返回结果并将数据放入Model。文中还提醒需自行实现IP解析工具、替换API密钥,并确保项目已引入Spring Cache和Web依赖。整体思路是异步获取、结果缓存,从而优化用户体验和系统性能。

Java 17 新功能介绍(LTS)

Java 17于2021‑09‑14发布,作为 LTS 版本引入 14 项 JEP。恢复严格浮点语义、提供统一的 RandomGenerator 接口、支持 Apple Metal 与 macOS/AArch64、删除 Applet API、加强 JDK 内部封装、预览 Switch 模式匹配、移除 RMI Activation、正式推出密封类、剔除实验性 AOT/JIT、弃用 Security Manager、孵化外部函数与内存 API、二次孵化 Vector API,并新增反序列化过滤器。文中给出示例代码并提供下载、文档链接。

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

本文介绍在 SpringBoot 项目中通过 EL 表达式和 Bean 动态生成 Elasticsearch 按日期命名的索引。首先在配置类中定义名为 **esIndex** 的 Bean,返回当前日期(或时间戳)作为索引后缀;使用 `@Scheduled` 每日零点销毁并重新注册该 Bean,同时手动调用 `IndexOperations.create()` 创建新索引,以确保 shards、replicas 等参数生效。实体类使用 `@Document(indexName = "product_#{@esIndex}", createIndex = false, shards = 3, replicas = 2)` 关闭自动建索引,避免后续索引缺失配置。文中还提供了在保存前判断索引是否存在的替代方案,并给出 Repository 与 Controller 的完整示例,演示通过 `saveAll`/`save` 自动写入对应日期索引。

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

本文介绍在网页表单中实现实时输入清除功能的方法。通过在输入框右侧嵌入一个隐藏的“×”图标(HTML <span>),利用 CSS 将其定位于输入框右侧并美化样式;随后使用 JavaScript 监听 input、focus、blur 等事件,在输入框有内容时显示图标,点击图标即可清空文本并隐藏图标。实现步骤简洁,提升了表单的可用性和用户体验。

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

本文演示了在 Spring Boot + MyBatis 项目中,利用 PageHelper 与 Lambda 表达式封装统一的分页工具。首先在 pom 中引入 `pagehelper‑spring‑boot‑starter`,定义 `BaseQueryParam` 保存页码和页大小。随后实现泛型类 `NewPageBean<T>`,通过 `PageHelper.startPage(...).doSelectPage(ISelect)` 在 lambda 中调用 Mapper,自动生成 `PageInfo` 并封装总数、数据列表及分页详情(页码、页大小、总页数、前后页)。示例包括 Mapper 接口、对应 XML、Controller 中的 `NewPageBean.generatePage(() -> taskMapper.list(param), param, Task.class)` 调用,以及访问 `http://.../test?pageNum=2&pageSize=2` 的返回结构。整个方案实现了分页逻辑的高度复用和代码简洁。

装饰者模式

装饰者模式是一种结构型设计模式,允许在不修改原有类的前提下为对象动态添加功能。实现步骤包括:定义统一的Component接口;实现该接口的ConcreteComponent作为被装饰的核心对象;创建抽象Decorator实现Component并持有Component引用,在其operation()中委托给被装饰对象;继承Decorator的ConcreteDecoratorA、ConcreteDecoratorB等具体装饰类,在调用父类operation()后加入各自的新增行为。客户端可通过把不同装饰者按需组合在一起,为同一ConcreteComponent叠加多种行为,体现了装饰者模式的灵活性和可扩展性。

单例模式

单例模式确保一个类仅有唯一实例并提供全局访问点。文中介绍了六种实现方式:①懒汉式(非线程安全),②同步懒汉式,③双重检查锁(使用volatile与局部同步提升性能),④饿汉式(类加载即实例化),⑤枚举实现(简洁安全),并指出不同实现适用于不同并发需求,开发者应根据实际场景选择合适方案。

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

本文阐述了 Java 并发中的两种关键技术:volatile 与 Atomic 类。volatile 通过强制每次读写主内存、禁止指令重排,提供轻量级的可见性保证,适用于简单状态标记。Atomic 类则基于硬件 CAS 实现无锁原子操作,既保证可见性又确保复合操作的原子性,适合计数等并发更新场景。文章比较了两者的使用场景、性能与一致性差异,并提供示例代码演示 volatile 的忙等待和 AtomicInteger 的并发递增,强调在实际开发中需依据业务需求合理选择,以实现高效且安全的并发控制。

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

本文介绍了Java并发包中的两大同步工具CountDownLatch和CyclicBarrier的原理与适用场景。CountDownLatch通过计数器让一个或多个线程等待指定数量的任务完成后再继续,适合一次性倒计时控制;CyclicBarrier则让一组线程在到达同一屏障点后共同放行,并可循环复用,适用于多阶段并行处理。文中提供了完整的代码示例,帮助读者快速掌握两者的使用方法,并指出它们在提升并发效率和系统可靠性方面的关键作用。

Java 11的新特性与最佳实践

Java 11作为LTS版本,重点新增了非阻塞的java.net.http.HttpClient、DateTimeFormatter 的直接解析方法以及低延迟的 ZGC 垃圾回收器。文章通过示例演示这些 API 的使用,并提出升级依赖、性能监控、代码审查和持续学习等最佳实践,强调在项目中充分利用新特性以提升开发效率和运行性能。

Nginx线上配置https示例文件

本文展示了一个完整的 Nginx 配置示例,用于为域名 hqxiaozou.top 启用 HTTPS。全局块包括日志、连接数和文件类型设置;在 `http` 块内配置了两个 `server`:一个监听 443,使用 `ssl_certificate` 与 `ssl_certificate_key` 指定 PEM 证书和私钥,并通过 `proxy_pass` 将请求转发至内部服务,同时保留真实 IP;另一个监听 80,将所有请求永久重定向至 HTTPS。最后通过 `include /etc/nginx/conf.d/*.conf` 引入其余配置文件。

响应式编程与Project Reactor

响应式编程通过把数据流设为第一公民,实现异步、非阻塞和事件驱动的系统设计。Project Reactor 是 Java 生态的响应式实现,核心库 Reactor Core 提供 Mono(单值流)和 Flux(多值流)以及丰富的操作符;Reactor Netty 为高性能网络通信提供支持;Reactor Spring 实现与 Spring 的深度集成。背压机制让消费者控制生产者速率,Schedulers 则可自定义执行线程,实现并行和异步处理。文章示例使用 Spring WebFlux 返回每秒产生的 Flux 数据流,展示了构建高并发、低延迟响应式 Web 服务的简易路径。通过掌握这些概念,开发者能够利用 Project Reactor 构建弹性伸缩、高吞吐量的现代应用。