当前位置: 首页 > news >正文

Spring Boot启动流程深度解析:从main()到应用就绪的完整旅程

🌱 Spring Boot启动流程深度解析:从main()到应用就绪的完整旅程

#SpringBoot核心 #启动原理 #自动配置 #源码解析


一、启动流程图解

(1) 启动类执行 → (2) SpringApplication初始化 → (3) 事件驱动模型启动  ↓                                        ↓  
(4) 环境准备 → (5) 应用上下文创建 → (6) Bean加载与自动配置  ↓                                        ↓  
(7) 执行Runners → (8) 内嵌容器启动 → (9) 应用就绪  

二、核心阶段分步详解

1. 启动入口:main方法与@SpringBootApplication

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

@SpringBootApplication 三剑客

  • @SpringBootConfiguration:标记配置类
  • @EnableAutoConfiguration:启用自动配置
  • @ComponentScan:包扫描注解

2. SpringApplication初始化

关键源码解析

// SpringApplication.java  
public static ConfigurableApplicationContext run(Class<?>[] primarySources, String[] args) {  return new SpringApplication(primarySources).run(args);  
}  public SpringApplication(Class<?>... primarySources) {  this.primarySources = new LinkedHashSet<>(Arrays.asList(primarySources));  this.webApplicationType = WebApplicationType.deduceFromClasspath();  setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));  setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));  this.mainApplicationClass = deduceMainApplicationClass();  
}  

初始化关键操作

  1. 推断应用类型(Servlet/Reactive)
  2. 加载META-INF/spring.factories中的初始化器和监听器
  3. 识别主配置类

3. 运行阶段:环境准备与上下文创建

3.1 环境准备
  • 加载application.properties/yml
  • 激活Profiles(spring.profiles.active
  • 配置PropertySources(命令行参数 > 系统变量 > 配置文件)
3.2 创建应用上下文

根据应用类型创建不同上下文

应用类型上下文实现类
Servlet WebAnnotationConfigServletWebServerApplicationContext
Reactive WebAnnotationConfigReactiveWebServerApplicationContext
Non-WebAnnotationConfigApplicationContext

4. 自动配置黑魔法

核心流程

1. 加载所有`META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports`  
2. 过滤排除项(@EnableAutoConfiguration.exclude)  
3. 条件注解过滤(@ConditionalOnClass等)  
4. 按@AutoConfigureOrder排序  
5. 加载有效配置类  

示例自动配置类

@AutoConfiguration  
@ConditionalOnClass(RedisTemplate.class)  
@EnableConfigurationProperties(RedisProperties.class)  
public class RedisAutoConfiguration {  @Bean  public RedisTemplate<?, ?> redisTemplate() { ... }  
}  

5. 内嵌容器启动(以Tomcat为例)

启动流程

1. 创建Tomcat实例 → 2. 初始化Connector → 3. 加载ServletContext  
4. 启动线程池 → 5. 绑定端口 → 6. 启动完成  

关键源码入口

// TomcatWebServer.java  
public void start() throws WebServerException {  this.tomcat.start();  this.startAwaitThread();  
}  

三、启动扩展点实战

1. 自定义Banner

步骤

  1. src/main/resources下创建banner.txt
  2. 使用在线生成工具设计ASCII艺术字
  3. 启用彩色输出(需配置spring.banner.charset=UTF-8

2. ApplicationRunner与CommandLineRunner

@Component  
@Order(1)  
public class MyRunner implements ApplicationRunner {  @Override  public void run(ApplicationArguments args) {  System.out.println("应用启动后执行");  }  
}  

执行顺序
CommandLineRunnerApplicationRunner(同Order值下)

3. 自定义事件监听

@Component  
public class MyListener implements ApplicationListener<ApplicationReadyEvent> {  @Override  public void onApplicationEvent(ApplicationReadyEvent event) {  System.out.println("应用已就绪");  }  
}  

四、启动优化技巧

1. 延迟初始化

# application.properties  
spring.main.lazy-initialization=true  

优点:加快启动速度
缺点:首次请求可能变慢

2. 排除自动配置

@SpringBootApplication(exclude = {  DataSourceAutoConfiguration.class,  RedisAutoConfiguration.class  
})  

3. 日志级别控制

logging.level.root=WARN  
logging.level.org.springframework=ERROR  

五、启动问题排查指南

1. 常见启动错误

异常类型常见原因
BeanCurrentlyInCreationException循环依赖
PortInUseException端口被占用
NoSuchBeanDefinitionException未正确扫描包

2. 诊断工具

  • 启动日志分析--debug参数输出自动配置报告
  • 线程Dumpjstack <pid> > thread.txt
  • 内存分析jmap -dump:format=b,file=heap.hprof <pid>

六、Spring Boot启动全景图

[启动类]  │  ├─> 初始化SpringApplication  │    ├─> 推断Web类型  │    ├─> 加载初始化器/监听器  │    └─> 识别主配置类  │  ├─> 运行阶段  │    ├─> 准备Environment  │    ├─> 创建ApplicationContext  │    ├─> 刷新上下文(Bean加载、自动配置)  │    ├─> 执行Runners  │    └─> 启动内嵌容器  │  └─> 发送ApplicationReadyEvent  

掌握Spring Boot启动流程,助您从容应对复杂项目初始化问题! 🚀

相关文章:

Spring Boot启动流程深度解析:从main()到应用就绪的完整旅程

&#x1f331; Spring Boot启动流程深度解析&#xff1a;从main()到应用就绪的完整旅程 #SpringBoot核心 #启动原理 #自动配置 #源码解析 一、启动流程图解 (1) 启动类执行 → (2) SpringApplication初始化 → (3) 事件驱动模型启动 ↓ …...

2025TGCTF Web WP复现

AAA 偷渡阴平 <?php$tgctf2025$_GET[tgctf2025];if(!preg_match("/0|1|[3-9]|\~|\|\|\#|\\$|\%|\^|\&|\*|\&#xff08;|\&#xff09;|\-|\|\|\{|\[|\]|\}|\:|\|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $tgctf2025)){//hint&#xff1a;你可以对着键盘…...

交叉注意力层的实质作用:连接编码器和解码器

交叉注意力层的实质作用 在Transformer架构里,交叉注意力层主要作用是连接编码器和解码器,让解码器能够利用编码器输出的上下文信息 。具体来说: 聚焦相关信息:以机器翻译任务为例,在将源语言句子翻译成目标语言时,交叉注意力能使解码器生成的每个词,都聚焦于源语言序列…...

conversation_template | conversation_actors | conversation_line_template

目录 conversation_template conversation_actors conversation_line_template 实例应用 conversation_template id&#xff1a;某段谈话的唯一编号FirstLineId&#xff1a;谈话开始的第一段话的编号&#xff0c;取值来源 ConversationLine.db2 的 ID 字段TextureKitId&am…...

C++ `shared_ptr` 多线程使用

C shared_ptr 多线程使用 一、核心结论 引用计数&#xff1a;shared_ptr 的引用计数操作是原子的&#xff0c;线程安全控制块修改&#xff1a;修改 shared_ptr 指向的对象需要同步被管理对象&#xff1a;若对象本身非线程安全&#xff0c;访问时仍需加锁 二、分场景详解 场景…...

十天借助 Trae 实现 “幸运塔塔屋” 小程序时光记忆功能之旅

在软件开发的广阔天地中&#xff0c;创新与效率始终是开发者们不懈追求的目标。近期&#xff0c;我成功完成了一次极具挑战性与创新性的实践 —— 仅用十天时间&#xff0c;借助 Trae 这款强大的 AI 工具&#xff0c;开发出了 “幸运塔塔屋” 小程序&#xff0c;其中的 “时光记…...

WiFi“管家”------hostapd的工作流程

目录 1. 启动与初始化 1.1 解析命令行参数 1.2 读取配置文件 1.3 创建接口和 BSS 数据结构 1.4 初始化驱动程序 2. 认证和关联处理 2.1 监听认证请求 2.2 处理认证请求 2.3 处理关联请求 3. 数据转发 3.1 接收客户端数据 3.2 转发数据 4. 断开连接处理 4.1 处理客…...

计算机视觉——基于使用 OpenCV 与 Python 实现相机标定畸变校正

概述 相机标定是一种旨在通过确定相机的内参&#xff08;焦距、光学中心、畸变系数&#xff09;和外参&#xff08;相机的位置和方向&#xff09;&#xff0c;提高图像在现实世界中的几何精度的过程。该过程可以纠正相机拍摄的图像中的畸变&#xff0c;使相机能够准确感知现实…...

OOM 未触发 JVM 崩溃的可能原因

1. OOM 未触发 JVM 崩溃的可能原因‌ (1) 未配置 JVM 参数强制崩溃‌ 关键参数缺失‌&#xff1a; 若未添加 -XX:CrashOnOutOfMemoryError&#xff0c;JVM 在 OOM 时可能仅抛出异常并正常退出&#xff0c;而非崩溃&#xff0c;因此不会生成 hs_err_pid.log。 # 正确配置示例&…...

计算机视觉cv2入门之车牌号码识别

前边我们已经讲解了使用cv2进行图像预处理与边缘检测等方面的知识&#xff0c;这里我们以车牌号码识别这一案例来实操一下。 大致思路 车牌号码识别的大致流程可以分为这三步&#xff1a;图像预处理-寻找车牌轮廓-车牌OCR识别 接下来我们按照这三步来进行讲解。 图像预处理 …...

xml+html 概述

1.什么是xml xml 是可扩展标记语言的缩写&#xff1a; Extensible Markup Language。 <root><h1> text 1</h1> </root> web 应用开发&#xff0c;需要配置 web.xml&#xff0c;就是个典型的 xml文件 <web-app><servlet><servlet-name&…...

C++数据结构与二叉树详解

前言&#xff1a; 在C编程的世界里&#xff0c;数据结构是构建高效程序的基石&#xff0c;而二叉树则是其中最优雅且应用广泛的数据结构之一。本文将带你深入理解二叉树的本质、实现与应用&#xff0c;助你在算法设计中游刃有余。 一、二叉树的基本概念 1. 什么是二叉树 二叉树…...

解决6栈6层码头集装箱堆栈翻箱最优解问题

‘’’ con 1 origin_stack = [ [4, 4, 1, 0, 0, 0], # 第一栈 [4, 3, 2, 1, 0, 0], # 第二栈 [4, 2, 2, 1, 0, 0], # 第三栈 [3, 3, 3, 1, 0, 0], # 第四栈 [3, 4, 2, 1, 0, 0], # 第五栈 [4, 2, 3, 2, 0, 0] # 第六栈 ] con 2 origin_stack = [ [4, 4, 3, 0, 0, 0], # 第一栈…...

Java 序列化与反序列化终极解析

Java 序列化与反序列化终极解析 1. 核心概念 (1) 什么是序列化&#xff1f; 定义&#xff1a;将对象转换为字节流的过程&#xff08;对象 → 字节&#xff09; 目的&#xff1a; 持久化存储&#xff08;如保存到文件&#xff09; 网络传输&#xff08;如RPC调用&#xff09…...

YOLOv5、YOLOv6、YOLOv7、YOLOv8、YOLOv9、YOLOv10、YOLOv11、YOLOv12的网络结构图

文章目录 一、YOLOv5二、YOLOv6三、YOLOv7四、YOLOv8五、YOLOv9六、YOLOv10七、YOLOv11八、YOLOv12九、目标检测系列文章 本文将给出YOLO各版本&#xff08;YOLOv5、YOLOv6、YOLOv7、YOLOv8、YOLOv9、YOLOv10、YOLOv11、YOLOv12&#xff09;网络结构图的绘制方法及图。本文所展…...

leetcode0145. 二叉树的后序遍历-easy

1 题目&#xff1a;二叉树的后序遍历 官方标定难度&#xff1a;易 给你一棵二叉树的根节点 root &#xff0c;返回其节点值的 后序遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[3,2,1] 解释&#xff1a; 示例 2&#xff1a; 输入…...

【Leetcode 每日一题】2364. 统计坏数对的数目

问题背景 给你一个下标从 0 0 0 开始的整数数组 n u m s nums nums。如果 i < j i < j i<j 且 j − i ≠ n u m s [ j ] − n u m s [ i ] j - i \ne nums[j] - nums[i] j−inums[j]−nums[i]&#xff0c;那么我们称 ( i , j ) (i, j) (i,j) 是一个 坏数对 。…...

完整的 .NET 6 分布式定时任务实现(Hangfire + Redis 分布式锁)

完整的 .NET 6 分布式定时任务实现&#xff08;Hangfire Redis 分布式锁&#xff09; 以下是完整的解决方案&#xff0c;包含所有必要组件&#xff1a; 1. 基础设施层 1.1 分布式锁服务 // IDistributedLockService.cs public interface IDistributedLockService {ValueTa…...

人脸识别联合行为检测的办公管理新模式

基于人脸识别与行为检测的办公智能化解决方案 一、背景 在传统办公场景中&#xff0c;员工考勤管理、工位使用情况统计、安全监控等环节存在诸多痛点。例如&#xff0c;传统考勤方式如指纹打卡、刷卡等存在代打卡现象&#xff0c;考勤数据不准确&#xff1b;对于员工是否在工…...

鸿蒙NEXT开发键盘工具类(ArkTs)

export declare type KeyboardCallBack (show: boolean, height: number) > void; import { AppUtil } from ./AppUtil; import { LogUtil } from ./LogUtil; import { ArrayUtil } from ./ArrayUtil;/*** 键盘工具类* author 鸿蒙布道师* since 2025/04/18*/ export class…...

Python爬虫第17节-动态渲染页面抓取之Selenium使用下篇

目录 引言 一、获取节点信息 1.1 获取属性 1.2 获取文本值 1.3 获取ID、位置、标签名、大小 二、切换Frame 三、延时等待 3.1 隐式等待 3.2 显式等待 四、前进后退 五、Cookies 六、选项卡管理 七、异常处理 引言 这一节我们继续讲解Selenium的使用下篇&#xff0…...

【数据结构】第四弹——LinkedList与链表

文章目录 一. ArrayList 的缺陷二.链表2.1 链表的概念及结构2.2 链表的结构2.2.1 单向或者双向2.2.2 带头或者不带头2.2.3 循环非循环 2.3 链表的实现1. IList接口2. MySingleList 类中具体实现(不带头单向非循环链表)1. 节点抽象成内部类手搓一个链表2. 头插法3. 尾插法4. 指定…...

设计模式从入门到精通之(五)观察者模式

观察者模式&#xff1a;实现高效事件通知的秘诀 在日常生活中&#xff0c;我们经常需要同步通知多方的信息变更。比如天气预报系统、股票价格波动提醒、社交媒体的点赞通知等。这些场景中&#xff0c;通知机制需要高效、灵活&#xff0c;而不会因为通知方的变化影响系统整体。 …...

chili3d调试笔记3 加入c++ 大模型对话方法 cmakelists精读

加入 #include <emscripten/bind.h> #include <emscripten/val.h> #include <nlohmann/json.hpp> 怎么加包 函数直接用emscripten::function&#xff0c;如&#xff1a; emscripten::function("send_to_llm", &send_to_llm); set (CMAKE_C…...

使用人工智能大模型kimi,如何免费制作PPT?

使用人工智能大模型kimi&#xff0c;如何免费制作PPT&#xff1f; 手把手操作视频https://edu.csdn.net/learn/40406/666573...

ModbusTCP 转 Profinet 主站网关

一、 功能概述 1.1 设备简介 本产品是 ModbusTCP 和 Profinet(M) 网关&#xff08;以下简称网关&#xff09;&#xff0c;使用数据映射 方式工作。 本产品在 ModbusTCP 侧作为 ModbusTCP 从站&#xff0c;接 PLC 、上位机、 wincc 屏 等&#xff1b;在 Profin…...

进阶篇|CAN FD 与性能优化

引言 1. CAN vs. CAN FD 对比 2. CAN FD 帧结构详解...

6.6 “3步调用ChatGPT打造高可靠Python调度器,零依赖实现定时任务自动化“

3步调用ChatGPT打造高可靠Python调度器,零依赖实现定时任务自动化 关键词:ChatGPT代码生成、Python调度器设计、定时任务自动化、异常处理机制、日志监控系统 需求分析与技术选型 GitHub Sentinel 需要实现两种定时任务模式: #mermaid-svg-prOScv2NNhn6w90N {font-family:…...

HarmonyOS 基础语法概述 UI范式

ArkUI框架 - UI范式 ArkTS的基本组成 装饰器&#xff1a; 用于装饰类、结构、方法以及变量&#xff0c;并赋予其特殊的含义。如上述示例中Entry、Component和State都是装饰器&#xff0c;Component表示自定义组件&#xff0c;Entry表示该自定义组件为入口组件&#xff0c;Stat…...

23种设计模式-创建型模式之建造者模式(Java版本)

Java 建造者模式&#xff08;Builder Pattern&#xff09;详解 &#x1f9f1; 什么是建造者模式&#xff1f; 建造者模式用于将一个复杂对象的构建过程与其表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 适用于创建过程复杂、构造顺序稳定但组件变化的对象。…...

【AI提示词】退休规划顾问专家

提示说明 随着人口老龄化的加剧&#xff0c;越来越多的人开始关注退休规划问题。一个专业的退休规划顾问可以帮助用户合理规划退休生活&#xff0c;确保退休后的生活质量。 提示词 # 角色 退休规划顾问专家## 注意 1. 专家设计应符合退休规划的专业性和可靠性&#xff0c;帮…...

文献总结:NIPS2023——车路协同自动驾驶感知中的时间对齐(FFNet)

FFNet 一、文献基本信息二、背景介绍三、相关研究1. 以自车为中心的3D目标检测2. 车路协同3D目标检测3. 特征流 四、FFNet网络架构1. 车路协同3D目标检测任务定义2. 特征流网络2.1 特征流生成2.2 压缩、传输与解压缩2.3 车辆传感器数据与基础设施特征流融合 3. 特征流网络训练流…...

(二十六)Java观察者模式在Android开发中的应用详解

Java观察者模式在Android开发中的应用 观察者模式&#xff08;Observer Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;使得多个观察者对象可以同时监听一个主题对象。当主题对象的状态发生变化时&#xff0c;所有注册的观察者…...

goland做验证码识别时报“undefined: gosseract.NewClient”

gosseract 应该有 和 c 相关的配置库因此需要安装 cgo 并且启用 CGO_ENABLED 在cmd下面输入这个 go env -w CGO_ENABLED1 接着输入 go env 验证是否设置成功 解决了这个问题后 “undefined: gosseract.NewClient” 又出现了 # runtime/cgo …...

ceph weight 和 reweight 的区别

ceph osd df ID CLASS WEIGHT REWEIGHT SIZE RAW USE DATA OMAP META AVAIL %USE VAR PGS STATUS0 nvme 6.98630 0.95508 7.0 TiB 5.0 TiB 4.9 TiB 13 GiB 33 GiB 2.0 TiB 71.10 0.96 83 up1 nvme 6.98630...

# 使用 PyTorch 构建并训练一个简单的 CNN 模型进行图像分类

使用 PyTorch 构建并训练一个简单的 CNN 模型进行图像分类 在深度学习领域&#xff0c;卷积神经网络&#xff08;CNN&#xff09;是处理图像分类任务的强大工具。本文将通过一个简单的示例&#xff0c;展示如何使用 PyTorch 构建、训练和测试一个 CNN 模型&#xff0c;用于对食…...

Linux网络编程 深入解析TFTP协议:基于UDP的文件传输实战

知识点1【TFTP的概述】 学习通信的基本&#xff1a;通信协议&#xff08;具体发送上面样的报文&#xff09;、通信流程&#xff08;按照什么步骤发送&#xff09; 1、TFTP的概述 tftp&#xff1a;简单文件传输协议&#xff0c;**基于UDP&#xff0c;**不进行用户有效性验证 …...

汽车免拆诊断案例 | 2019款大众途观L车鼓风机偶尔不工作

故障现象 一辆2019款大众途观L车&#xff0c;搭载DKV发动机和0DE双离合变速器&#xff0c;累计行驶里程约为8万km。车主进厂反映&#xff0c;鼓风机偶尔不工作。 故障诊断  接车后试车&#xff0c;鼓风机各挡位均工作正常。用故障检测仪检测&#xff0c;空调控制单元&#x…...

编程常见错误归类

上一篇讲了调试&#xff0c;今天通过一个举例回忆一下上一篇内容吧&#xff01; 1. 回顾&#xff1a;调试举例 在VS2022、X86、Debug的环境下&#xff0c;编译器不做任何优化的话&#xff0c;下⾯代码执⾏的结果是啥&#xff1f; #include <stdio.h> int main() {int …...

Python 3.13 support for PyTorch

Python 3.13 support for PyTorch Python 3.13 support for PyTorch 去官网可以查到具体信息&#xff1a;https://pytorch.org/get-started/locally/ 然后选择自己的CUDA版本&#xff0c;下面会显示下载网站&#xff0c;比如我选择12.4&#xff0c;则会出现&#xff1a;pip3 …...

中国联通:《DeepSeek洞察与大模型应用:人工智能技术发展与应用实践》(可下载)

近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术迅猛发展&#xff0c;尤其是大模型技术的崛起&#xff0c;正在深刻改变各行各业的运营模式和创新路径。作为中国通信行业的领军企业之一&#xff0c;中国联通积极拥抱AI技术变革&#xff0c;结合自身在通信网络、大数…...

k8s 调整Node节点 Max_Pods

默认情况下&#xff0c;Kubernetes集群中一个Node最多能起110个Pod。 这是基于性能和资源管理的考虑&#xff0c;以确保Kubernetes集群的稳定性和可靠性。 查看kht125节点上支持的最大pod数量: kubectl describe node kht125 | grep -i “Capacity|Allocatable” -A 6 调整…...

VR拍摄要点与技巧有哪些?有哪些最佳实践?

VR拍摄要点与技巧&#xff1a;最佳实践 VR技术通过模拟环境&#xff0c;使用户能够沉浸在一个完全由计算机生成的虚拟世界中&#xff0c;进行互动体验。在VR拍摄领域&#xff0c;我们主要利用这一技术来创建360度全景视频或图片&#xff0c;让观众能够全方位、无死角地感受拍摄…...

使用 Docker 安装 Elastic Stack 并重置本地密码

Elastic Stack&#xff08;也被称为 ELK Stack&#xff09;是一个非常强大的工具套件&#xff0c;用于实时搜索、分析和可视化大量数据。Elastic Stack 包括 Elasticsearch、Logstash、Kibana 等组件。本文将展示如何使用 Docker 安装 Elasticsearch 并重置本地用户密码。 ###…...

安卓手机万能遥控器APP推荐

软件介绍 安卓手机也能当“家电总控台”&#xff1f;这款小米旗下的万能遥控器APP&#xff0c;直接把遥控器做成“傻瓜式操作”——不用配对&#xff0c;不连蓝牙&#xff0c;点开就能操控电视、空调、机顶盒&#xff0c;甚至其他品牌的电器&#xff01;雷总这波操作直接封神&…...

PLOS ONE:VR 游戏扫描揭示了 ADHD 儿童独特的大脑活动

在孩子的成长过程中&#xff0c;总有那么一些“与众不同”的孩子。他们似乎总是坐不住&#xff0c;课堂上小动作不断&#xff0c;注意力难以集中&#xff0c;作业总是拖拖拉拉……这些行为常常被家长和老师简单地归结为“淘气”“不听话”。然而&#xff0c;他们可能并不只是“…...

Linux 系统编程 day4 进程管道

进程间通信&#xff08;IPC&#xff09; Linux环境下&#xff0c;进程地址空间相互独立&#xff0c;任何一个进程的全局变量在另一个进程中都看不到&#xff0c;所以进程和进程之间不能互相访问&#xff0c;要交换数据必须通过内核&#xff0c;在内核中开辟一块缓冲区&#xf…...

基于DeepSeek的考研暑假日志分析

注&#xff1a;我去年考研时写了日志&#xff0c;大致记录了我每天的主要活动。由于过于琐碎&#xff0c;一直没有翻看。突发奇想&#xff0c;现在利用deepseek总结其中规律。 从你的日志中可以总结出以下规律和活动兴衰起落&#xff1a; ​​一、学习活动规律与演变​​ ​​…...

Python 写生成 应用商店(2025版) 网页 方便收集应用 ,局域网使用

工具【1】&#xff1a;nginx 配置 nginx.conf 文件 server { listen 8080; server_name example.com; location / { root E:/BIT_Soft_2025; index index.html index.htm; } # 定义错误页面 error_page 404 /4…...

LLaMA Factory多模态微调实践:微调Qwen2-VL构建文旅大模型

LLaMA Factory 是一款开源低代码大模型微调框架&#xff0c;集成了业界最广泛使用的微调技术&#xff0c;支持通过 Web UI 界面零代码微调大模型&#xff0c;目前已经成为开源社区内最受欢迎的微调框架之一&#xff0c;GitHub 星标超过 4.7 万。本教程将基于通义千问团队开源的…...