Java way to explore https:https://cdn.v2ex.com/navatar/03af/dbd6/63_normal.png?m=1644490200 https:https://cdn.v2ex.com/navatar/03af/dbd6/63_large.png?m=1644490200 2025-09-29T09:28:59Z Copyright © 2010-2018, V2EX Java 25 后的时代:像写 Python 一样写 Java tag:www.v2ex.com,2025-09-27:/t/1162247 2025-09-27T16:13:18Z 2025-09-29T09:28:59Z Cbdy member/Cbdy Compact Java App - 像写 Python 一样写 Java

项目地址: https://github.com/alchem-x/compact-sb

什么是 Compact Java App ?

Compact Java App 是基于 Java 25 新特性( JEP 512 )的编程方式,让你可以像写 Python 一样写 Java 程序:

// 传统的 Java Hello World public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } } // Compact Java App Hello World void main() { IO.println("Hello, World!"); } 

核心优势

当前项目介绍

这个仓库演示了 Compact Java App 的实际应用 - 一个轻量级的 Web 服务器实现。

项目结构

compact-sb/ ├── Lu.java # 紧凑 Java App 主程序 ├── CompactSB.java # Web 服务器核心 ├── lib/ # 依赖库 └── README.md 

快速开始

  1. 确保 Java 25+已安装
java -version # 需要 Java 25 或更高版本 
  1. 运行应用
java Lu.java && java -cp "lib/*" CompactSB.java 
  1. 访问 Web 服务 打开浏览器访问 http://localhost:8080/

核心代码示例

Lu.java - 紧凑 Java App 的精髓:

void main() { // 简洁的 Web 服务器启动 IO.println("Starting Compact Web Server..."); // 自动导入所有 java.base 类 var server = new Server(); server.start(8080); IO.println("Server running at http://localhost:8080/"); } 

为什么选择 Compact Java App ?

  1. 教学友好 - 第一天就能写出实用的程序
  2. 脚本化 - 用 Java 写脚本,享受强类型和优秀性能
  3. 零配置 - 无需复杂项目结构和构建工具
  4. 生产就绪 - 可平滑扩展到企业级应用

与传统 Java 对比

特性 传统 Java Compact Java App
Hello World 5 行,4 个概念 3 行,1 个概念
依赖管理 需要 Maven/Gradle 直接运行源文件
学习曲线 陡峭 平缓
开发速度 快速
运行时性能 优秀 同样优秀

应用场景

技术细节

下一步计划

这个项目展示了 Compact Java App 在 Web 开发中的应用。未来可以:

  1. 添加更多路由处理功能
  2. 集成模板引擎
  3. 支持静态文件服务
  4. 添加数据库连接示例
  5. 创建 RESTful API 演示

相关资源


Compact Java App 让 Java 重新变得简单优雅,同时保持其强大的生态系统。未来已来,让我们一起拥抱这个全新的 Java 时代! 🚀

本项目是 Compact Java App 理念的实践演示,展示了如何用简洁的代码构建实用的应用程序。

]]> 兄弟们,请求个 netty 的线程问题 tag:www.v2ex.com,2025-09-20:/t/1160806 2025-09-20T19:30:15Z 2025-09-21T23:04:31Z zhazi member/zhazi @Component @RequiredArgsConstructor public class WebSocketServer implements ApplicationRunner, DisposableBean { @Value("${netty.port}") private int port; private final EventLoopGroup bossGroup = new NioEventLoopGroup(); private final EventLoopGroup workerGroup = new NioEventLoopGroup(); private final ServerBootstrap b = new ServerBootstrap(); private final Map<String, Channel> map = new HashMap<>(); @Override public void destroy() { bossGroup.shutdownGracefully(); workerGroup.shutdownGracefully(); } @Override public void run(ApplicationArguments args) throws Exception { b.group(bossGroup, workerGroup) .channel(NioServerSocketChannel.class) .option(ChannelOption.SO_BACKLOG, 128) .childOption(ChannelOption.SO_KEEPALIVE, true) .childHandler(new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel ch) { ChannelPipeline pipeline = ch.pipeline(); pipeline.addLast(new HttpServerCodec()); pipeline.addLast(new HttpObjectAggregator(65536)); pipeline.addLast(new WebSocketServerProtocolHandler("/ws", true, 3000L)); pipeline.addLast(new WebSocketFrameHandler(map)); } }); ChannelFuture future = b.bind(port).sync(); System.out.println("WebSocket server started on port " + port); future.channel().closeFuture().sync(); } } @Slf4j public class WebSocketFrameHandler extends SimpleChannelInboundHandler<WebSocketFrame> { private final Map<String, Channel> map; public static final AttributeKey<String> URI_ATTRIBUTE_KEY = AttributeKey.valueOf("URI"); public WebSocketFrameHandler(Map<String, Channel> map) { this.map = map; } @Override public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { if (evt instanceof WebSocketServerProtocolHandler.HandshakeComplete) { WebSocketServerProtocolHandler.HandshakeComplete handshakeComplete = (WebSocketServerProtocolHandler.HandshakeComplete) evt; Channel currentChannel = ctx.channel(); String uri = handshakeComplete.requestUri(); currentChannel.attr(URI_ATTRIBUTE_KEY).set(uri); Channel exist = map.get(uri); if (Objects.isNull(exist)) { map.put(uri, currentChannel); log.info(new Message(uri, currentChannel.id().toString(), 1).toString()); } else { //无效 exist.close().sync();//明确在 close 执行完成后在重新上线,但是好像没生效一样,直接就输出上线! 1= 上线,0= 下线 map.put(uri, currentChannel); log.info(new Message(uri, currentChannel.id().toString(), 1).toString()); //无效 //exist.close().addListener(future -> log.info(new Message(uri, currentChannel.id().toString(), 1).toString())); //无效 //exist.close().sync().addListener(future -> log.info(new Message(uri, currentChannel.id().toString(), 1).toString())); } } else { super.userEventTriggered(ctx, evt); } } @Override public void channelInactive(ChannelHandlerContext ctx) { Channel channel = ctx.channel(); String uri = channel.attr(URI_ATTRIBUTE_KEY).get(); log.info(new Message(uri, channel.id().toString(), 0).toString()); } }

日志输出:

2025-09-21 03:16:54.669 INFO 30008 --- [ntLoopGroup-5-1] org.example.WebSocketFrameHandler : Message{uri='/ws/abc_123', sessiOnId='86aeadad', status=上线} 2025-09-21 03:16:58.837 INFO 30008 --- [ntLoopGroup-5-2] org.example.WebSocketFrameHandler : Message{uri='/ws/abc_123', sessiOnId='fa3a5fbb', status=上线} 2025-09-21 03:16:58.838 INFO 30008 --- [ntLoopGroup-5-1] org.example.WebSocketFrameHandler : Message{uri='/ws/abc_123', sessiOnId='86aeadad', status=下线} 

我用 netty 提供的 websocket 服务,想达到新设备踢出老设备的在线状态, 但是控制不好状态

预期的效果:

日志输出:

但是现在看结果是错误的顺序。

想在这个服务里保证状态的正确,我尝试使用自定义 eventGroup 并且设置线程数 1 来执行代码也不行,也尝试跟 ai 沟通了半宿也研究明白

netty-all 的版本是 4.2.6.Final

]]>
JDK 25 发布了, LTS 版本 tag:www.v2ex.com,2025-09-17:/t/1159798 2025-09-17T00:53:56Z 2025-09-19T08:54:51Z Ayanokouji member/Ayanokouji
https://openjdk.org/projects/jdk/25/

Features

470: PEM Encodings of Cryptographic Objects (Preview)
502: Stable Values (Preview)
503: Remove the 32-bit x86 Port
505: Structured Concurrency (Fifth Preview)
506: Scoped Values
507: Primitive Types in Patterns, instanceof, and switch (Third Preview)
508: Vector API (Tenth Incubator)
509: JFR CPU-Time Profiling (Experimental)
510: Key Derivation Function API
511: Module Import Declarations
512: Compact Source Files and Instance Main Methods
513: Flexible Constructor Bodies
514: Ahead-of-Time Command-Line Ergonomics
515: Ahead-of-Time Method Profiling
518: JFR Cooperative Sampling
519: Compact Object Headers
520: JFR Method Timing & Tracing
521: Generational Shenandoah


本帖依旧不欢迎刷 JDK 8 梗,JDK 8 已经发布 10 多年了。 ]]>
使用 Java 技术栈生成二维码 tag:www.v2ex.com,2025-09-13:/t/1159004 2025-09-13T10:37:26Z 2025-09-13T12:37:26Z Honwhy member/Honwhy 一般使用zxing 库就可以生成二维码了,但是要注意一个重要参数,ErrorCorrectionLevel 纠错能力等级,等级越高,内容码点越密集,纠错能力当然也越强(即使被遮挡了一部分也能还原)

<dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.5.2</version> </dependency> 
public enum ErrorCorrectionLevel { L(1), M(0), Q(3), H(2); } 

可以发现纠错等级越高,生成二维码的码点越密集。

左边 level=0 ,右边 level=3

| | |

如果为了生成更好一点的二维码,建议使用qrgen

<dependency> <groupId>com.github.aytchell</groupId> <artifactId>qrgen</artifactId> <version>3.0.0</version> </dependency> 

创建二维码

 private BufferedImage createRoundedQRCodeImage(String url, int width, int level) throws QrConfigurationException, NoSuchMethodException, InvocationTargetException, IllegalAccessException, WriterException { QrCodeRenderer qrCodeRenderer = new QrCodeRenderer(PixelStyle.ROWS, MarkerStyle.ROUND_CORNERS); ColorConfig colorCOnfig= new ColorConfig(new RgbValue(0, 0, 0), new RgbValue(255, 255, 255)); Map<EncodeHintType, Object> hints = new HashMap<>(); hints.put(EncodeHintType.ERROR_CORRECTION, getErrorCorrectionLevel(level)); return qrCodeRenderer.encodeAndRender(url, colorConfig, width, width, hints); } 

效果

--- 关于作者 ---

]]>
Springboot 项目部署到 docker 无法连通数据库 tag:www.v2ex.com,2025-09-12:/t/1158782 2025-09-12T05:55:55Z 2025-09-04T19:54:21Z puremaker member/puremaker macbook 装了 orbstrack ,用 docker 部署了 mysql 、redis 和 centos 。

我现在有两个 springboot 项目,这两个项目本地开发连接 docker 的 mysql 都没有问题。

然后都部署到同一个 centos 虚拟机里,都使用的是本电脑的局域网 ip 连接的数据库,一个可以正常访问到数据库,一个就访问不到,确认了链接 url 除了库名都是一样的,想请教一下这能是什么原因呢?

]]>
有写 Java 的么,你们的 jdk 还是用 1.8 么 tag:www.v2ex.com,2025-09-05:/t/1157327 2025-09-05T07:14:07Z 2025-09-08T05:02:22Z mystical member/mystical 查了一下 jdk ,jdk21 。最新的已经出道 24 了。之前听说 1.8 以后收费,现在后面已经有很多免费版本了。 ]]> 即时通讯工具推荐 tag:www.v2ex.com,2025-09-03:/t/1156824 2025-09-03T07:18:06Z 2025-09-07T02:16:41Z rainfy member/rainfy 公司想在自营产品中嵌入一个即时通讯工具,希望支持发文字、语音、视频。 希望支持 sdk 接入,ui 自己画。 求各位大佬推荐~

]]>
cursor 替换 idea 作为 Java 主力开发工具 tag:www.v2ex.com,2025-08-19:/t/1153539 2025-08-19T13:21:49Z 2025-08-24T20:47:49Z lookupsky member/lookupsky cursor 占用内存相对来说比 idea 小(吐槽一下公司配置的 32G 都不够用,有时候要研究关掉一些软件腾出内存),其次代码内嵌提示和 agent 及代码分析极大提升开发效率而且响应快(对比 codeium),现在 vscode 生态的软件对 java 开发的支持度还是挺高的

核心插件

Extension Pack for Java 和 Spring Boot Extension Pack

插件配置 setting.json "java.configuration.runtimes": [ { "name": "JavaSE-1.8", "path": "D:\\xxxx\\xxxx\\jdk8-271", "default": true //项目默认运行 jdk 版本 }, { "name": "JavaSE-17", "path": "D:\\xxxx\\xxxx\\jdk-17.0.3.1" } ] // Extension Pack for Java 插件服务运行在高版本 jdk 上(jdk9+) "java.jdt.ls.java.home": "D:\\xxxx\\xxxx\\jdk-17.0.3.1", // Spring Boot Extension Pack 插件服务运行在高版本 jdk 上(jdk9+) "spring-boot.ls.java.home": "D:\\xxxx\\xxxx\\jdk-17.0.3.1", // 配置 maven 操作 "java.configuration.maven.userSettings": "D:\\xxxx\\settings.xml", //自定义仓库存储地址 "java.configuration.maven.globalSettings": "D:\\xxxx\\settings.xml",//自定义仓库存储地址(全局) "maven.executable.path": "D:\\xxxx\\apache-maven-3.8.2\\bin\\mvn", //自定义 mvn 命令地址 

辅助插件:

git graph //代码管理 IntelliJ IDEA Keybindings //idea 快捷键映射,ctrl+shift+p 打开"键盘快捷方式"映射自定义修改 mybatis-tools //mybatis 或 plus 的文件.xml 和.java 快速跳转 Copy Reference //快速复制类或方法的包路径 

其他:

]]>
OracleJDK 21 收费问题 tag:www.v2ex.com,2025-08-19:/t/1153444 2025-08-19T07:07:58Z 2025-08-19T10:47:59Z oblax member/oblax 这是官网的写法: Java SE Development Kit 21.0.8 downloads JDK 21 binaries are free to use in production and free to redistribute, at no cost, under the Oracle No-Fee Terms and Conditions (NFTC).

JDK 21 will receive updates under the NFTC, until September 2026, a year after the release of the next LTS. Subsequent JDK 21 updates will be licensed under the Java SE OTN License (OTN) and production use beyond the limited free grants of the OTN license will require a fee.

严格翻译的话,似乎收费的只有“Subsequent JDK 21 updates”,只要不更新就不收费,问了几个大模型也都这么说。 但是在网上搜索,似乎是按时间收费的说法居多,即三年免费期一过就会开始收费。

]]>
有没有比较了解 GraalVM 的,想问下适合本地开发调试吗? tag:www.v2ex.com,2025-08-13:/t/1152181 2025-08-13T11:16:32Z 2025-08-13T22:17:40Z NotoChen member/NotoChen 目前在用的是 bellsoft liberica jdk

之前也用过 IBM 的 OpenJ9

其他各类厂商的 JDK 也多多少少都试过,感觉并没有很明显的提升

甚至有的 JDK 跑出来,还有编码问题,日志都是乱码的

还有类似 SSL 的支持兼容问题

看各类文档,总说启动快快快,内存省省省

想知道是不是属实

总的来说,目前用的 bellsoft liberica jdk 基本没出过问题,我的 mac ,windows 还有 linux 服务器,几乎都是用的这个,甚至 docker 镜像也都是找的 bellsoft

]]>
spring boot3.0 应该怎么选择工作流 tag:www.v2ex.com,2025-08-13:/t/1152091 2025-08-13T06:08:07Z 2025-08-13T12:26:34Z vdrapb member/vdrapb 最近从零开发了一个项目,项目中经常会遇到审核相关的东西。我想着能不能引入一个工作流到系统中,设计系统每个业务的审核流程,以前没搞过工作流的项目,怎么使用也不太熟悉,请问各位大佬有没有什么好的建议,或者有没有开源的项目可以学习一下

]]>
学习 Jackson 封装时候遇到一个泛型问题希望大牛能帮忙解惑 tag:www.v2ex.com,2025-08-12:/t/1151881 2025-08-12T09:28:04Z 2025-08-13T18:21:19Z puremaker member/puremaker 封装一个转指定实体类 list 的方法,有如下两种

public static <T> List<T> parseList(String jsonString, Class<T> elementClazz) throws Exception { ObjectMapper mapper = new ObjectMapper(); TypeReference<List<T>> typeReference = new TypeReference<List<T>>() {}; return mapper.readValue(jsonString, typeReference); } 
public static <T> List<T> parseList(String jsonString, TypeReference<List<T>> typeReference) throws Exception { ObjectMapper mapper = new ObjectMapper(); return mapper.readValue(jsonString, typeReference); } 
public static void main(String[] args) throws Exception { String jsOnListStr= "[{\"username\":\"pure1\",\"phone\":\"18xxx\"},{\"username\":\"pure2\",\"phone\":\"19xxx\"}]"; List<User> userList1 = parseList(jsonListStr, User.class); List<User> userList2 = parseList(jsonListStr, new TypeReference<List<User>>(){}); } 

两个转完的 list 里,第一个 list 里的对象在断点里看实际上是个LinkedHashMap ,是无法正常调用实体类的 get 方法的。第二个 list 里的对象就是真正的User。所以我分别去看了两个方法的 typeReference 对象,第一个方法的 typeReference 对象里的_type 值为“java.util.List<T>”,第二个方法里的 typeReference 对象里的_type 值为“java.util.List<xxx.xxx.entity.User>”。虽然第二个方法可以正常使用,但是封装肯定是为了简便,以TypeReference<List<T>> typeReference作为入参感觉很奇怪,我底层了解的不多,我的认知里在入参的时候 new 一个 TypeReference 和在方法里 new 一个 TypeReference 应该是一样的才对。希望有大牛帮我解惑,或者是不是我第一个方法的代码写的有问题。

在此先谢谢各位了!!!

]]>
写了 3 天 go,我想念 Java 了 tag:www.v2ex.com,2025-08-08:/t/1151046 2025-08-08T08:07:06Z 2025-08-11T21:37:19Z exploretheworld member/exploretheworld


不适合写复杂业务,一个注解能搞定的事情,必要要去自己弄,增加太多不必要的工时。



只能说搞到最后大家都是在拆东墙补西墙,大家只能按照实际情况各取所需,所谓的银弹根本不存在。 ]]>
高德 Web 接口 IP 定位的一个坑,希望大家别踩。 tag:www.v2ex.com,2025-08-05:/t/1150093 2025-08-05T06:57:03Z 2025-08-06T03:34:22Z kelololy member/kelololy 背景: 系统中记录 打卡功能,需要记录 ip 和地址,因为买的有高德的基础 vip ,所以选择了高德定位接口:

问题: 用户发现自己打卡位置在焦作,但系统显示位置在信阳;通过网页端高德 api ,发现高德的接口确实返回错误

高德 API: https://restapi.amap.com/v3/ip?key=xx&ip=xx ip 地址为:223.90.35.17 (实际为河南焦作,但高德返回为信阳)

lz 除了高德,分别试了腾讯、ip138 、ip2region(开源) 这三者都没问题

目前已经将该问题提给客服,客户说是会给产品团队;

** 这边给需要使用地图服务和已经使用高德 api 服务的各位提个醒 **

]]>
为什么 Oracle 有些 JavaSE 版本收费有些不收费?最新的反而不收费 tag:www.v2ex.com,2025-08-02:/t/1149518 2025-08-02T13:55:09Z 2025-08-02T15:07:42Z nnegier member/nnegier
刚刚我打开 Oracle Java Downloads 页面,看到最新版本 24 和 21 ( LTS )均不收费,我往下翻,翻到 11 又要收费。

https://www.oracle.com/cn/java/technologies/downloads/#java21
https://www.oracle.com/cn/java/technologies/downloads/#java11 ]]>
请教关于私有化前后端一键部署的一些问题。 tag:www.v2ex.com,2025-07-31:/t/1149095 2025-07-31T09:55:52Z 2025-07-31T20:56:21Z heiya member/heiya
  • 技术选型:前端是 Vue ,后端是 SpringBoot+Mysql+Redis+Minio ( OSS ),版本控制是 git ,项目管理是 maven 。
  • 要求:能做到在客户不通外网的普通电脑主机上进行一键部署,开箱即用;且还有一个要求,假设后端有 A 、B 、C 、D 四个功能,每个客户需要的功能是 A 、B 、C 、D 四个功能的不同组合,如果需要 A 、B,则不能包含 CD 的代码,让删掉这些代码!!!但很可能逻辑有交织。
  • 自己能想到的办法:1.对于一键化部署需要通过 docker 、docker compose 去做,缺点就是需要安装这些东西,但客户很多都是非技术人员。2.不同功能的组合,代码不能删除,通过拆分不同模块的办法进行解耦,对逻辑有交织的部分面向接口编程。最后在打包时根据需求进行模块的聚合。
  • 这是目前自己能够想到的,还有什么更优解吗?请赐教
  • ]]>
    谁知道 trae 国际版 pro 用户兑换 solo 模式的激活码通道在那里 tag:www.v2ex.com,2025-07-19:/t/1146309 2025-07-19T07:03:15Z 2025-07-22T20:07:18Z XDiLa member/XDiLa 今天 trae 更新了 solo 模式 看起来很好用,虽然还说了 pro 用户可以兑换使用,但是没找到通道。你们谁知道吗

    ]]>
    不懂就问 就 Java 来说 APP 的后端开发 和 web 的后端开发有区别吗 tag:www.v2ex.com,2025-07-18:/t/1146086 2025-07-18T04:35:40Z 2025-07-18T18:06:12Z Dmumuxi member/Dmumuxi 兄弟们 现在 windows 下管理多版本的 jdk 最优解是什么呢 tag:www.v2ex.com,2025-07-16:/t/1145667 2025-07-16T13:06:24Z 2025-07-20T15:09:27Z Ghostisbored member/Ghostisbored 1 、直接在 windows 下安装多个版本 但是这样会出现一个问题 高版本的 jdk 会覆盖低版本的一些环境变量
    比如 idea 直接读到的是高版本 哪怕切换到低版本的路径也有一些问题
    2 、wsl 方案 在 wsl 中使用 sdkman 安装多版本 idea 指向对应的 jdk 安装路径 ,但是这样有非常多的兼容问题 比如 windows 读取 liunx 的文件路径经常读取不到 maven 编译也有各种兼容问题
    所以想问问大家的大家怎么管理的 谢谢 ]]>
    请教关于 spring-boot-devtools 的问题 tag:www.v2ex.com,2025-07-04:/t/1143059 2025-07-04T08:33:00Z 2025-07-10T16:05:32Z JYii member/JYii
    而且重启依旧如此,只能 mvn clean install 后启动应用才正常。

    观察日志,修改代码编译后,devtools 会重启应用,没任何有价值的日志,跟正常启动差不多,打开 debug 日志,交给 gemini 分析:

    您的项目中存在某个组件(很可能是一个我们没找到的、行为不当的自定义线程池或第三方库),这个组件导致了 Spring 应用上下文 无法被干净地关闭。
    * 当 DevTools 尝试进行 Restart 时,它在这个“关闭上下文”的步骤上失败了(正如我们日志中看到的,数据库连接池没有被关闭),导致整个应用处于一种“僵尸”状态。

    尝试找了项目中可能未正确关闭的代码,线程池、threadlocal 等等,还有第三方依赖,这属实范围难度有点大,索性就把 devtool 注释了。
    关闭后,通过 idea 的自动编译,反而可以正常工作了。

    这个 devtool 是我没有使用好吗,搜了下主要是自动重启、静态资源刷新(前后端分离直接忽略)

    环境:idea 最新版,jdk17 ,springboot 最新版 ]]>
    胡思乱想(针对企业的 ai 平台应用) tag:www.v2ex.com,2025-06-30:/t/1142096 2025-06-30T15:06:07Z 2025-07-01T06:18:27Z Misty99 member/Misty99 想做一个针对企业的 ai 平台应用

    1. 通过聊天的形式发起一些业务操作
    2. 数据报表生成(各类文档)

    简化一些通用性的操作吧 不用登录对应的系统就可以进行一些操作 企业多系统之间也可以有关联

    ]]>
    打算做一个 Docker 应用,用 Java 写,数据存储选型求有经验的大佬分析。 tag:www.v2ex.com,2025-06-27:/t/1141489 2025-06-27T08:03:13Z 2025-06-27T15:18:18Z cookii member/cookii 面向普通人,不考虑把程序做复杂化,考虑用嵌入式数据库,比如 H2 ,开箱即用,一个镜像即可搞定。

    主要是用来储存用户的一些配置信息,还有程序的运行日志(日志可能会到 100k/day 级别),定期清理日志(90day/180day?)

    目前有几个疑问:

    目标是让程序尽可能的可靠,可以容忍日志丢失之类的情况,但程序至少需要正常运行。

    ]]>
    Java 中 ThreadLocalMap 里对值的引用为什么不是弱引用?难道会出现 ThreadLocalMap.Entry.Key 也就是 ThreadLocal 应当销毁,但值不应当销毁的情况? tag:www.v2ex.com,2025-06-27:/t/1141413 2025-06-27T03:10:34Z 2025-06-27T03:57:07Z BraveXaiver member/BraveXaiver
    既然如此那后者不应该也一起被回收,进而使用弱引用?

    谢谢 ]]>
    SpringCloudGateway 已经支持了接口的限流和熔断降级,那么还需要在业务层接口做熔断降级限流处理吗? tag:www.v2ex.com,2025-06-25:/t/1141061 2025-06-25T12:45:41Z 2025-06-29T15:18:36Z qinghuazs member/qinghuazs 咨询一个技术问题,SpringCloud Gateway 已经支持了接口的限流和熔断降级,那么还需要在业务层接口做熔断降级限流处理吗? 假设内部接口调用也走网关的情况下,网关层已经能够做到业务层的限流降级,此时业务层可以不关注限流降级的这类非功能性需求,重点关注业务逻辑即可; 但是另一方面,业务层做限流降级的话,可以对接口进行更精细化的控制,但是对代码是有入侵性的,而且还得兼顾动态化配置,而网关支持动态配置也更容易。 希望能看看大家都是怎么做的?

    ]]>
    hutool 还能继续使用吗?怕投毒。有没有替代的,或者最后一个可用版本是什么 tag:www.v2ex.com,2025-06-22:/t/1140263 2025-06-22T09:57:49Z 2025-06-23T07:53:26Z xiguaprince member/xiguaprince 旧闻: Vert.x 5 发布 tag:www.v2ex.com,2025-06-21:/t/1140092 2025-06-21T06:13:06Z 2025-06-22T03:35:19Z yazinnnn0 member/yazinnnn0 https://vertx.io/blog/eclipse-vert-x-5-released/

    What's new in Vert.x 5
    Embracing the future based model
    OpenAPI & Vert.x OpenAPI Router
    io_uring support


    vertx 以性能强悍+难写难理解著称, 貌似没有成为过大公司的主流框架, 国内(圆神除外)也没听说过有公司大规模使用过 ]]>
    通过 AI 实现各种框架的基础版本(如 tiny-xxx) tag:www.v2ex.com,2025-06-20:/t/1139953 2025-06-20T08:47:08Z 2025-06-20T15:14:17Z CharlieYu member/CharlieYu 之前在网上看到一些从零实现某某框架或者某某中间件的开源仓库,但是自己动手的话其实需要花不少时间,并且有时候碰到一些不懂的用法概念断断续续的没法很流畅地学下去。最近发现用 AI 来写 边写边问并且让他给一些核心的代码部分给自己实现整体的效果还不错。 贴几个例子: tiny-spring: https://github.com/yuhangbin/tiny-spring tiny-jvm: https://github.com/yuhangbin/tiny-jvm/tree/java

    ]]>
    原来断点打多了也卡… tag:www.v2ex.com,2025-06-19:/t/1139591 2025-06-19T01:51:38Z 2025-06-19T21:18:22Z miaeLKK member/miaeLKK
    大家有类似的经历吗?说出来避避坑 ]]>
    Java 开发,目前快 3 年经验,怎么才能提升自己的技术能力, V 友们有什么学习的经验吗,求指点 tag:www.v2ex.com,2025-06-09:/t/1137478 2025-06-09T14:55:07Z 2025-06-13T08:31:54Z myTrip member/myTrip 异步架构的设计困惑 tag:www.v2ex.com,2025-06-01:/t/1135758 2025-06-01T14:31:43Z 2025-06-02T00:26:35Z LiJavaT member/LiJavaT 背景:这个功能是一个快手广告批量搭建的一个功能里面涉及的流程就是点击运行搭建,上传视频素材,然后到轮训广告素材是否在快手广告素材库转吗并且审核通过,轮询完全部的素材之后,走搭建广告的逻辑。

    我现在具体实现就是,用户点击运行,会先发送消息到一个分发的消息队列里,这个分发的消息队列用分发这个需要上传素材,然后发送消息到上传素材队列,这个上传素材队列的消费者是集群模式,上传完成一个会调用回掉队列,然后回掉队列监听到全部素材都完成,走轮询,然后轮询完成,发送消息搭建广告。

    这个是一个流程图: image.jpg

    困惑就是目前需要很多团队来使用功能,如何吧 mq 队列根据团队拆分,还有执行速度,以及服务器的划分,我这个方式是否合理,大家还有更好的方案吗

    ]]>
    请教各位 Java 有没有按照模板从 excel 获取数据的 tag:www.v2ex.com,2025-05-28:/t/1135011 2025-05-28T14:27:10Z 2025-05-28T21:17:36Z b1gCi member/b1gCi 最近遇到一个需求,里面有很复杂的 excel 内容读取: 0. excel 文件内容类型很多种

    1. 每个 excel 文件有多个 sheet
    2. sheet 内出现可能多个表格,行数不固定
    3. 有的表格是行表头,有的是列做表头。

    看市面上的库基本都是模板写入 excel 的,各位彦祖有没有推荐能支持的从模板读取 excel 的?

    或者有其他更好的解决方案?

    不行只能硬编码了 : <

    ]]>
    问一个 Java 查询过滤器的问题 tag:www.v2ex.com,2025-05-23:/t/1133765 2025-05-23T03:15:08Z 2025-05-23T11:50:31Z ZGame member/ZGame 我希望实现类似 链式查询

    伪代码 c#的

    Db.From<UserTable>() .LeftJoin<DeptTable>((user,dept )=>user.id==dept.userId) .Select((user,dept)=>new UserDto(){ UserName=user.Name, DeptName=dept.Name }) .FilterWhere(input.rules)

    input.rules = [{field:'UserName',condition:'eq',value:'张三'}]

    类似这样效果的 java 应该怎么做 ,看了 mabatis-plus 好像没看到类似的 api

    ]]>
    Java 三十周年 tag:www.v2ex.com,2025-05-23:/t/1133691 2025-05-23T00:59:00Z 2025-06-03T05:39:55Z rainmint member/rainmint 今天是 Java 诞生 30 周年的日子。

    时间过得真快,转眼我与 Java 相识也已有十一年。2014 年,那时候我刚刚接触 Java ,一开始只是觉得“Hello World”挺神奇,但没想到,这门语言会陪我走过这么多重要的时刻。 Java 诞生 30 周年

    ]]>
    使用 SMTP 协议发送邮件问题求教,我自己是真解决不了 tag:www.v2ex.com,2025-05-19:/t/1132845 2025-05-19T12:13:18Z 2025-05-20T04:19:59Z tiRolin member/tiRolin 现在有要求如下

    websocket 连接/smtp 端点,模拟 SMTP 协议发送邮件,发件地址: test@mine.com ,收件地址 test@nullht.com ,邮件内容 Hello World 。请注意:大小写敏感,websocket 连接仅保留 1 分钟左右,断了需要重连并重头发送 SMTP 命令

    可以确定发送的地址是 wss://interview-test.nullht.com/smtp

    我按照他的要求,写出了下面的代码,其他的不重要,我们直接看我发送请求的格式

     private void initializeCommands() { commandQueue.clear(); commandQueue.add("EHLO mine.com\r\n"); commandQueue.add("MAIL FROM:<test@mine.com>\r\n"); commandQueue.add("RCPT TO:<test@nullht.com>\r\n"); commandQueue.add("DATA\r\n"); // 注意:邮件内容需要包含完整格式 commandQueue.add( "From: test@mine.com\r\n" + "To: test@nullht.com\r\n" + "Subject: Hello\r\n" + "\r\n" + // 空行分隔头部和正文 "Hello World\r\n" + ".\r\n" // 结束符 ); commandQueue.add("QUIT\r\n"); } 

    这个代码可以得到下面的响应:

    Sending command: EHLO mine.com Server response: 220 邮件服务器准备就绪 Server response: 250 很高兴认识你 Sending command: MAIL FROM:<test@mine.com> Server response: 250 发件人已接受 Sending command: RCPT TO:<test@nullht.com> Server response: 250 收件人已接受 Sending command: DATA Server response: 500 命令不被识别 

    显然是 DATA 后的内容有问题,其他的都没毛病。但是我参照下面的教程

    https://blog.csdn.net/weixin_39833509/article/details/88965720

    感觉这个格式也没问题啊,我试了好久了都没搞出来到底哪里有问题,什么 AI 、谷歌全试过了,有没有大佬救一下,小弟我是真不行了,我先谢谢各位了

    ]]>
    有个线程池奇怪的问题,不知道有人遇到过没 tag:www.v2ex.com,2025-05-19:/t/1132656 2025-05-19T02:32:28Z 2025-05-19T10:46:19Z asp1111 member/asp1111 这也太奇怪,难道说 jvm 会倾向于运行上下文切换次数少的线程? ]]> 和大模型对接的 Java 位置多吗 tag:www.v2ex.com,2025-05-14:/t/1131605 2025-05-14T01:47:37Z 2025-05-21T06:47:08Z exploretheworld member/exploretheworld Java Spring 全家桶是哪些? tag:www.v2ex.com,2025-05-12:/t/1131211 2025-05-12T08:22:25Z 2025-05-12T12:40:23Z chanlk member/chanlk 我这里看到一个组合是:
    Nacos 、OpenFeign 、Sentinel 、SpringCloud Gateway 、Seata 。 ]]>
    关于 RocketMQ 的一个 ConsumerGroup 订阅多个 Topic 的问题 tag:www.v2ex.com,2025-05-05:/t/1129753 2025-05-05T13:45:33Z 2025-05-05T19:11:00Z deku9 member/deku9 详情见链接: https://juejin.cn/post/7111304477180706830
    最后该作者得出的结论是:同一个 ConsumerGroup 多个 topic ,消息消费的时候,同一个 ComsumerGroup 只有一个 Consumer 可以消费,但是我们监听上写死了 topic ,其他的 topic 是监听不到的。
    但是我还是不太能理解,有无大佬能解释一哈 ]]>
    微信支付 Java sdk 这个设计是不是有点奇怪 tag:www.v2ex.com,2025-04-30:/t/1129182 2025-04-30T09:04:44Z 2025-04-10T08:59:44Z bestmos member/bestmos 坐标

    <groupId>com.github.wechatpay-apiv3</groupId> <artifactId>wechatpay-java</artifactId> 

    他在 app/jsapi/native 等支付中,每个交易类型一个单独的包,里面放对象 每个包一个 Transaction 类,支付回调时又拿不到是哪个类型的交易,应该用哪个包下的 Transaction 接回调的结果

    伪代码

    import com.wechat.pay.java.service.partnerpayments.nativepay.model.Transaction ; class{ Transaction transaction; try { RequestParam requestParam = WeChatUtil.handleNodifyRequestParam(request); transaction = notificationParser.parse(requestParam, Transaction.class); log.info("支付回调信息: {}", transaction); } catch (IOException e) { throw new RuntimeException(e); } } 

    如果交易类型不是 nativepay 又得换别的包下的 Transaction ,这不太对吧 有没有佬踩过这个坑

    ]]>
    jdk 发行版大家生产环境和开发环境都用的是哪一家呢? tag:www.v2ex.com,2025-04-29:/t/1128779 2025-04-29T01:33:07Z 2025-04-29T20:00:56Z zx9481 member/zx9481 我用的是 Eclipse Temurin jdk8/17 https://adoptium.net/zh-CN/temurin/releases/

    ]]>
    IDEA mybatis 困扰很久的 xml SQL 格式化问题,想大家帮忙验证一下 tag:www.v2ex.com,2025-04-28:/t/1128619 2025-04-28T04:52:39Z 2025-04-28T06:08:13Z coollight56 member/coollight56 如果 sql 内不包含标签格式化没问题,比如下面这样

     <select id="getShareRoleUserId" resultType="com.agt.technology.component.role.pojo.po.RoleUserItem"> SELECT r.id, ur.user_id FROM agt_cim_role r JOIN agt_cim_user_role ur ON ur.role_id = r.id WHERE deleted = 0 AND r.type = 3 </select> 

    但是如果包含标签的话,就会想下面一样把所有行都齐平了

    <select id="getShareRoleUserId" resultType="com.agt.technology.component.role.pojo.po.RoleUserItem"> SELECT r.id, ur.user_id FROM agt_cim_role r JOIN agt_cim_user_role ur ON ur.role_id = r.id WHERE deleted = 0 AND r.type = 3 <if test="roleIds != null"> AND r.id in <foreach collection="roleIds" item="roleId" open="(" separator="," close=")"> #{roleId} </foreach> </if> </select> 

    我试过同事的电脑也是这样,是不是我们配置出了什么问题,大佬们帮我看看你们的格式化会这样吗

    ]]>
    如何 mybatisplus 项目中覆盖 jar 中的 mapper.xml 文件 tag:www.v2ex.com,2025-04-27:/t/1128440 2025-04-27T09:10:25Z 2025-03-20T04:26:16Z iv8d member/iv8d
    mybatis plus 里的 xml 文件,如何本地工程里的覆盖 jar 里的 mapper.xml 。
    class 文件可以在相同路径写个同名的,就能覆盖 jar 里对应的 class 。mapper.xml 文件如何覆盖 jar 里对应的呢。 ]]>
    Java 项目大家都用什么第三方库啊,各位大佬说说 tag:www.v2ex.com,2025-04-25:/t/1128005 2025-04-25T05:22:36Z 2025-05-28T18:22:45Z helloword001 member/helloword001 权限模型中的 基于角色的访问控制(RBAC)和基于属性的访问控制(ABAC)这两种怎么结合一起使用 tag:www.v2ex.com,2025-04-21:/t/1127113 2025-04-21T13:59:20Z 2025-04-22T07:02:24Z Misty99 member/Misty99 大佬们 这两种权限模型 一般什么业务场景下 会需要一起结合使用 ABAC 我的理解就是基于用户相关的一些信息属性进行控制的

    ]]>
    应用出现 corrupted double-linked list (not small),自动退出 tag:www.v2ex.com,2025-04-18:/t/1126362 2025-04-18T01:15:08Z 2025-04-18T01:14:08Z Hyson2023 member/Hyson2023 openjdk 版本:11.0.18 errorFile 没有生成异常的 log 文件,也没有 oom 日志,有大佬遇到过一样的情况么。

    ]]>
    UUID v7 目前 JDK 有提供实现么?没有的话大家一般用什么第三方 library? tag:www.v2ex.com,2025-04-18:/t/1126358 2025-04-18T01:10:47Z 2025-04-30T06:07:08Z BraveXaiver member/BraveXaiver 我们有一个小程序是用 spring 写的后端,其中涉及到后端服务往微信服务器发请求包的过程,这个包最近主要是被 waf 拦截,有没有什么办法可以看到后端给微信服务器发送的请求包内容。 tag:www.v2ex.com,2025-04-17:/t/1126110 2025-04-17T03:11:47Z 2025-04-17T10:10:34Z skytenlc member/skytenlc jdk24 com.sun.tools.javac.code.TypeTag :: UNKNOWN 解决方案 tag:www.v2ex.com,2025-04-15:/t/1125714 2025-04-15T15:14:05Z 2025-04-15T15:14:05Z abc0123xyz member/abc0123xyz java: java.lang.ExceptionInInitializerError com.sun.tools.javac.code.TypeTag :: UNKNOWN

    可以尝试检查 lombok 版本,使用 1.18.38 及以上版本

    https://projectlombok.org/changelog

    Lombok Changelog
    v1.18.38 (March 31st, 2025)

    https://github.com/projectlombok/lombok/issues/3814
    https://youtrack.jetbrains.com/issue/IDEA-370086

    ]]>
    rocketmq 5.x 版本是不是已经不支持 namespace 的功能? tag:www.v2ex.com,2025-04-15:/t/1125580 2025-04-15T06:06:37Z 2025-04-15T11:47:17Z ccw4wcc member/ccw4wcc 求助: Java 项目自动生成接口文档 tag:www.v2ex.com,2025-04-15:/t/1125549 2025-04-15T03:32:08Z 2025-04-19T20:54:52Z qianyeyixi member/qianyeyixi <dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-ui</artifactId>
    <version>1.6.14</version>
    <!-- 专为 Spring Boot 2.0.x 适配的版本 -->
    </dependency>
    ```
    项目配置了这个,但是接口都没注解怎么改动最小的情况下生成注释 ]]>
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86