官方教程

搭建调度中心

Github
Gitee
:版本3.x开始要求Jdk17;版本2.x及以下支持Jdk1.8。如对Jdk版本有诉求,可选择接入不同版本

  • clone源代码
  • 执行xxl-job\doc\db\tables_xxl_job.sql
#
# XXL-JOB v2.4.1
# Copyright (c) 2015-present, xuxueli.CREATE database if NOT EXISTS `xxl_job` default character set utf8mb4 collate utf8mb4_unicode_ci;
use `xxl_job`;SET NAMES utf8mb4;CREATE TABLE `xxl_job_info` (`id` int(11) NOT NULL AUTO_INCREMENT,`job_group` int(11) NOT NULL COMMENT '执行器主键ID',`job_desc` varchar(255) NOT NULL,`add_time` datetime DEFAULT NULL,`update_time` datetime DEFAULT NULL,`author` varchar(64) DEFAULT NULL COMMENT '作者',`alarm_email` varchar(255) DEFAULT NULL COMMENT '报警邮件',`schedule_type` varchar(50) NOT NULL DEFAULT 'NONE' COMMENT '调度类型',`schedule_conf` varchar(128) DEFAULT NULL COMMENT '调度配置,值含义取决于调度类型',`misfire_strategy` varchar(50) NOT NULL DEFAULT 'DO_NOTHING' COMMENT '调度过期策略',`executor_route_strategy` varchar(50) DEFAULT NULL COMMENT '执行器路由策略',`executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',`executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',`executor_block_strategy` varchar(50) DEFAULT NULL COMMENT '阻塞处理策略',`executor_timeout` int(11) NOT NULL DEFAULT '0' COMMENT '任务执行超时时间,单位秒',`executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数',`glue_type` varchar(50) NOT NULL COMMENT 'GLUE类型',`glue_source` mediumtext COMMENT 'GLUE源代码',`glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE备注',`glue_updatetime` datetime DEFAULT NULL COMMENT 'GLUE更新时间',`child_jobid` varchar(255) DEFAULT NULL COMMENT '子任务ID,多个逗号分隔',`trigger_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '调度状态:0-停止,1-运行',`trigger_last_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '上次调度时间',`trigger_next_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '下次调度时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `xxl_job_log` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`job_group` int(11) NOT NULL COMMENT '执行器主键ID',`job_id` int(11) NOT NULL COMMENT '任务,主键ID',`executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址',`executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',`executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',`executor_sharding_param` varchar(20) DEFAULT NULL COMMENT '执行器任务分片参数,格式如 1/2',`executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数',`trigger_time` datetime DEFAULT NULL COMMENT '调度-时间',`trigger_code` int(11) NOT NULL COMMENT '调度-结果',`trigger_msg` text COMMENT '调度-日志',`handle_time` datetime DEFAULT NULL COMMENT '执行-时间',`handle_code` int(11) NOT NULL COMMENT '执行-状态',`handle_msg` text COMMENT '执行-日志',`alarm_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '告警状态:0-默认、1-无需告警、2-告警成功、3-告警失败',PRIMARY KEY (`id`),KEY `I_trigger_time` (`trigger_time`),KEY `I_handle_code` (`handle_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `xxl_job_log_report` (`id` int(11) NOT NULL AUTO_INCREMENT,`trigger_day` datetime DEFAULT NULL COMMENT '调度-时间',`running_count` int(11) NOT NULL DEFAULT '0' COMMENT '运行中-日志数量',`suc_count` int(11) NOT NULL DEFAULT '0' COMMENT '执行成功-日志数量',`fail_count` int(11) NOT NULL DEFAULT '0' COMMENT '执行失败-日志数量',`update_time` datetime DEFAULT NULL,PRIMARY KEY (`id`),UNIQUE KEY `i_trigger_day` (`trigger_day`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `xxl_job_logglue` (`id` int(11) NOT NULL AUTO_INCREMENT,`job_id` int(11) NOT NULL COMMENT '任务,主键ID',`glue_type` varchar(50) DEFAULT NULL COMMENT 'GLUE类型',`glue_source` mediumtext COMMENT 'GLUE源代码',`glue_remark` varchar(128) NOT NULL COMMENT 'GLUE备注',`add_time` datetime DEFAULT NULL,`update_time` datetime DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `xxl_job_registry` (`id` int(11) NOT NULL AUTO_INCREMENT,`registry_group` varchar(50) NOT NULL,`registry_key` varchar(255) NOT NULL,`registry_value` varchar(255) NOT NULL,`update_time` datetime DEFAULT NULL,PRIMARY KEY (`id`),KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `xxl_job_group` (`id` int(11) NOT NULL AUTO_INCREMENT,`app_name` varchar(64) NOT NULL COMMENT '执行器AppName',`title` varchar(12) NOT NULL COMMENT '执行器名称',`address_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '执行器地址类型:0=自动注册、1=手动录入',`address_list` text COMMENT '执行器地址列表,多地址逗号分隔',`update_time` datetime DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `xxl_job_user` (`id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(50) NOT NULL COMMENT '账号',`password` varchar(50) NOT NULL COMMENT '密码',`role` tinyint(4) NOT NULL COMMENT '角色:0-普通用户、1-管理员',`permission` varchar(255) DEFAULT NULL COMMENT '权限:执行器ID列表,多个逗号分割',PRIMARY KEY (`id`),UNIQUE KEY `i_username` (`username`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `xxl_job_lock` (`lock_name` varchar(50) NOT NULL COMMENT '锁名称',PRIMARY KEY (`lock_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;INSERT INTO `xxl_job_group`(`id`, `app_name`, `title`, `address_type`, `address_list`, `update_time`) VALUES (1, 'xxl-job-executor-sample', '示例执行器', 0, NULL, '2018-11-03 22:21:31' );
INSERT INTO `xxl_job_info`(`id`, `job_group`, `job_desc`, `add_time`, `update_time`, `author`, `alarm_email`, `schedule_type`, `schedule_conf`, `misfire_strategy`, `executor_route_strategy`, `executor_handler`, `executor_param`, `executor_block_strategy`, `executor_timeout`, `executor_fail_retry_count`, `glue_type`, `glue_source`, `glue_remark`, `glue_updatetime`, `child_jobid`) VALUES (1, 1, '测试任务1', '2018-11-03 22:21:31', '2018-11-03 22:21:31', 'XXL', '', 'CRON', '0 0 0 * * ? *', 'DO_NOTHING', 'FIRST', 'demoJobHandler', '', 'SERIAL_EXECUTION', 0, 0, 'BEAN', '', 'GLUE代码初始化', '2018-11-03 22:21:31', '');
INSERT INTO `xxl_job_user`(`id`, `username`, `password`, `role`, `permission`) VALUES (1, 'admin', 'e10adc3949ba59abbe56e057f20f883e', 1, NULL);
INSERT INTO `xxl_job_lock` ( `lock_name`) VALUES ( 'schedule_lock');commit;
  • 修改xxl-job-admin中的application.properties文件配置,主要修改数据库用户密码,及邮箱配置
# Web服务端口,默认8080
server.port=8080
# 应用上下文路径,访问地址会变成http://host:8080/xxl-job-admin
server.servlet.context-path=/xxl-job-admin# Actuator监控端点的上下文路径
management.server.servlet.context-path=/actuator
# 是否启用邮件健康检查,false表示禁用
management.health.mail.enabled=false# Spring MVC静态资源加载配置
# servlet启动时加载顺序,0表示延迟加载
spring.mvc.servlet.load-on-startup=0
# 静态资源访问路径模式
spring.mvc.static-path-pattern=/static/**
# 静态资源存放位置
spring.resources.static-locations=classpath:/static/# Freemarker模板引擎配置
# 模板文件加载路径
spring.freemarker.templateLoaderPath=classpath:/templates/
# 模板文件后缀
spring.freemarker.suffix=.ftl
# 模板编码格式
spring.freemarker.charset=UTF-8
# 模板中可访问的request对象属性名
spring.freemarker.request-context-attribute=request
# 数字格式化规则
spring.freemarker.settings.number_format=0.##########
# 更安全的类解析策略
spring.freemarker.settings.new_builtin_class_resolver=safer# MyBatis配置
# Mapper XML文件位置
mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml
# 实体类别名包路径(当前被注释)
#mybatis.type-aliases-package=com.xxl.job.admin.core.model# 数据库连接配置
# MySQL连接URL,包含时区设置和编码配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
# 数据库用户名
spring.datasource.username=root
# 数据库密码
spring.datasource.password=root
# JDBC驱动类名
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver# 数据库连接池配置(HikariCP)
# 连接池类型
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
# 最小空闲连接数
spring.datasource.hikari.minimum-idle=10
# 最大连接池大小
spring.datasource.hikari.maximum-pool-size=30
# 是否自动提交事务
spring.datasource.hikari.auto-commit=true
# 连接空闲超时时间(毫秒)
spring.datasource.hikari.idle-timeout=30000
# 连接池名称
spring.datasource.hikari.pool-name=HikariCP
# 连接最大生命周期(毫秒)
spring.datasource.hikari.max-lifetime=900000
# 连接超时时间(毫秒)
spring.datasource.hikari.connection-timeout=10000
# 连接测试查询语句
spring.datasource.hikari.connection-test-query=SELECT 1
# 连接验证超时时间(毫秒)
spring.datasource.hikari.validation-timeout=1000# 邮件服务配置(用于任务告警)
# SMTP服务器地址
spring.mail.host=smtp.qq.com
# SMTP端口
spring.mail.port=25
# 任务执行失败时,发件邮箱用户名
spring.mail.username=xxx@qq.com
# 任务执行失败时,发件人邮箱地址
spring.mail.from=xxx@qq.com
# 邮箱密码/授权码
spring.mail.password=xxx
# SMTP认证配置
spring.mail.properties.mail.smtp.auth=true
# 启用STARTTLS加密
spring.mail.properties.mail.smtp.starttls.enable=true
# 要求STARTTLS加密
spring.mail.properties.mail.smtp.starttls.required=true
# SSL Socket工厂类
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory# XXL-JOB安全配置
# 访问令牌,用于API调用的鉴权
xxl.job.accessToken=default_token# 国际化配置
# 默认中文简体,可选zh_CN(简体中文)、zh_TC(繁体中文)、en(英文)
xxl.job.i18n=zh_CN# 触发器线程池配置
# 快速任务线程池最大大小
xxl.job.triggerpool.fast.max=200
# 慢速任务线程池最大大小
xxl.job.triggerpool.slow.max=100# 日志保留配置
# 任务日志保留天数
xxl.job.logretentiondays=30
  • 启动项目访问http://host:8080/xxl-job-admin,账号密码为admin 123456
    在这里插入图片描述

搭建执行器端

  • 新建springboot项目
  • 引入Maven
        <dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.4.0</version></dependency>

注:可直接将clone下来的以下代码复制过去,或者按照下方的配置手动创建
在这里插入图片描述

  • 创建配置
# 服务端口配置
server:# 应用启动端口,默认8082port: 8082# 日志配置
logging:# 指定logback日志配置文件位置(classpath路径)config: classpath:logback.xml# XXL-JOB执行器配置
xxl:job:# 调度中心配置admin:# 调度中心地址(必须修改为实际部署的调度中心地址)# 格式:http://{调度中心IP}:{端口}/xxl-job-adminaddresses: http://127.0.0.1:8080/xxl-job-admin# 访问令牌(需与调度中心配置的xxl.job.accessToken保持一致)accessToken: default_token# 执行器配置executor:# 执行器应用名称(需在调度中心"执行器管理"中注册)appname: xxl-job-executor-sample# 执行器地址(自动获取,一般无需配置)address:# 执行器IP(自动获取,一般无需配置)ip:# 执行器端口(必须配置,用于接收调度中心请求)port: 9999# 任务日志存储路径(相对路径或绝对路径)logpath: ./logs/xxl-job-executor-sample# 日志保留天数logretentiondays: 30
  • 创建日志配置logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1 seconds"><contextName>logback</contextName><property name="log.path" value="/data/applogs/xxl-job/xxl-job-executor-sample-springboot.log"/><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${log.path}.%d{yyyy-MM-dd}.zip</fileNamePattern></rollingPolicy><encoder><pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n</pattern></encoder></appender><root level="info"><appender-ref ref="console"/><appender-ref ref="file"/></root></configuration>
  • 创建配置
package com.com.xxl.job.executor.core.config;import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class XxlJobConfig {private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);@Value("${xxl.job.admin.addresses}")private String adminAddresses;@Value("${xxl.job.accessToken}")private String accessToken;@Value("${xxl.job.executor.appname}")private String appname;@Value("${xxl.job.executor.address}")private String address;@Value("${xxl.job.executor.ip}")private String ip;@Value("${xxl.job.executor.port}")private int port;@Value("${xxl.job.executor.logpath}")private String logPath;@Value("${xxl.job.executor.logretentiondays}")private int logRetentionDays;@Beanpublic XxlJobSpringExecutor xxlJobExecutor() {logger.info(">>>>>>>>>>> xxl-job config init.");XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();xxlJobSpringExecutor.setAdminAddresses(adminAddresses);xxlJobSpringExecutor.setAppname(appname);xxlJobSpringExecutor.setAddress(address);xxlJobSpringExecutor.setIp(ip);xxlJobSpringExecutor.setPort(port);xxlJobSpringExecutor.setAccessToken(accessToken);xxlJobSpringExecutor.setLogPath(logPath);xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);return xxlJobSpringExecutor;}}
  • 创建定时任务
@Component
public class SampleXxlJob {private static Logger logger = LoggerFactory.getLogger(SampleXxlJob.class);/*** 1、简单任务示例(Bean模式)*/@XxlJob("testTask")public void demoJobHandler() throws Exception {XxlJobHelper.log("XXL-JOB, Hello World.");String param = XxlJobHelper.getJobParam();logger.info("执行次数简单任务示例,当前时间:{},任务参数:{}", DateUtil.formatDateTime(new Date()),param);}}
  • 启动当前服务

  • 新增任务
    在这里插入图片描述

  • 点击启动,开始执行定时任务
    在这里插入图片描述

  • 查看执行日志
    在这里插入图片描述
    其他配置参数项含义说明

@XxlJob参数说明

@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")

key说明
value自定义jobhandler名称,对应任务管理-新增-jobhandler在这里插入图片描述
initJobHandler初始化方法 ​​执行时机:(1)​​首次调度前执行​​:当执行器启动后,任务第一次被触发前(仅执行 ​​一次​​)。​​(2)重新部署时​​:如果执行器重启或应用重新部署,任务再次触发前会 ​​重新执行​​ init。(3)​​不会在每次调度前执行​​:即使任务被多次触发(如每分钟执行一次),init ​​不会重复执行​​​​
destroyJobHandler销毁方法 执行时机​​:(1)​​应用正常关闭时​​:通过 Spring 的优雅停机机制触发(​​一次​​)。​​(2)执行器卸载时​​:当执行器从调度中心移除或应用崩溃时 ​​可能不会执行​​(依赖 JVM 生命周期)。​​(3)不会在每次任务完成后执行​​:即使任务运行多次,destroy ​​不会在每次任务结束时触发​​。且在任务管理—操作—删除,也不会触发

任务的参数传递及获取

  • 传递
    在这里插入图片描述
  • 获取
  String param = XxlJobHelper.getJobParam();
 - 执行次数简单任务示例,当前时间:2025-05-10 18:57:12,任务参数:userId=123&type=export&date=2023-10-01

XxlJobHelper API 详解

  • String getJobParam()​​
    作用​​:获取调度中心配置的任务参数(任务管理界面填写的"任务参数")。
    ​​返回值​​:字符串格式的参数(如 key1=value1&key2=value2)。
    ​​场景​​
@XxlJob("demoJob")
public void demoJob() {String param = XxlJobHelper.getJobParam(); // 获取参数if (param.contains("key1")) {}
}
  • int getShardIndex()​​
    ​​作用​​​:获取当前执行器的分片序号(从 0 开始)​。
    ​​返回值​​​:当前分片索引(如 0、1)​。
    ​​场景​​​
int shardIndex = XxlJobHelper.getShardIndex();
String tableSuffix = "_" + shardIndex; // 按分片选择表
  • int getShardTotal()​​
    ​​​​作用​​​​​:获取总分片数(等于在线执行器数量)​。
    ​​​​返回值​​​​​:总分片数(如 2)​。
    ​​​​场景​​​​​:
int shardTotal = XxlJobHelper.getShardTotal();
int batchSize = totalRecords / shardTotal; // 计算每片处理量

​​

  • log(String log)​​
    ​​作用​​​:记录任务执行日志(可在调度日志—操作—执行日志查看)​。
    ​​参数​​​:日志内容字符串​。
    ​​场景​​​
XxlJobHelper.log("开始处理分片数据...");
try {process();XxlJobHelper.log("处理成功");
} catch (Exception e) {XxlJobHelper.log("处理失败: " + e.getMessage());
}

​​

  • boolean handleSuccess(String msg)​​
    ​​作用​​​:标记任务成功结束​。
    ​​参数​​​:成功提示信息​。
    ​​场景​​​
if (importData()) {XxlJobHelper.handleSuccess("数据导入完成");
}
  • ​​boolean handleFail(String msg)​​​​
    ​​​​作用​​​​​:标记任务失败并触发告警​。
    ​​​​参数​​​​​:失败原因​。
    ​​​​场景​​​​​:
try {riskyOperation();
} catch (Exception e) {XxlJobHelper.handleFail("操作失败: " + e.getMessage());
}
  • ​​String getJobId()​​​​
    ​​​​作用​​​​​:获取当前任务的唯一ID​。
    ​​​​返回值​​:任务ID字符串​。
    ​​​​场景​​​​​:
String jobId = XxlJobHelper.getJobId();
redis.set("running:" + jobId, "true");
  • ​​String getJobLogFileName()​​​​
    ​​​​作用​​​​​:获取当前任务日志文件路径​。
    ​​​​返回值​​​​​:日志文件绝对路径​。
    ​​​​场景​​​​​:
String logFile = XxlJobHelper.getJobLogFileName();
backupLog(logFile); // 备份日志
  • ​​setAppParam(String appParam)​​​​
    ​​​​作用​​​​​:动态设置任务参数​。
    ​​​​参数​​​​​:参数字符串(格式同getJobParam())​。
    ​​​​场景​​​​​:
XxlJobHelper.setAppParam("page=2&retry=1");
// 后续任务可通过 getJobParam() 获取

​​完整代码示例​

@XxlJob("advancedJob")
public void advancedJob() {// 1. 获取参数和分片信息String param = XxlJobHelper.getJobParam();//当前执行器的分片下标int shardIndex = XxlJobHelper.getShardIndex();//总计分片数量int shardTotal = XxlJobHelper.getShardTotal();XxlJobHelper.log("参数: " + param + ", 分片: " + shardIndex + "/" + shardTotal);// 2. 分片处理数据List<Data> dataList = fetchData(shardIndex, shardTotal);if (dataList.isEmpty()) {XxlJobHelper.handleSuccess("无数据可处理");return;}// 3. 处理并记录日志try {for (Data data : dataList) {process(data);XxlJobHelper.log("已处理: " + data.getId());}XxlJobHelper.handleSuccess("处理完成,共" + dataList.size() + "条");} catch (Exception e) {XxlJobHelper.handleFail("处理异常: " + e.getMessage());}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/904869.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/904869.shtml
英文地址,请注明出处:http://en.pswp.cn/news/904869.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HashMap中put()方法的执行流程

HashMap 是 Java 中最常用的数据结构之一&#xff0c;用于存储键值对。其 put() 方法是向哈希表中插入或更新键值对的核心操作。本文将详细解析 put() 方法的执行过程&#xff0c;涵盖哈希值计算、桶定位、冲突处理和扩容等步骤。 一、put() 方法的执行过程 put() 方法通过一系…

【Oracle认证】MySQL 8.0 OCP 认证考试英文版(MySQL30 周年版)

文章目录 1、MySQL OCP考试介绍2、考试注册流程3、考试复习题库 Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到2025.07.31 之前。所有人均可以免费考取原价245美元 &#xff08;约1500&#xff09;的MySQL OCP 认证。 1、MySQL OCP考试介绍 OCP考试 OCP认证是Oracle公司推…

SpringBoot框架开发网络安全科普系统开发实现

概述 基于SpringBoot框架的网络安全科普系统开发指南&#xff0c;该系统集知识科普、案例学习、在线测试等功能于一体&#xff0c;本文将详细介绍系统架构设计、功能实现及技术要点&#xff0c;帮助开发者快速构建专业的网络安全教育平台。 主要内容 系统功能架构 本系统采…

浏览器HTTP错误、前端常见报错 和 Java后端报错

以下是 浏览器HTTP错误、前端常见报错 和 Java后端报错 的综合整理&#xff0c;包括原因和解决方法&#xff0c;帮助你快速排查问题。 一、HTTP 错误&#xff08;浏览器报错&#xff09; 错误码原因解决方法400 Bad Request请求语法错误&#xff08;如参数格式错误、请求体过…

TypeScript简介

&#x1f31f; TypeScript入门 TypeScript 是 JavaScript 的超集&#xff0c;由微软开发并维护&#xff0c;通过静态类型检查和现代语言特性&#xff0c;让大型应用开发变得更加可靠和高效。 // 一个简单的 TypeScript 示例 interface User {name: string;age: number;greet():…

[ctfshow web入门] web57

信息收集 这下把.也过滤了&#xff0c;临时文件上传无法使用了 //flag in 36.php if(isset($_GET[c])){$c$_GET[c];if(!preg_match("/\;|[a-z]|[0-9]|\|\|\#|\|\"|\|\%|\x09|\x26|\x0a|\>|\<|\.|\,|\?|\*|\-|\|\[/i", $c)){system("cat ".$c…

Android 移动应用开发:页面跳转与数据传递功能

目录 ✅ 运行效果说明 &#x1f4c1; 文件一&#xff1a;MainActivity.java&#xff08;语言&#xff1a;Java&#xff09; &#x1f4c1; 文件二&#xff1a;Edit_MainActivity.java&#xff08;语言&#xff1a;Java&#xff09; &#x1f4c1; 文件三&#xff1a;activi…

MySQL如何优雅的执行DDL

一、概述 在MySQL中&#xff0c;DDL&#xff08;数据定义语言&#xff09;语句用于定义和管理数据库结构&#xff0c;包括创建、修改和删除数据库对象&#xff08;如表、索引等&#xff09;。执行DDL操作时&#xff0c;需要谨慎处理&#xff0c;以避免对生产环境的稳定性和性能…

onenet连接微信小程序(mqtt协议)

一、关于mqtt协议 mqtt协议常用于物联网&#xff0c;是一种轻量级的消息推送协议。 其中有三个角色&#xff0c;Publisher设备&#xff08;客户端&#xff09;发布主题到服务器&#xff0c;其他的设备通过订阅主题&#xff0c;获取该主题下的消息&#xff0c;Publisher可以发…

【Unity笔记】实现支持不同渲染管线的天空盒曝光度控制组件(SkyboxExposureController)——参数化控制

写在前面 在Unity中&#xff0c;天空盒&#xff08;Skybox&#xff09;不仅承担视觉上的背景作用&#xff0c;更是场景环境光照与氛围塑造的重要组成部分。不同时间、天气、场景转换等&#xff0c;都需要灵活调整天空的亮度。而**曝光度&#xff08;Exposure&#xff09;**就是…

blender云渲染指南2025版

一、云渲染核心概念 Blender云渲染是将本地渲染任务迁移到云端服务器集群的技术&#xff0c;通过分布式计算实现效率提升100倍以上的解决方案&#xff0c;其核心逻辑是&#xff1a;用户上传Blender项目文件至【渲染101】等云平台&#xff0c;云端调用高性能服务器&#xff08;…

火语言RPA--七牛云存储

【组件功能】&#xff1a;存储本地文件至七牛云 选择本地文件&#xff0c;通过七牛云存储配置上传至七牛云对象存储的指定地域指定存储桶指定路径。 配置预览 配置说明 AccessKey 支持T或# 前往官网获取或创建。参考链接&#xff1a;https://portal.qiniu.com/user/key Se…

小刚说C语言刷题—1004阶乘问题

1.题目描述 编程求 123⋯n 。 输入 输入一行&#xff0c;只有一个整数 n(1≤n≤10)&#xff1b; 输出 输出只有一行&#xff08;这意味着末尾有一个回车符号&#xff09;&#xff0c;包括 1 个整数。 样例 输入 5 输出 120 2.参考代码(C语言版) #include <stdio…

C语言| sizeof(array)占多少字节

C语言| 数组名作为函数参数 sizeof(数组名); 可以求出整个数组在内存中所占的字节数。 被调函数Array_Sum()中&#xff0c;数组array使用sizeof会得到多少&#xff1f; 实参数组a占32字节&#xff0c;实参a传给形参array&#xff0c;只占4字节。 原因如下&#xff1a; 数组名做…

Xcavate 上线 Polkadot |开启 Web3 房地产投资新时代

在传统资产 Tokenization 浪潮中&#xff0c;Xcavate 以房地产为切口迅速崛起。作为 2023 年 OneBlock 冬季波卡黑客松冠军&#xff0c;Xcavate 凭借创新的资产管理与分发机制&#xff0c;在波卡生态中崭露头角。此次主网上线&#xff0c;标志着 Xcavate 正式迈入全球化应用阶段…

学习心得《How Global AI Policy and Regulations Will Impact Your Enterprise》Gartner

AI时代来临,然而与之对应的是海量的数据的安全性和合规性如何保障,如何平衡个人与智能体的利益,恰巧,最近Gartner发布了《How Global AI Policy and Regulations Will Impact Your Enterprise》,我们就其中的观点一起进行探讨。 战略规划假设 我们首先关注的是关键的战略…

Inno Setup专业打包指南:从基础到高级应用

Inno Setup专业打包指南&#xff1a;从基础到高级应用 Inno Setup是一款免费开源的Windows安装程序制作工具&#xff0c;以其轻量、易用、功能强大而备受开发者青睐。它通过脚本语言定义安装行为&#xff0c;能够创建标准的Windows安装向导&#xff0c;支持文件安装、注册表操…

VScode中关于Copilot的骚操作

目录 1. Ctrl I 直接在工作区对话 2.Tab 党福音&#xff1a;写注释生成代码 3. 连续写几行函数头&#xff0c;Copilot 会自动“补全全函数” 4. 自动写单元测试 5. 在注释中要求它写某种风格 6. 代码重写器 7. 多语言切换无痛自动翻译 8. 在空文件中写注释&#xff0c…

虚拟专用服务器(VPS)完全指南:从入门到选型

开篇导读 VPS&#xff08;虚拟专用服务器&#xff09;作为介于共享主机与独立服务器之间的托管方案&#xff0c;通过独享资源保障性能本文将系统解析VPS的核心优势、适用场景及选型策略&#xff0c;助您实现从共享主机到VPS的平滑过渡 什么是虚拟专用服务器&#xff1f; 服务…

前端取经路——性能优化:唐僧的九道心经

大家好&#xff0c;我是老十三&#xff0c;一名前端开发工程师。性能优化如同唐僧的九道心经&#xff0c;是前端修行的精髓所在。在本文中&#xff0c;我将为你揭示从网络传输到渲染优化的九大关键技术&#xff0c;涵盖HTTP协议、资源加载策略、缓存控制等核心难题。通过这些实…