SpringBoot&微服组件

从零到英雄:Spring Boot 微服务架构全攻略 在数字化转型的时代,微服务架构已成为构建可扩展、高可用系统的首选方案。本文以“从零到英雄”为主题,详细指导读者使用Spring Boot快速构建微服务帝国。从基础环境搭建入手,逐步深入到服务发现、配置管理、负载均衡、断路器、API网关、安全认证、监控与部署等核心模块。通过大量代码示例和详细解释,包括中文注释,帮助初学者和中级开发者掌握Spring Boot的核心概念和技术实践。文章强调实际操作,涵盖RESTful API开发、数据库集成、容器化部署等内容,并讨论常见问题与优化策略。无论你是Java开发者还是 阅读详情

语雀完整版:

https://www.yuque.com/g/mingrun/embiys/tg4ykv/collaborator/join?token=qlyX7pFpOkClrFRn&source=doc_collaborator# 《SpringBoot&微服组件》

SpringBoot&微服组件

SpringBoot

自动配置原理

常用注解

  1. 组合注解
    • 被其它注解 注解的注解叫做组合注解
    • 元注解 注解其它注解的注解
  1. @Value
    • 相当于Bean标签中的 property标签
    • 取值可以是
      • 字面量
      • ${key} 从环境变量 或者全局配置文件中获取值
      • #{SpEL}
  1. @ConfigurationProperties 【SpringBoot 提供】
    • 从配置文件中 注入多个值
    • 示例
@Component 
@ConfigurationProperties(prefix = "person") // 获取person开头的配置
public class Person { 
    private String name; 
    private Integer age; 
    private String sex; 
}

  1. @Import 【Spring 提供】
    • 作用:导入普通的Java类,并将其声明为大的Bean
    • 直接导入普通的 Java 类
public class Circle { 
    public void sayHi() { 
        System.out.println("Circle sayHi()"); 
    } 
}

@Import({Circle.class}) 
@Configuration 
public class MainConfig { 
}

    • 配合自定义的 ImportSelector
      • 该接口中只有一个 selectImports 方法,用于返回全类名数组。所以利用该特性我们可以给容器动态导入 N 个 Bean。
public class MyImportSelector implements ImportSelector { 
    @Override 
    public String[] selectImports(AnnotationMetadata annotationMetadata) { 
        return new String[]{"annotation.importannotation.waytwo.Triangle"}; 
    } 
}
@Import({Circle.class,MyImportSelector.class}) 
@Configuration 
public class MainConfigTwo {
}
    • 配合 ImportBeanDefinitionRegistrar
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar { 
    @Override 
    public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) { 
        RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(Rectangle.class); 
        // 注册一个名字叫做 rectangle 的 bean 
        beanDefinitionRegistry.registerBeanDefinition("rectangle", rootBeanDefinition); 
    } 
}

@Import({Circle.class, MyImportSelector.class, MyImportBeanDefinitionRegistrar.class}) 
@Configuration 
public class MainConfigThree {
}

  1. @Conditional 【Spring提供】
    • 使用该注解,可以在特定条件下才启用一些配置
    • 案例
public class ConditionBean { 
    public void sayHi() { 
        System.out.println("ConditionBean sayHi()"); 
    } 
}

public class MyCondition implements Condition { 
    @Override 
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) { 
        //这里先直接返回true
        return true; 
    } 
}

@Configuration 
@Conditional(MyCondition.class) 
public class ConditionConfig { 
    @Bean 
    public ConditionBean conditionBean(){ 
        return new ConditionBean(); 
    } 
}


然后测试,就会发现ConditionBean已经在容器中了
Spring提供的常见的Condition

SpringBoot 启动过程

  1. 当启动springboot应用程序的时候, 会先创建SpringApplication的对象, 在对象的构造方法中会进行某些参数的初始化工作,最主要的是判断当前应用程序的类型以及初始化器和监听器,在这个过程中会加载整个应用程序中的spring.factories文件,将文件的内容放到缓存对象中,方便后续获取。
  1. SpringApplication对象创建完成之后, 开始执行run方法,来完成整个启动,启动过程中最主要的有两个方法,第一个叫做prepareContext, 第二个叫做refreshContext,在这两个关键步骤中完整了自动装配的核心功能,前面的处理逻辑包含了上下文对象的创建,banner的打印, 异常报告期的准备等各个准备工作,方便后续来进行调用。
  1. 在prepareContext方法中主要完成的是对上下文对象的初始化操作,包括了属性值的设置,比如环境对象,在整个过程中有-个非常重要的方法,叫做load, load主要完成一 件事,将当前启动类做为一个beanDefinition注册到registry中,方便后续在进行BeanFactoryPostProcessor调用执行的时候, 找到对应的主类,来完成@SpringBootApplicaiton,@EnableAutoConfiguration等注解的解析工作
  1. 在refreshContext方法中会进行整个容器刷新过程, 会调用中spring中的refresh方法, refresh中有13个非常关键的方法,来完成整个spring应用程序的启动,在自动装配过程中,会调用invokeBeanFactoryPostProcessor方法,在此方法中主要是对ConfigurationClassPostProcessor类的处理, 这次是BFPP的子类也是BDRPP的子类,在调用的时候会先调用BDRPP中的postProcessBeanDefinitionRegistry方法,然后调用postProcessBeanFactory方法,在执行postProcessCeanDefinitionRegistry的时候回解析处理各种注解,包含@PropertySource,@ComponentScan,@ComponentScans, @Bean,@lmport等注解,最主要的是@lmport注解的解析
  1. 在解析@Import注解的时候,会有一个getlmports的方法, 从主类开始递归解析注解,把所有包含
    @Import的注解都解析到,然后在processlmport方法中对Import的类进行分类, 此处主要识别的时候
    AutoConfigurationlmportSelect归属于ImportSelect的子类,在后续过程中会调用
    deferredlmportSelectorHandler中的process方法,来完整EnableAutoConfiguration的加载。

SpringBoot 自动配置过程

[SpringBoot自动配置原理.png](D:\JAVA\思维图\05-1 Spring一家人\SpringBoot自动配置原理.png)

这样讲 SpringBoot 自动配置原理,你应该能明白了吧 - 掘金 (juejin.cn)

聊聊 SpringBoot 自动装配原理 - 掘金 (juejin.cn)

  1. 概述
    • 没有SpringBoot的情况下,如果要在项目中使用redis,就要加第三方依赖,然后手动配置,而在springboot中直接引入一个 starter即可
  1. 流程概述:进入@SpringBootApplication注解,就会看到@EnableAutoConfiguration,再进去有两个步骤
    • 第一个步骤是加载 启动类和启动类所在的包和子包的所有Bean 到容器
    • 第二个步骤是到 META-INF/spring.factories下加载所有的EnableAutoConfiguration到Spring容器中
  1. 其它总结
    • SpringBoot启动会加载大量的自动配置类。
    • 我们看需要的功能有没有SpringBoot默认写好的自动配置类。
    • 我们再来看这个自动配置类中到底配置了那些组件(只要我们要用的组件有,我们就不需要再来配置了)。
    • 给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们就可以在配置文件中指定这些属性的值。
      • xxxAutoConfiguration:自动配置类给容器中添加组件。
      • xxxProperties:封装配置文件中相关属性。
  1. 自定义Starter流程
    • 引入spring-boot-starter依赖
    • 创建一个自己的AutoConfiguration(它的作用就是加载配置,然后返回Bean)

    • 然后在你这个工程的 resources 包下创建META-INF/spring.factories文件

    • 然后就可以在其它工程引用这个starter了

  1. SPI(Service Provider Interface)
    • 是一种服务发现机制,通过在ClassPath路径下的META-INF/services文件夹查找文件,自动加载文件里所定义的类。
    • 实现步骤
      • 定义一个 接口和它的实现类们
      • 在classpath下面加一个文件,文件名字是接口的全限定类名,内容是实现类的全限定类名

      • 调用代码
public static void main(String[] args) {    
    //SPIService是上面所说的接口 有两个实现类
    //调用方式一 使用Service
    Iterator<SPIService> providers = Service.providers(SPIService.class);
        while(providers.hasNext()) {
        SPIService ser = providers.next();
        ser.execute();
    }
    System.out.println("--------------------------------");
   
    //调用方式二 使用ServiceLoader
    ServiceLoader<SPIService> load = ServiceLoader.load(SPIService.class);
    Iterator<SPIService> iterator = load.iterator();
    while(iterator.hasNext()) {
        SPIService ser = iterator.next();
        ser.execute();
    }
}

      • ServiceLoader,其中serviceLoader先判断缓存中 是否有已经实例化好的对象,如果没有就读取 META-INF/services/下的配置(可以扫描多个jar包路径下的),通过反射方法Class.forName()加载类对象,并用instance()方法将类实例化,然后再缓存(一个LinkedHashMap<String,S>类型)
    • SPI优缺点
      • 优点是 解耦合,与调用者分离了,而且调用者不用再关心具体的实现类 在什么路径,比如JDBC,之前是Class.forName("com.mysql.jdbc.Driver"),后来就直接使用 DriveManger
      • 缺点就是如果用 ServiceLoader,遍历的时候,会把全部的实现都加载一遍

微服组件

Eureka

  1. 概述
    • 主要包括两个组件 Eureka Server和Eureka client
  1. 流程流程说明
    (1)服务提供者集成Eureka客户端,启动时,Eureka客户端发送注册请求到Eureka服务端;
    (2)Eureka客户端每30秒发送一次续约请求到Eureka服务端;
    (3)若Eureka服务端超过90秒未收到服务提供者的续约请求,则Eureka服务端会将其从服务列表中踢除;
    (4)服务消费者集成Eureka客户端,启动时,Eureka客户端同样会发送注册请求到Eureka服务端;
    (5)服务消费者中,Eureka客户端每隔30秒,会从Eureka服务端获取服务实例列表,其中,首次是全量查询,后续为增量查询;获取到实例列表后,Eureka客户端会将其写入到本地缓存中;
    (6)服务消费者调用服务提供者时,Eureka会总本地缓存获取对应的实例,并进行接口调用。
  1. 多级缓存机制

    • 拉取注册表
      首先从ReadOnlyCacheMap里查缓存的注册表。若没有,就找ReadWriteCacheMap里缓存的注册表。如果还没有,就从内存中获取实际的注册表数据。
    • 注册表发生变更
      会在内存中更新变更的注册表数据,同时过期掉ReadWriteCacheMap。此过程不会影响ReadOnlyCacheMap提供人家查询注册表。
      一段时间内(默认30秒),各服务拉取注册表会直接读ReadOnlyCacheMap 30秒过后,Eureka Server的后台线程发现ReadWriteCacheMap已经清空了,也会清空ReadOnlyCacheMap中的缓存 下次有服务拉取注册表,又会从内存中获取最新的数据了,同时填充各个缓存。
    • 多级缓存机制的优点是什么?
      尽可能保证了内存注册表数据不会出现频繁的读写冲突问题。并且进一步保证对Eureka Server的大量请求,都是快速从纯内存走,性能极高。

Ribbon

Spring-Cloud之Ribbon原理剖析 - 起岸星辰 - 博客园 (cnblogs.com)

  1. 内置的负载均衡策略
    • RoundRobinRule:直接轮询的方案;即每次从server list中依次选择。
    • AvailabilityfileringRule:根据服务器可用性来决定;比如某个服务器的并发请求过高,那么此时ribbon就会绕过不再访问;同时如果3次连接失败就会等待30秒后再次访问;如果不断失败,那么等待时间会不断变长,如果某个服务器的并发请求太高了,那么会绕过去,不再访问。
    • WeightedResponseTimeRule:根据权重来分配;每个服务器都可以有权重,权重高就优先访问,如果某个服务器响应时间比较长,那么权重就会降低,减少访问。
    • ZoneAvoidanceRule:根据区域和服务器来进行负载均衡,也就是根据机房来分配,里面再使用轮询的方式。默认的就是这个
    • BestAvailableRule:忽略连接失败的服务器,同时尽量找并发比较低的服务器来请求。
    • RandomRule:随机选择一个。
    • RetryRule:在轮询的方案上增加重试机制;即通过轮询的方式选择一个服务器请求,在失败的时候会重新再找一个重试。
  1. 过程
    • Ribbon主要就是 通过服务名拿到服务列表,然后再根据负载均衡策略选择一个服务,通过拦截器设置请求地址
    • Iping机制:ribbon的IPing机制,就是每隔30秒去检查注册表中的服务 是否可用,不可用就移除
      其中,Ribbon获取注册表是每30秒从Eureka Client拷贝一次注册表
  1. 客户端负载均衡与服务端负载均衡

Fegin

  1. 实现思路
    • 在类上标上注解(注解上包含要调用的接口信息),之后就会根据注解封装好请求信息,然后用ribbon获取真实的地址信息,请求发出后 获得结果再发序列化交给对象处理
  1. 核心机制
    [Fegin核心机制.png](D:\JAVA\思维图\05-1 Spring一家人\微服组件\Fegin核心机制.png)

Nacos

阿里面试这样问:Nacos配置中心交互模型是 push 还是 pull ?(原理+源码分析) (qq.com)

  1. 配置中心
    • 作用:对配置进行统一管理,修改配置后可以动态感知,无需重启
    • 客户端与配置中心的交互:推与拉
      • 推:与客户端建立长连接,一有变动立刻推送,缺点就是可能会因为网络问题出现假死,连接状态正常却无法通信,这就需要心跳机制来保证连接的可用性
      • 拉:客户端轮询 向配置中心拉取数据,比如每隔3s一次,但这样做不到实时性,而且可能会服务端产生压力
        • 长轮询与短轮询
          • 短轮询:每隔几秒钟拉取一次配置,而配置一般是不修改的,而且这种方式更新会有延迟
          • 长轮询:客户端请求过来后,如果配置变更,那就立刻响应,如果没有变更,那就直到超时时间过后在响应,然后客户端再发起下次的长连接

    • Nacos采用的就是 客户端拉的方式,而且是长轮询
    • 配置中心的核心概念
      • dataId是一份配置文件的id,key value格式存储,value是配置文件的内容
      • groupId分组,用于一个环境下的不同分支的配置隔离
      • nameSpace:dev、test这种不同的环境
  1. 架构设计

    • 客户端控制台 将自己的配置推送到配置中心,配置中心会见配置持久化在MySQL中
    • 然后客户端获取最新配置的时候 向服务端发起长轮询请求,获取配置后也会在本地存一份,有限读取
无线图像传输新突破:深度JSCC算法在低带宽环境下的性能实测 本文深入探讨了基于深度学习的信源信道联合编码(JSCC)算法在低带宽无线图像传输中的突破性表现。通过实测数据对比,深度JSCC在低信噪比环境下展现出卓越的鲁棒性,有效对抗传统方案的“悬崖效应”,实现图像质量的平滑下降,为远程医疗、工业巡检等严苛场景提供了新的解决方案。 阅读详情

相关推荐

从零入门SpringBoot&整合MyBatis

回顾架构 三层架构 + MVC 架构---> 解耦 开发框架 | Spring IOC:控制反转 原来我们要一步一步去做,现在直接交给IOC容器去做,我们需要什么拿什么就可以了 AOP:切面(本质:动态代理) 为了解决什么?不影响业务本来的情况下,实现动态增加功能,大量应用在日志,业务...等等 Spring是一个轻量级的Java开源框架,容器 目的:解决企业开...

aYuanyo的博客 876

从零开始:用ADS 2023手把手教你设计2.4GHz Wi-Fi LNA(基于ATF-54143,附模型文件)

本文详细介绍了如何使用ADS 2023软件设计2.4GHz Wi-Fi频段的低噪声放大器(LNA),基于ATF-54143晶体管。内容涵盖模型导入、直流工作点确定、稳定性优化、噪声匹配等关键步骤,并提供可下载的模型文件包,帮助工程师快速掌握LNA设计技巧。

weixin_42531128的博客 321

初识SpringBoot&开始搭建自己的第一个SpringBoot项目

一、SpringBoot是什么? SpringBoot是由Pivotal团队提供的全新框架,用来简化我们Spring项目的搭建过程,同时提高我们的开发效率。另外,它还是现在主流的Spring Cloud微服务架构的基础。 二、为什么我们要用它? 我们选择使用它,主要基于它如下的一些优点: 自动化配置; 快速开发; 轻松部署; 依赖管理更简单(starter模块); 能很好地融入Do...

逆流而上的龟 371

从RADIUS服务器到AP:实战搭建一个小型WPA2-Enterprise测试环境(FreeRADIUS + 家用路由器)

本文详细介绍了如何从零搭建WPA2-Enterprise测试环境,使用FreeRADIUS服务器和家用路由器实现企业级WiFi认证。通过实战指南,包括证书生成、EAP-PEAP配置、OpenWrt路由器设置及故障排查,帮助网络工程师和爱好者掌握802.1X协议栈的实际应用。

weixin_28715953的博客 325

VulnHub--mrrobot

Vulnhub靶场--Mr robot 靶机

记录笔记 1097

40 张表、20 层 e2e:把一个开源 Agent 平台迁到 Spring Boot 4.1

升级 BizBuddy 从 Spring Boot 3.5 到 4.1.1,核心挑战不在代码修改,而在验证。虽仅四类变更(Jackson 3、Starter 拆分、空安全注解、依赖坐标更新),但耗时七成用于确保行为一致:Jackson 3 的不可变映射器、序列化签名变化、Redis 缓存兼容性、旧类名导致的反序列化异常均需逐项排查。关键资产是20层HTTP与18条UI端到端用例,保障了真实场景验证。部分依赖如AgentScope仍留用Jackson 2,通过边界隔离避免硬改。建议尽早迁移,避免未来更复杂的技

长弓三石 231

基于Web的智能家居(源码+开题)

实践上,智能家居系统的普及和应用将极大改善人们的居住体验,提高生活质量,同时也有助于促进智能家居产业链的发展和完善,为社会经济发展注入新的活力。此外,本研究还将对基于Web的智能家居系统的用户体验进行深入研究,通过用户调研和数据分析,不断优化系统功能和界面设计,提升用户的使用体验和满意度。针对以上问题,本研究将综合运用物联网、云计算、大数据等新一代信息技术,通过系统架构设计、功能模块开发、安全性保障、用户体验优化等多个方面的研究工作,力求为基于Web的智能家居系统的研发和应用提供全面而有效的解决方案。

sryue06的博客 1904

Spring Boot 3.3 启动报 BeanCurrentlyInCreation:循环依赖默认被禁的代价

从 2.5 升到 3.3 启动即报循环依赖异常,它只提示环路一端。需结合堆栈还原完整依赖环,再按真实耦合点选择解环手段。此类放行仅适用于紧急止血,构造器注入的环仍须重构。

昨日种种,皆成今我。今日种种,皆成新我。 226

基于全局和局部接受性因果特征的广义学习模型,用于在线增量机械故障诊断

本文提出了一种**因果广义学习模型(CBLM)**,用于在线增量机械故障诊断。该模型结合了**全局因果特征**(时域、频域、故障特征频率均值)和**多尺度局部因果特征**(通过扩张卷积提取),构建了一个具有**增量学习能力**的广泛学习系统(BLS)。CBLM支持**结构增量学习**(增加增强节点)和**样本增量学习**(动态更新权重),无需重新训练整个模型,显著提高了计算效率和诊断精度。在两个滚动轴承数据集上的实验表明,CBLM在诊断准确性和训练时间上均优于传统深度学习模型,适用于在线实时故障诊断。

huanghm88的专栏 388

OmniBox2.0.X版本 一站式影视订阅与多端播放平台文档

OmniBox 是一站式影视订阅与多端播放平台:你可以用 JS 或 Python 按 OmniBox 规范自建爬虫源,在后台把多个爬虫源自由组合成订阅,然后在网页、手机、电视等全平台的客户端里使用。只要客户端支持 TVBox、猫源、UZ、Emby 等协议,即可无缝对接。同时支持电视直播源、六大平台直播间和网盘源视频在线观看,通过 Docker 一键部署。

欢迎来到鸾姝淡月博客,专为程序员和编程爱好者打造的技术博客。我们分享编程语言趋势、开发工具、编程哲学、职业发展等,助你掌握新技术,优化技能,激发编程热情。 1923

ZeusSpring框架深度解析:基于Spring Boot的高效模块化企业级开发解决方案与实战指南

1.1 项目背景与定位在现代企业级应用开发中,如何在保证代码质量的同时提升开发效率,是每一个技术团队面临的核心挑战。ZeusSpring正是为了解决这一痛点而生。这是一个由开发者AichaelLee创建并维护的,基于Spring Boot生态的高度可扩展、模块化的开发框架。它并非简单的代码堆砌,而是对Spring Boot进行了深度的增强与封装,旨在为开发者提供一套“开箱即用”且架构清晰的基础设施。1.2 核心价值主张ZeusSpring的核心设计理念在于“模块化”与“高效”。

wulechun的博客 185

【3GPP核心网】【5G】史上最全的5G协议规范总结

物理层信道定义:TS38.211(物理层信号的生成、调制,DMRS和额外DMRS,PRACH configuration index,Point A等介绍)传输信道和控制信道的数据处理:TS38.212(包括复用,信道编码,交织,DCI,DMRS端口号等)物理层控制过程:TS38.213(同步,上行功控,随机接入,UE上报和接收控制消息的过程,SSB等)物理层测量:TS38.215(UE和网络的测量控制,UE测量能力)频率、频点相关F R1:TS38.101-1。

风云说通信 3178

Spring Boot 提速记:启动 40 秒到 8 秒,GC 停顿从 850ms 降到 60ms

面向线上 Spring Boot 服务,给出启动侧延迟初始化与 AOT 编译、运行侧 GC 与虚拟线程选型,再用分层压测验证收益,附可复制的参数与代码。

2301_78967866的博客 370

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Spring Boot 4 + OpenTelemetry + OpenFeign:自动传播 TraceId 的完整实践

本文演示Spring Boot 4 + OpenTelemetry + OpenFeign环境下,通过引入feign-micrometer依赖,实现调用方通过OpenFeign自动传播traceparent请求头,确保跨服务调用链路中TraceId一致。验证显示:被调方日志中包含traceparent,且两端TraceId相同、SpanId不同,符合W3C Trace Context规范,完整实现链路追踪。

宋冠巡的博客 366

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Spring Boot 和 Spring Cloud 是什么关系

Spring Boot 与 Spring Cloud 是协同关系,非替代或升级。Boot 负责单个服务的快速启动与配置,Cloud 则解决多服务间的注册发现、调用、容错等分布式问题。两者能力不重叠:Boot 管进程内,Cloud 管进程间。Cloud 组件基于 Boot 的自动配置机制实现,依赖版本严格匹配,不可随意升级。是否使用 Cloud,取决于是否有跨服务治理需求,而非项目规模。小系统或已用 K8s 可无需引入完整 Cloud。

2401_89855466的博客 238

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Spring Boot 系统监控与可观测性

基础的 JVM 和 HTTP 指标看不出来 Outbox 是否出问题,所以 Study 服务里添加,通过Micrometer Gauge + 定时 SQL 统计监控事件状态。status状态含义0PENDING等待发送1SENDING已被某个发布器领取2SENTBroker 已确认并通过路由检查3FAILED达到最大重试次数,待人工处理",其他SENDING、`FAILED` 指标同理;实际代码里需要异常处理,避免指标采集影响业务调度。Gauge。

m0_64642997的博客 331

ChatGPT、Codex并发排查:Spring Boot接口没有报错,为什么线程池队列越来越长,最后整批请求超时?

Spring Boot接口没有报错,CPU和数据库连接池也正常,为什么线程池队列却越来越长?本文从订单服务任务积压故障切入,分析无界队列、最大线程数、CallerRunsPolicy、下游阻塞和任务背压机制,并介绍通过Codex辅助定位线程池瓶颈的方法。

2601_96380027的博客 149

毕设选题:基于 Spring Boot 与多模态大模型的非物质文化遗产数字化展演系统设计与实现

本文介绍基于 Spring Boot 与多模态大模型的非物质文化遗产数字化展演系统。系统将 286 项非遗入库建档,用 Three.js 搭建 12 个 3D 主题展厅,展演视频、图片、口述资料数字化归档;多模态大模型看视频、读资料,平均 38 秒自动生成一条展演解说词,人工审核通过后上架,累计 3,860 条解说,通过率 91.8%。系统提供门户、展演厅、项目详情、互动体验、内容审核与数据看板,线上展演累计 328 场,日均访问 8,600 次。

小凯的博客 270

Spring Boot 4 默认开虚拟线程,HikariCP 却成瓶颈

升到 Spring Boot 4.1,虚拟线程自动开启,CI 全绿,你以为高并发稳了。结果压测第一轮连接池就打满、请求超时。这篇讲清楚:为什么虚拟线程会反手拖垮 HikariCP,以及三招把它救回来。

tangyuewei.com 455

Spring Boot 升到 2.6 启动报错,循环依赖为何被默认禁掉

升到 Spring Boot 2.6 后,字段注入的循环依赖被默认禁掉,服务一启动就抛异常退出。排查按四步走,从异常类名一路定位到互相引用的字段代码。

昨日种种,皆成今我。今日种种,皆成新我。 248

Spring Boot 实战:基于 Hutool + Session 实现图形验证码(从原理到完整项目)

本文实现了一个基于Hutool工具包的图形验证码系统,前后端协同完成验证码生成、校验与跳转功能。后端使用Hutool-captcha生成带干扰线的验证码,通过Session存储验证码及有效期(1分钟),并提供接口返回图片和校验结果;前端利用Ajax提交用户输入,通过jQuery动态刷新验证码图片并实时校验,错误时弹窗提示,正确则跳转至成功页面。整体设计解耦清晰,安全有效,适用于常见登录验证场景。

java_nnnn的博客 300

基于Spring Boot和Vue的经方药食两用服务平台设计与实现

介绍一套基于Spring Boot和Vue的经方药食两用服务平台,包含食材与经方资料、药膳方案、收藏、预约服务单、体质记录和后台管理,并说明默认H2演示环境及MySQL配置。

weixin_63587281的博客 275

基于 Spring Boot 的非遗文化展览系统设计与应用报告

MySQL 负责存储非遗项目、传承人、作品、展品、展览、预约、活动、评论、审核记录、用户与权限等核心业务数据,并通过主键、外键、唯一索引和事务机制保障展览与预约数据的一致性和可追溯性;系统覆盖非遗项目管理、传承人管理、作品与多媒体资源管理、展览策划与审核、虚拟展厅配置、展览预约与核销、活动报名、评论互动、内容审核、统计报表和系统权限管理等核心业务,旨在提升非遗文化展览的数字化展示水平、展览运营效率和文化传播决策支持能力。传承人端支持非遗项目资料维护、作品与技艺资料上传、展览申请、版权声明和展览反馈查看;

2601_96666453的博客 363

MySQL 死锁怎么排查?InnoDB 锁等待与 Spring Boot 整事务重试实战

MySQL 线上事务偶发死锁,应该如何定位和修复?本文通过双会话 SQL 复现 InnoDB 死锁,介绍 SHOW ENGINE INNODB STATUS、Performance Schema 锁等待查询及索引访问路径分析,并结合 Spring Boot 和 TransactionTemplate 演示整事务重试。重点讨论统一加锁顺序、事务传播、业务幂等与重试边界,帮助开发者建立可靠的数据库死锁排查流程。

代码不止,探索不息 267

ChatGPT、Codex工程实战:Kubernetes滚动发布时,Spring Boot正在处理的请求为什么还是会被中断?

本文从Java订单系统生产故障切入,分析Readiness Probe、EndpointSlice、preStop、SIGTERM、Tomcat优雅停机和terminationGracePeriodSeconds之间的关系,并介绍通过Codex还原Pod终止时间线、排查502和Connection reset的方法。

2601_96380027的博客 485
上一篇: 笔记-极客-DDD实战-基于DDD的微服务拆分与设计
下一篇: Java源码-核心笔记
金心靖晨
博客等级 码龄9年 460粉丝 211原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值