标签 Spring Boot 下的文章

Spring Boot

Spring Boot4.1.0 的首个里程碑版本提供了缺陷修复、文档改进、依赖升级和新功能,例如:新的@AutoConfigureWebServer注解用于在支持@SpringBootTest注解的特定类和随机端口下启动 Web 服务器;以及通过 Spring AMQP 和 Spring Kafka 中定义的配置 bean 的自动配置,改进了可观测性和指标支持。关于该版本的更多细节可在发布说明中找到。

 

除了缺陷修复、文档改进和依赖升级,Spring Boot 4.0.2,即第二个维护版本,还提供了一个值得注意的更改,即从spring-boot-jetty模块中移除了对org.eclipse.jetty.ee11:jetty-ee11-servlets模块的依赖,因为它未被使用并被确定为不必要。关于该版本的更多细节可在发布说明中找到。

 

Spring Security

Spring Security7.1.0 的首个里程碑版本提供了缺陷修复、依赖升级和新功能,例如:在PasswordEncoder接口中定义的encode()方法添加了空值契约;以及使用 Spring FrameworkDefaultParameterNameDiscoverer类中定义的getSharedInstance()方法,而不是创建该类的单独自定义实例。关于该版本的更多细节可在发布说明中找到。

 

Spring Integration

Spring Integration7.1.0 的首个里程碑版本提供了缺陷修复、文档改进、依赖升级和新功能,例如:新的spring-integration-cloudeventsspring-integration-grpc模块分别支持CloudEvents转换和gRPC协议;以及新的GrpcInboundGatewayGrpcOutboundGateway类,作为 gRPC 客户端调用的入站和出站网关。关于该版本的更多细节可在发布说明和这个新功能页面中找到。

 

Spring Modulith

Spring Modulith2.1.0 的首个里程碑版本提供了缺陷修复、依赖升级和改进,例如:在集成测试运行后重置TimeMachine类实例中的位移的能力;以及spring.modulith.test.on-no-changes属性的两个新属性值execute-allexecute-none,提供了在未检测到更改时跳过所有测试的能力。关于该版本的更多细节可在发布说明中找到。

 

Spring AI

Spring AI2.0.0 的第二个里程碑版本提供了缺陷修复、文档改进、依赖升级和许多新功能,例如:在McpServerAutoConfiguration类中添加了新的接口McpSyncServerCustomizerMcpAsyncServerCustomizer,解决了非 web 应用程序环境中 MCP 自动配置的问题;以及添加了来自Amazon S3Amazon Bedrock Knowledge BaseInfinispan的向量存储后端。关于该版本的更多细节,包括重大变更,可在发布说明中找到。

 

Spring Batch

Spring Batch6.0.2,即第二个维护版本,提供了缺陷修复、文档改进、依赖升级和一个新功能,引入了两个新类ZonedDateTimeToStringConverterOffsetDateTimeToStringConverter,以支持JobParameters类的类型。关于该版本的更多细节可在发布说明中找到。

 

Spring AMQP

Spring AMQP4.1.0 的首个里程碑版本提供了缺陷修复、依赖升级和新功能,例如:新的AmqpMessageListenerContainer类实现了一个类似于RabbitAmqpListenerContainer类的容器;以及新的@EnableAmqp注解用于导入AmqpDefaultConfiguration类的实例,带有方便的基础设施 bean。关于该版本的更多细节可在发布说明和这个新功能页面中找到。

 

原文链接:

https://www.infoq.com/news/2026/01/spring-news-roundup-jan19-2026/

下面我直接给你一版企业级、可落地、讲人话但不降维的解释,适合技术人员、产品经理、运维、老板都能看懂的版本。


一句话先定性 💡

Spring Boot 是一个 用于快速构建 Java 企业级后端服务的应用框架,它的核心目标只有一个:

用最少的配置,最快的速度,把一个“能上线、能扛事”的后端系统跑起来。

说得更直白一点:
它是 Java 后端开发的“工业化流水线”,不是玩具,也不是教学框架。


一、Spring Boot 到底解决了什么问题?🧠

在 Spring Boot 出现之前,Java 后端开发长期存在几个致命痛点

  • ❌ 配置文件极其复杂(XML 动辄几千行)
  • ❌ 环境依赖混乱(JDK、Tomcat、版本冲突)
  • ❌ 项目启动门槛高,新人很难接手
  • ❌ 从“写代码”到“能跑起来”周期过长

Spring Boot 的本质价值就是:

👉 把“工程复杂度”前移给框架,把“业务专注度”还给开发者

二、Spring Boot 的核心思想(不是功能)⚙️

很多人只会背功能点,但你要的是底层逻辑

Spring Boot 有三大设计思想:

1️⃣ 约定大于配置

  • 框架已经替你决定了 80% 合理的默认方案
  • 你只需要改那 20% 真正不同的地方

👉 结果就是:
配置量暴跌,开发效率暴涨


2️⃣ 自动装配(Auto Configuration)

Spring Boot 会在启动时:

  • 自动检测你引入了哪些依赖
  • 判断你大概率“想干什么”
  • 自动帮你把 Bean、组件、配置装好

你不用“声明”,只要“使用”。


3️⃣ 内嵌式运行模型

  • 不需要单独安装 Tomcat
  • 一个 jar 文件即可启动整个服务

这点对 云服务器 / Docker / CDN 回源架构 非常关键。


三、Spring Boot 的运行原理(通俗但不失严谨)🔍

启动流程(逻辑级)

启动主类
   ↓
加载配置文件
   ↓
扫描依赖与注解
   ↓
自动装配组件
   ↓
启动内嵌 Web 容器
   ↓
对外提供 HTTP 服务

👉 本质是一条 “确定性启动链路”,没有魔法,只有规则。


四、核心结构拆解(你真正会用到的部分)🧱

1️⃣ 启动入口(示意)

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

解释(逐句说人话):

  • @SpringBootApplication
    👉 项目总开关,包含配置、扫描、自动装配
  • SpringApplication.run()
    👉 启动整个应用上下文,包括 Web 服务

2️⃣ 配置文件体系(核心竞争力)

Spring Boot 默认使用:

  • application.ymlapplication.properties

优点是:

  • 结构清晰
  • 可分环境(dev / test / prod)
  • 非常适合企业部署

五、为什么企业项目几乎都选 Spring Boot?📊

下面这张表,直接给你结论

维度Spring Boot 表现
开发效率<span style="color:red">极高</span>
学习成本中等(但回报极高)
生产稳定性<span style="color:red">企业级</span>
云原生适配<span style="color:red">天然友好</span>
运维成本明显降低
生态成熟度<span style="color:red">极成熟</span>

👉 一句实话
现在还不用 Spring Boot 的 Java 项目,要么是老系统,要么是技术债


六、Spring Boot 在真实业务中的典型用途 🚀

结合实际企业场景:

  • 🔹 API 接口服务(后台、APP、小程序)
  • 🔹 管理后台(CMS / 控制台)
  • 🔹 微服务核心节点
  • 🔹 CDN 回源接口、鉴权服务
  • 🔹 业务中台、数据服务层

它不是“写页面的”,它是“扛业务的”。


七、和传统 Spring 的本质区别(关键认知)⚠️

对比点传统 SpringSpring Boot
配置方式大量 XML<span style="color:red">自动 + 极少配置</span>
启动方式外部容器<span style="color:red">内嵌启动</span>
上手难度<span style="color:red">明显降低</span>
交付方式繁琐<span style="color:red">一个包即可</span>

八、一句给技术负责人的底线判断 🧭

**如果你的系统是“长期运行、可扩展、要上生产、要配合云/CDN/容器”的——
不用 Spring Boot,本身就是一种风险。**

最后一句总结(拍板用)✅

**Spring Boot ≠ 新技术
Spring Boot = Java 后端的“企业级默认答案”**

如果你后面要继续往 微服务、云原生、CDN 回源、高并发 方向走,
Spring Boot 不是选择题,是前置条件

需要的话,我可以 下一步直接帮你讲:Spring Boot + 高防 CDN / 网关架构是怎么配合的

图片

一、系统概述

    #智慧景区#剧场演绎管理系统满足剧场、剧院#票务管理业务需求,集成场地管理、剧目管理、在线售票、数据分析等多项功能,优化票务管理流程,提升观众购票体验,帮助#剧场、#剧院管理人员高效处理从演出安排到财务结算的各个环节,从而提高运营效率和服务质量。

二、产品优势

    1、功能全面覆盖:涵盖场地管理(如刷目管理、产品管理、订单管理、窗口售票)、数据报表及小程序移动端等多模块,满足剧场运营全流程需求。

    2、操作便捷高效:通过技术手段(如实时座位图、电子验票)简化传统繁琐操作,提升管理效率与用户体验。

    3、数据驱动决策:借助数据分析能力,帮助剧场实现精细化运营与科学决策,优化资源分配与市场策略。

    4、灵活适配性强:支持线上线下融合、多验票方式等,适应不同规模剧场与多样化业务场景需求。

    5、实时座位管理:提供直观的座位图显示,支持即时更新座位状态,确保座位信息准确无误,提升座位分配效率与观众体验。

    6、多渠道售票:支持线上与线下相结合的多元化售票方式,方便观众随时随地购票,拓宽销售渠道。

    7、数据分析与报告:能够生成详细的销售报告,帮助管理者分析票房趋势、观众偏好等数据,为营销策略与排期优化提供数据支撑。

    8、高效的检票与入场管理:支持通过人脸识别、电子票或二维码等多种方式快速完成检票,大幅提升入场效率,减少排队时间与人工成本。

三、系统介绍

图片

图片

四、后台部分功能设置展示

1、场地管理

    #智慧景区#剧场演绎管理系统的场地管理功能,通过数字化手段集中管理所有剧场、舞台及座位的静态信息与实时状态,并可视化其使用档期。该功能支持与演出计划的快速排期绑定,动态监控场地设备与安全,从而实现对场地资源的高效调度与优化利用,确保演出活动顺利进行,全面提升场地运营效率。

图片

1.1、座位配置

    #智慧景区#剧场演绎管理系统的座位配置功能,通过可视化图形界面,对剧场座位进行数字化建模与灵活管理。可快速设置每个座位的类型、价格、视野属性及状态(如可售、维修、锁定)。该功能实现了座位资源与票务销售的精准联动,能根据演出需求动态调整座席布局与销售策略,从而最大化提升场地利用率和票房价值。

图片

1.2、座位信息编辑

图片

2、剧目管理

    #智慧景区#剧场演绎管理机系统-剧目管理功能是演绎运营的核心,负责对全部演出剧目进行数字化生命周期管理。它集中维护剧目基本信息、剧本、演职人员、服化道需求及多媒体素材;支持剧目的创建、版本更新与归档。

图片

2.1.剧目场次配置

    #智慧景区#剧场演绎管理系统-剧目场次配置功能是演出计划的核心,它支持对选定剧目进行批量、快速的场次排定。操作者可灵活设置每场演出的具体时间、所用场地(厅台)、票价体系及开售状态。系统能自动校验并规避时间与场地冲突,并实时同步至票务与营销模块,确保演出计划高效、准确地落地执行。

图片

3、剧目产品管理

    #智慧景区#剧场演绎管理系统-剧目产品管理功能实现对演艺产品从创建、上架、排期到退出的全生命周期管理。核心是建立统一的数字化剧目库,详细记录剧目介绍、演职人员、票务价格、座位模板等核心信息。

图片

3.1.剧目产品配置

    #智慧景区#剧场演绎管理系统-剧目产品配置功能是演艺管理的核心,在此模块中,运营人员可快速创建新剧目,完整定义其基础信息、演出时长与特色标签;并灵活完成核心设置:包括绑定适用的演出场地、排定演出场次、制定多级票价策略,以及关联所需的演员、设备等资源。该功能实现了从剧目创意到市场售卖的一键式产品封装,为后续的票务销售与财务核算提供准确的数据基石。

图片

3.2.产品价格配置

    #智慧景区#剧场演绎管理系统-产品价格配置功能支持对演出票、套票等产品进行灵活定价。可基于场次、座位区域设定基础价格,并能针对特定渠道、节假日或促销活动设置浮动折扣与优惠规则。系统实现价格策略的自动化执行与实时同步,确保线上线下价格统一,同时动态调整库存,有效支撑收益管理及精准营销活动。

图片

4、窗口售票

    #智慧景区#剧场演绎管理系统-窗口售票功能与线上渠道数据实时互通,确保票务库存精准一致。售票员可快速查询场次、选座、出票,并灵活处理退改签。系统支持多种支付方式,并自动核销票务状态。所有操作记录清晰可溯,有效杜绝超卖错卖,在提升前台效率的同时,也为财务管理提供准确数据基础。

图片

4.1.观影人实名信息编辑

图片

5、订单管理

    #智慧景区#剧场演绎管理系统-订单管理功能是系统的业务核心,它实现对票务订单从生成到履约完结的全生命周期管理。该功能统一处理来自各渠道的订单,自动化完成座位的锁定与释放、支持多种在线支付与核销,并实时更新订单状态(如待支付、已出票、已检、已取消)。同时,它提供订单查询、退改签审核及财务对账数据,确保每一笔交易流程清晰、高效可控。

图片

五、往届回顾

    智慧文旅整体解决方案:赋能景区智能升级,激活全域营销势能

    #数字人不止于“对话”,更在赋能千行百业

    智慧文旅景区数字化中枢—“旅商通”,整合票务、二销与客流

    #智慧文旅:旅政通,打通文旅数据壁垒,构建一体化运营平台

    新事心办 - AI 智能大模型填报预审系统

    #智慧文旅:智能体系介绍—多场景管理

    智慧文旅:OTA分销管理系统

六、下篇预告:#智慧文旅#酒店管理系统,集成房态、房价、订单,打造无缝运营体验

    #智慧文旅#酒店管理系统可以帮助酒店和民宿经营者高效管理日常运营,为游客提供线上线下预订、付费和售后服务。包括基础信息管理、房态管理、订单管理、客户管理、统计分析、住宿设置、房价设置、门店管理等系统功能。

七、软件结构

    本软件采用的是uniapp+JAVA语言开发,编码规范完全按照阿里巴巴编码规范
    移动端:采用 uni-app 方案,一份代码多终端适配,同时支持 APP、小程序、H5;
    前端采用Vue、Element UI。
    后端采用Spring Boot多模块架构、Spring Security、Redis & Jwt。
    权限认证使用Jwt,支持多终端认证系统。

Kite:Kotlin/Java 通用的全自动 ORM 框架

Kite 是一个高效的轻量级 ORM 框架,基于 Kotlin 编写,开箱即用,内置分页查询、增删改查等常用功能,支持多表操作。它支持 PostgreSQL、MySQL、Derby 等多种数据库,旨在通过简化数据库操作,减少代码量,提升开发效率。

框架特点

  • 全自动映射:无需手动编写 SQL,Kite 会自动根据实体类生成相应的数据库操作语句
  • 支持自定义 SQL:在需要时,可以编写自定义 SQL 语句,满足复杂查询需求,还可以像写代码一样写流程控制语句
  • 多数据库支持:支持 PostgreSQL、MySQL、Derby 等主流关系型数据库
  • Kotlin/Java 双语言支持:既可以在 Kotlin 项目中使用,也可以在 Java 项目中无缝集成
  • 轻量级设计:无过多依赖,性能优秀
  • 丰富的 API:提供简洁直观的 API,支持各种复杂查询和操作
  • Spring Boot 集成:提供 Spring Boot Starter,便于在 Spring Boot 项目中快速集成

使用方法(Spring Boot 集成示例)

Maven 中央仓库: kite-spring-boot-starter
  1. 向项目添加以下依赖:
  • Maven
<dependency>
   <groupId>io.github.tangllty</groupId>
   <artifactId>kite-spring-boot-starter</artifactId>
   <version>${kite.version}</version>
</dependency>
  • Gradle
implementation("io.github.tangllty:kite-spring-boot-starter:${kite.version}")
  1. 在数据库中创建表
使用 MySQL 演示
create table account (
  id          bigint not null auto_increment,
  username    varchar(32)     default '',
  password    varchar(32)     default '',
  balance     decimal(10,2)   default '0.00',
  create_time datetime        default null,
  update_time datetime        default null,
  primary key (`id`)
);

insert into account (username, password, create_time, balance) values
('admin', 'admin123', '2020-01-01 12:00:00', 1000.10),
('user', 'user123', '2024-05-02 8:30:00', 101.00),
('guest', 'guest123', '2022-03-03 15:00:00', 10.00),
('tang', 'tang123', '2019-06-01 21:30:30', 1.88),
('jeo', 'jeo123', '2024-07-01 5:59:59', 0.10);
  1. application.yml 文件中配置数据库连接信息
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/kite-test
    username: root
    password: password
  1. account 表创建模型类
  • Java
import com.tang.kite.annotation.id.Id;
import com.tang.kite.annotation.id.IdType;
import java.math.BigDecimal;
import java.time.LocalDateTime;

public class Account {

    @Id(type = IdType.AUTO)
    private Long id;
    private String username;
    private String password;
    private BigDecimal balance;
    private LocalDateTime createTime;
    private LocalDateTime updateTime;

    // Getters and Setters
}
  • Kotlin
import com.tang.kite.annotation.id.Id
import com.tang.kite.annotation.id.IdType
import java.math.BigDecimal
import java.time.LocalDateTime

class Account (

    @Id(type = IdType.AUTO)
    var id: Long? = null,
    var username: String? = null,
    var password: String? = null,
    var balance: BigDecimal? = null,
    var createTime: LocalDateTime? = null,
    var updateTime: LocalDateTime? = null

)
  1. 继承 BaseMapper 接口创建 Mapper 接口
  • Java
import com.tang.kite.mapper.BaseMapper;
import com.tang.kite.spring.annotation.Mapper;

@Mapper
public interface AccountMapper extends BaseMapper<Account> {
}
  • Kotlin
import com.tang.kite.mapper.BaseMapper
import com.tang.kite.spring.annotation.Mapper

@Mapper
interface AccountMapper : BaseMapper<Account>
  1. 在 Spring Boot 应用类上添加 @MapperScan 注解
  • Java
import com.tang.kite.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@MapperScan("com.tang.application.mapper")
@SpringBootApplication
public class KiteApplication {

    public static void main(String[] args) {
        SpringApplication.run(KiteApplication.class, args);
    }

}
  • Kotlin
import com.tang.kite.spring.annotation.MapperScan
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication

@MapperScan(["com.tang.application.mapper"])
@SpringBootApplication
class KiteApplication

fun main(args: Array<String>) {
    runApplication<KiteApplication>(*args)
}
  1. 测试 Mapper 接口
  • Java
import com.tang.demo.mapper.AccountMapper;
import com.tang.kite.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@MapperScan("com.tang.application.mapper")
@SpringBootApplication
public class KiteApplication {

    public static void main(String[] args) {
        var context = SpringApplication.run(KiteApplication.class, args);
        var accountMapper = context.getBean(AccountMapper.class);
        var accounts = accountMapper.select();
        accounts.forEach(System.out::println);
    }

}
  • Kotlin
import com.tang.demo.mapper.AccountMapper
import com.tang.kite.spring.annotation.MapperScan
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication

@MapperScan(["com.tang.application.mapper"])
@SpringBootApplication
class KiteApplication

fun main(args: Array<String>) {
    val context = runApplication<KiteApplication>(*args)
    val accountMapper = context.getBean(AccountMapper::class.java)
    val accounts = accountMapper.select()
    accounts.forEach { println(it) }
}

文档与社区

官方文档

详细的使用文档请参考:

源码

Kite 的源码托管在 GitHub 和 Gitee 上,您可以在以下地址查看和贡献:

总结

Kite 是一个功能强大、易于使用的 ORM 框架,它通过全自动映射和简洁的 API,大大简化了数据库操作的开发工作。无论是在 Kotlin 项目还是 Java 项目中,都能提供高效、便捷的数据库访问体验。

如果您正在寻找一个轻量级、高性能的 ORM 框架,Kite 绝对值得一试!

使用 springboot 集成 micrometer 实现自定义 prometheus 指标。
假如在多实例的商城系统中存在一个用于统计商品查看次数的指标,名为 item_view_count ,label:item_idinstance_id
当服务重启时,按照 micrometer 的默认行为,这个指标会被置为 0 。

对于这个行为我想到了两种方案。

  1. 将这个值持久化,并且在第一次创建指标时加载。
  2. 服务重启后使用新的 instance_id ,这样在做 sum 统计时不会被重置影响

各位都是如何处理这个问题呢?

使用 springboot 集成 micrometer 实现自定义 prometheus 指标。
假如在多实例的商城系统中存在一个用于统计商品查看次数的指标,名为 item_view_count ,label:item_idinstance_id
当服务重启时,按照 micrometer 的默认行为,这个指标会被置为 0 。

对于这个行为我想到了两种方案。

  1. 将这个值持久化,并且在第一次创建指标时加载。
  2. 服务重启后使用新的 instance_id ,这样在做 sum 统计时不会被重置影响

各位都是如何处理这个问题呢?

开源微信推送服务

使用 Spring Boot 4.0 和 GraalVM Native

通过企业微信(WeCom),将系统消息稳定、合规地推送到用户的微信中接收。

整体消息流转路径如下:

HTTP 请求

企业微信 API

业务系统 / 服务

push-server

企业微信服务端

微信 App

最终效果是: 用户在微信中收到消息,但技术通道使用的是企业微信。

为什么选择企业微信?
相比微信公众号,企业微信具备天然的系统通知优势:

无缝触达:消息最终可到达 微信 App(需关注插件)。
主动推送:支持无限制的主动消息推送,适合通知。
稳定合规:官方允许的系统消息通道,不涉及内容风控。
简单易用:无需复杂的模板消息申请,开发接口清晰。

有什么需要的或者想法可以提,交流一下

项目地址

教程

1. 注册企业微信

谁都可以注册企业微信,无需认证,按说明注册并使用微信扫二维码完成管理员绑定

2. 微信插件

选择我的企业,点击微信插件,使用手机扫码关注

3. 添加应用

添加 logo 和应用名称以及可见范围,选择一个部门或者自己都行,创建应用

4. 配置应用

4.1 查看 Secret

创建完成后会进入当前页面,点击查看可以看 Secret

点击发送,可前往企业微信查看消息

点击查看,保存好,不要泄露,至关重要

4.2 配置可信 IP

在配置可信 IP 之前,我们需要先设置可信域名

可信域名需要校验域名,点击 申请校验域名 获得认证信息

下载文件放置到一个网站的根目录下,我这里放置到了自己在 cloudflare 的 Workers 和 Pages 博客上 https://mazepeng.com/

当文件可以访问到的时候就可以设置可信域名了


现在推送消息的服务必须有可信 IP,如何获得自己的 IP 呢

访问 https://ifconfig.me/ 或者直接百度 IP 就可以看到自己的公网 IP 了

点击应用管理,点击应用,拉倒最下面,配置可信 IP

5. 运行 push-server

支持 docker 部署和本地应用部署,这里我就介绍一下 docker 部署

5.1 docker 命令部署

  docker run -d \
  --name push-server \
  -p 8000:8000 \
  -e PUSH_AUTH_KEY="替换为自己的key" \
  -e PUSH_WECOM_APP_KEY="你的应用AppKey" \
  -e PUSH_WECOM_APP_SECRET="你的应用AppSecret" \
  -e PUSH_WECOM_AGENT_ID="1000001" \
  qingzhoudev/push-server:latest
  
#安全设置,默认值为下方值,需要修改添加环境变量修改
  docker run -d \
  --name push-server \
  -p 8000:8000 \
  -e PUSH_AUTH_KEY="替换为自己的key" \
  -e PUSH_WECOM_APP_KEY="你的应用AppKey" \
  -e PUSH_WECOM_APP_SECRET="你的应用AppSecret" \
  -e PUSH_WECOM_AGENT_ID="1000001" \
  -e PUSH_SECURITY_BLOCK_MINUTES="30" \
  -e PUSH_SECURITY_FAIL_WINDOW_MINUTES="5" \
  -e PUSH_SECURITY_MAX_FAILS="5" \
  -e PUSH_SECURITY_RATE_LIMIT_CAPACITY="10" \
  -e PUSH_SECURITY_RATE_LIMIT_QPS="1" \
  qingzhoudev/push-server:latest

  • PUSH_AUTH_KEY 请求头密钥,需要自己设置一个复杂的即可
  • PUSH_WECOM_APP_KEY 就是企业 ID
  • PUSH_WECOM_APP_SECRET 就是保存的 Secret
  • PUSH_WECOM_AGENT_ID 应用 ID

替换后直接 docker 启动

5.2 使用 Docker Compose

services: push-server:  qingzhoudev/push-server:latest container_name: push-server ports: - "8000:8000" volumes: - ./application-prod.yml:/app/config/application-prod.yml:ro restart: unless-stopped 

application-prod.yml 文件

push: auth: key: "CHANGE_ME" security: block-minutes: 30 fail-window-minutes: 5 max-fails: 5 rate-limit-capacity: 10 rate-limit-qps: 1 wecom: app-key: "CHANGE_ME" app-secret: "CHANGE_ME" agent-id: 1000001 webhook-url: server: port: 8000 

5.3 企业 ID

5.4 应用 ID

6 推送消息

和正常接收微信消息一样,没有什么区别

curl -X POST http://localhost:8000/api/v1/push \
  -H "X-API-Key: 替换为自己的key" \
  -H "Content-Type: application/json" \
  -d '{
"target": "ZhangSan|LiSi",
"type": "TEXT",
"content": "系统通知:您的任务已构建完成。"
}'
curl -X POST http://localhost:8000/api/v1/push \ -H "X-API-Key: 替换为自己的key" \ -H "Content-Type: application/json" \ -d '{
"target": "MaZePeng",
"type": "TEXT_CARD",
"title": "测试Push Server",
"content": "我是 Push Server,这是我作为服务端的第一条消息",
"url": "https://www.mazepeng.com"
}'
curl -X POST http://localhost:8000/api/v1/push \ -H "X-API-Key: 替换为自己的key" \ -H "Content-Type: application/json" \ -d '{
"target": "MaZePeng",
"type": "NEWS",
"articles": [
{
"title": "测试 Article",
"description": "我是描述",
"url": "https://www.mazepeng.com",
"picUrl": "https://mazepeng.com/img/bg/a_larger_image_of_the_homepage.jpg"
}
]
}'

类型有:

  • TEXT
  • MARKDOWN(微信不支持)
  • TEXT_CARD
  • NEWS

📌 转载信息
原作者:
mazp
转载时间:
2026/1/14 10:25:03

因为有时候离开工位之后不确定电脑有没有锁屏

所以拿站里的佬友的公益站配合 claudecode 撸了一个用于手机控制 mac 远程锁屏的小工具。

因为现在手头没服务器,所以需要佬友自己部署一下。

附上 github 链接:


📌 转载信息
原作者:
Syee
转载时间:
2026/1/7 19:04:05

这里好像没有讨论 java 技术的 继续讨论。
在前段时间公司要自己搞个电商平台,首选开发语言用 java, 架子用 springboot,我作为研发负责人。
在立项初期我准备上 cloud, 但是老板没同意,说后面再迭代,我因为刚来这家公司我也就没好说什么,单体就单体呗。
在后面的开发过程中产品提出要增加一个供应商服务端,两端会有频繁的数据交互,我思考了半天有几个方案,要么是谷歌的 grpc, 要么是阿里的 dubbo, 或者是 openfeign, 不过 grpc 要写 protobuf,dubbo 以前用的 2.8 版本遇到兼容性问题现在好多年不用而且时间给的少我怕来不及,openfeign 又没脱离 cloud 依赖,需要引入一堆 maven 依赖,思来想去总不能直接 http 吧,这不胶水架构了么。
最后吧,还是用了胶水架构,不过是好用一点的,这就是 HTTP Interface 啦,因为当时是我负责搭建架子的,所以我采用了基于 jdk17 的 boot3.5, 正好是基于 Spring Framework 6 的。
这个东西用起来门槛非常低,只需要一个配置:

@Configuration @RequiredArgsConstructor @Slf4j public class HttpInterfaceConfig {

    private final TenantPropagator tenantPropagator;

    @Value("${service.auth.secret-key}") private String secretKey;

    private WebClient.Builder createWebClientBuilder(String baseUrl) {
        return WebClient.builder()
                .baseUrl(baseUrl)
                .filter(this::addAuthHeaders) // 添加认证过滤器
                .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
    }

    /**
* 为每次请求动态添加认证头
*/
private Mono<ClientResponse> addAuthHeaders(ClientRequest request, ExchangeFunction next) { // 每次请求时动态生成时间戳、随机数和签名 long timestamp = System.currentTimeMillis(); String nonce = UUID.randomUUID().toString().replace("-", "").substring(0, 16); String signature = HmacSignUtils.generateTimestampSignature(timestamp, nonce, secretKey); log.debug("🔐 动态生成认证头 - timestamp: {}, nonce: {}, signature: {}", timestamp, nonce, signature); // 创建新的请求,添加认证头 ClientRequest newRequest = ClientRequest.from(request) .header("X-Internal-Service", "true") .header("X-Service-Timestamp", String.valueOf(timestamp)) .header("X-Service-Nonce", nonce) .header("X-Service-Signature", signature) .build(); return next.exchange(newRequest); } @Bean public OperationPlatFormApiClient operationPlatformApiClient(
@Value("${service.operationPlatform.url}") String baseUrl)
{ log.info("=== operationPlatformApiClient 配置信息 ==="); log.info("baseUrl: {}", baseUrl); log.info("secretKey: {}", secretKey != null ? "已配置" : "未配置"); // 创建基础的 WebClient Builder WebClient.Builder webClientBuilder = createWebClientBuilder(baseUrl); // 传播租户信息 webClientBuilder = tenantPropagator.propagateTenant(webClientBuilder); WebClient webClient = webClientBuilder.build(); WebClientAdapter adapter = WebClientAdapter.create(webClient); HttpServiceProxyFactory factory = HttpServiceProxyFactory .builderFor(adapter) .build(); OperationPlatFormApiClient client = factory.createClient(OperationPlatFormApiClient.class); log.info("✅ operationPlatformApiClient 创建成功"); return client; } @Bean public SupplierApiClient supplierApiClient(
@Value("${service.supplier.url}") String baseUrl)
{ log.info("=== SupplierApiClient 配置信息 ==="); log.info("baseUrl: {}", baseUrl); log.info("secretKey: {}", secretKey != null ? "已配置" : "未配置"); // 创建基础的 WebClient Builder WebClient.Builder webClientBuilder = createWebClientBuilder(baseUrl); // 传播租户信息 webClientBuilder = tenantPropagator.propagateTenant(webClientBuilder); WebClient webClient = webClientBuilder.build(); WebClientAdapter adapter = WebClientAdapter.create(webClient); HttpServiceProxyFactory factory = HttpServiceProxyFactory .builderFor(adapter) .build(); SupplierApiClient client = factory.createClient(SupplierApiClient.class); log.info("✅ SupplierApiClient 创建成功"); return client; } @Bean public CrowdsourcingApiClient crowdsourcingApiClient(
@Value("${service.crowdsourcing.url}") String baseUrl)
{ log.info("=== CrowdsourcingApiClient 配置信息 ==="); log.info("baseUrl: {}", baseUrl); // 创建基础的 WebClient Builder WebClient.Builder webClientBuilder = createWebClientBuilder(baseUrl); // 传播租户信息 webClientBuilder = tenantPropagator.propagateTenant(webClientBuilder); WebClient webClient = webClientBuilder.build(); WebClientAdapter adapter = WebClientAdapter.create(webClient); return HttpServiceProxyFactory .builderFor(adapter) .build() .createClient(CrowdsourcingApiClient.class); } }

就可以了,然后就能像写 openfeign 那样:

@Resource private SupplierApiClient supplierApiClient;

@PostMapping("/createSupplier") @Operation(summary = "新增供应商用户") public Mono<CommonResult<Integer>> createSupplier(@Valid @RequestBody SuppLierUsersVO reqVO) {
    return ReactiveApiHandler.processReactive(supplierApiClient.createAccount(reqVO), "创建供应商账户");
}

要使用它只需要有 spring-webflux 就可以了,好像是 Spring Framework 6 自带的。

ps:
这东西有个坑,就是你的客户端里的接口越多,启动的时候就越慢,所以一般推荐做个懒加载,不然你客户端写上百个接口,启动就要占用你一分钟的时间。


📌 转载信息
原作者:
furry
转载时间:
2026/1/6 11:59:34

随着 Spring Boot 在微服务架构中的广泛应用,其暴露的安全漏洞也呈指数级增长。传统的手工测试在面对成百上千个端点时显得力不从心,而自动化工具往往缺乏对 Spring Boot 特有漏洞的深度支持。

SpringBootVul-GUI 的出现,填补了 Spring Boot 专项安全工具的空白,成为红队工程师和安全研究人员的效率倍增神器!

简介

SpringBootVul-GUI 是一款半自动化 Spring Boot 漏洞检测与利用工具,内置目前 Spring Boot 所有漏洞。它以图形化界面为核心,集成了目前主流的 Spring Boot 漏洞检测模块,实现了从信息收集到漏洞利用的一站式工作流。

关键特性:


📌 转载信息
原作者:
moximoxi
转载时间:
2026/1/5 13:05:17