13-MHA架构安装与配置

2024-05-31 07:38
文章标签 配置 安装 架构 13 mha

本文主要是介绍13-MHA架构安装与配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 环境
  • 所有节点添加hosts
  • 修改mysql节点配置
  • mysql节点上创建复制用户
    • 先在master上创建同步用户
    • 在slave节点上也创建同步用户
  • slave节点上配置同步
  • 在master上进行授权
  • 准备ssh互通环境
    • manager创建公钥并发送到其他主机
    • master创建公钥并发送到其他主机
    • slave1创建公钥并发送到其他主机
    • slave2创建公钥并发送到其他主机
  • 下载MHA安装包
    • 下载地址
    • 所有节点上安装mha4mysql-node
    • 所有节点安装依赖包
    • 管理节点上安装mha4mysql-manager
    • 编译安装
  • 定义MHA管理配置文件
    • 创建mha管理配置文件
    • 创建所需目录
    • 对所有个节点进行检测
    • 启动MHA
    • 停止MHA命令
  • 创建自动清除relay log脚本
    • 授予可执行权限
    • 添加至定时任务
  • 2种配置VIP的方式
    • 使用keepalived配置VIP
    • MHA引入keepalived
    • 使用脚本引入VIP

环境

192.168.17.141  manager
192.168.17.131  master
192.168.17.132  slave1
192.168.17.134  slave2

所有节点添加hosts

[root@manager ~]# vi /etc/hosts
192.168.17.141  manager
192.168.17.131  master
192.168.17.132  slave1
192.168.17.134  slave2[root@master ~]# vi /etc/hosts
192.168.17.141  manager
192.168.17.131  master
192.168.17.132  slave1
192.168.17.134  slave2[root@slave1 ~]# vi /etc/hosts
192.168.17.141  manager
192.168.17.131  master
192.168.17.132  slave1
192.168.17.134  slave2[root@slave2 ~]# vi /etc/hosts
192.168.17.141  manager
192.168.17.131  master
192.168.17.132  slave1
192.168.17.134  slave2

修改mysql节点配置

[root@master ~]# vi /etc/my.cnf
server-id = 1               # 复制集群中的各节点的id均必须唯一
log-bin = mysql-bin        # 开启二进制日志
relay-log = relay-bin       # 开启中继日志
skip_name_resolve           # 关闭名称解析(非必须)[root@slave1 ~]# vi /etc/my.cnf
server-id = 2               # 复制集群中的各节点的id均必须唯一;
relay-log = relay-bin       # 开启中继日志
log-bin = mysql-bin        # 开启二进制日志
read_only = ON              # 启用只读属性
relay_log_purge = 0         # 是否自动清空不再需要中继日志
skip_name_resolve           # 关闭名称解析(非必须)
log_slave_updates = 1       # 使得更新的数据写进二进制日志中[root@slave2 ~]# vi /etc/my.cnf
server-id = 3               # 复制集群中的各节点的id均必须唯一;
relay-log = relay-bin       # 开启中继日志
log-bin = mysql-bin        # 开启二进制日志
read_only = ON              # 启用只读属性
relay_log_purge = 0         # 是否自动清空不再需要中继日志
skip_name_resolve           # 关闭名称解析(非必须)
log_slave_updates = 1       # 使得更新的数据写进二进制日志中

mysql节点上创建复制用户

先在master上创建同步用户

[root@master ~]# mysql -uroot -p000000
mysql> grant replication slave,replication client on *.* to 'mharepl'@'%' identified by '000000';
mysql> flush privileges;
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |      608 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.03 sec)

在slave节点上也创建同步用户

[root@slave1 ~]# mysql -uroot -p000000
mysql> grant replication slave,replication client on *.* to 'mharepl'@'%' identified by '000000';
mysql> flush privileges;[root@slave2 ~]# mysql -uroot -p000000
mysql> grant replication slave,replication client on *.* to 'mharepl'@'%' identified by '000000';
mysql> flush privileges;

slave节点上配置同步

[root@slave1 ~]# mysql -uroot -p000000
mysql> CHANGE MASTER TO->   MASTER_HOST='192.168.17.131',->   MASTER_USER='mha',->   MASTER_PASSWORD='000000',->   MASTER_PORT=3306,->   MASTER_LOG_FILE='mysql-bin.000003',->   MASTER_LOG_POS=608;
mysql> start slave;
mysql> show slave status\G;[root@slave2 ~]# mysql -uroot -p000000
mysql> CHANGE MASTER TO->   MASTER_HOST='192.168.17.131',->   MASTER_USER='mha',->   MASTER_PASSWORD='000000',->   MASTER_PORT=3306,->   MASTER_LOG_FILE='mysql-bin.000003',->   MASTER_LOG_POS=608;
mysql> start slave;
mysql> show slave status\G;

在master上进行授权

[root@master ~]# mysql -uroot -p000000
mysql> grant all privileges on *.* to 'mhaadmin'@'%' identified by '000000';
mysql> flush privileges;

准备ssh互通环境

必须保证所有集群都能ssh互通

manager创建公钥并发送到其他主机

[root@manager ~]# ssh-keygen -t rsa
[root@manager ~]# ssh-copy-id -i .ssh/id_rsa.pub root@master
[root@manager ~]# ssh-copy-id -i .ssh/id_rsa.pub root@slave1
[root@manager ~]# ssh-copy-id -i .ssh/id_rsa.pub root@slave2

master创建公钥并发送到其他主机

[root@master ~]# ssh-keygen -t rsa
[root@master ~]# ssh-copy-id -i .ssh/id_rsa.pub root@manager
[root@master ~]# ssh-copy-id -i .ssh/id_rsa.pub root@slave1
[root@master ~]# ssh-copy-id -i .ssh/id_rsa.pub root@slave2

slave1创建公钥并发送到其他主机

[root@slave1 ~]# ssh-keygen -t rsa
[root@slave1 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@manager
[root@slave1 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@master
[root@slave1 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@slave2

slave2创建公钥并发送到其他主机

[root@slave2 ~]# ssh-keygen -t rsa
[root@slave2 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@manager
[root@slave2 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@master
[root@slave2 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@slave1

下载MHA安装包

下载地址

https:# github.com/yoshinorim/mha4mysql-manager/releases
https:# github.com/yoshinorim/mha4mysql-node/releases

所有节点上安装mha4mysql-node

mysql节点上先安装mysql-community-libs-compat

[root@master src]# rpm -ivh mysql-community-libs-compat-5.7.26-1.el7.x86_64.rpm
[root@slave1 src]# rpm -ivh mysql-community-libs-compat-5.7.26-1.el7.x86_64.rpm
[root@slave2 src]# rpm -ivh mysql-community-libs-compat-5.7.26-1.el7.x86_64.rpm

所有节点安装依赖包

yum install -y perl-DBD-MySQL perl-ExtUtils-MakeMaker perl-CPAN
#解压
tar -zxvf mha4mysql-node-0.58.tar.gz
#移动到/usr/local/mha4mysql-node-0.58目录下
mv mha4mysql-node-0.58 /usr/local/mha4mysql-node-0.58
#编译
cd /usr/local/mha4mysql-node-0.58
perl Makefile.PL
#make并安装
make
make install

安装完成后会在/usr/local/bin/生成以下脚本文件,Node脚本说明:
这些工具通常由MHA Manager的脚本触发,无需人为操作

    save_binary_logs               # 保存和复制master的二进制日志apply_diff_relay_logs          # 识别差异的中继日志事件并将其差异的事件应用于其他的slavefilter_mysqlbinlog             # 去除不必要的ROLLBACK事件(MHA已不再使用这个工具)purge_relay_logs               # 清除中继日志(不会阻塞SQL线程)

管理节点上安装mha4mysql-manager

#安装依赖包
yum -y install epel-release perl-CPAN* perl-DBD-MySQL  perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager
#解压
tar -zxf mha4mysql-manager-0.58.tar.gz
#移动目录
mv mha4mysql-manager-0.58 /usr/local/mha4mysql-manager-0.58

编译安装

cd /usr/local/mha4mysql-manager-0.58/
perl Makefile.PL
make
make install

安装完成后,在/usr/local/bin会多出以下相关的命令脚本:

    masterha_check_repl       # 检查MySQL复制健康状况masterha_check_ssh        # 检查ssh健康状况masterha_check_status     # 检测当前MHA运行状态masterha_conf_host        # 添加或者删除配置的server信息masterha_manager          # 启动MHAmasterha_master_monitor   # 检测master是否宕机masterha_master_switch    # 控制故障转移(自动或者手动)masterha_secondary_check  # 如果从manager节点发现masterha_stop             # 停止MHA

在/usr/local/mha4mysql-manager-0.58/samples/scripts 目录下会有相关脚本

    master_ip_failover        # 自动切换时vip管理的脚本,不是必须,如果我们使用keepalived的,我们可以自己编写脚本完成对vip的管理,比如监控mysql,如果mysql异常,我们停止keepalived就行,这样vip就会自动漂移master_ip_online_change   # 在线切换时vip的管理,不是必须,同样可以可以自行编写简单的shell完成power_manager             # 故障发生后关闭主机的脚本,不是必须send_report               # 因故障切换后发送报警的脚本,不是必须,可自行编写简单的shell完成

定义MHA管理配置文件

MHA manager有两个配置文件模板,在路径$MHA_BASE/samples/conf/下的app1.cnf和masterha_default.cnf。

app1.cnf  #是对某个复制组的配置文件。
masterha_default.cnf   #MHA manager的全局配置文件,可以通过这一个配置文件管理多个复制组。
[root@manager mha4mysql-manager-0.58]# cp /usr/local/mha4mysql-manager-0.58/samples/conf/app1.cnf /etc/mha/

创建mha管理配置文件

[root@manager src]# mkdir /etc/mha
vi /etc/mha/app1.cnf
[server default]
#mha manager日志文件
manager_log=/usr/local/mha/app1/manager.log
#manager工作目录
manager_workdir=/usr/local/mha/app1
#master节点存放binlog日志路径,以便MHA找到binlog,这里就是MySQL的数据目录
master_binlog_dir=/var/lib/mysql
#发生切换时slave节点binlog日志存放路径
remote_workdir=/usr/local/mha/app1
#自动切换脚本
master_ip_failover_script=/usr/local/mha4mysql-manager-0.58/samples/scripts/master_ip_failover
#手动切换脚本
master_ip_online_change_script=/usr/local/mha4mysql-manager-0.58/samples/scripts/master_ip_online_change
#监控主节点时间间隔
ping_interval=1
#设置故障发生后关闭故障主机脚本(该脚本的主要作用是关闭主机防止发生脑裂,这里没有使用)
#shutdown_script=""
#数据库监控用户
user=mhaadmin
password=000000
#复制用户
repl_user=mha
repl_password=000000
#ssh登录用户
ssh_user=root[server1]
hostname=192.168.17.131
port=3306[server2]
#设置为候选master,如果设置该参数以后,发生主从切换以后将会将此从库提升为主库,即使这个主库不是集群中事件最新的slave
candidate_master=1
#默认情况下如果一个slave落后master 100M的relay logs的话,MHA将不会选择该slave作为一个新的master,因为对于这个slave的恢复需要花费很长时间,通过设置check_repl_delay=0,MHA触发切换在选择一个新的master的时候将会忽略复制延时,这个参数对于设置了candidate_master=1的主机非常有用,因为这个候选主在切换的过程中一定是新的master
check_repl_delay=0
hostname=192.168.17.132
port=3306[server3]
hostname=192.168.17.134
port=3306

创建所需目录

[root@manager src]# mkdir -p /usr/local/mha/app1

对所有个节点进行检测

在manager上检测各节点间ssh互信通信配置是否ok

[root@manager ~]# /usr/local/bin/masterha_check_ssh --conf=/etc/mha/app1.cnf

检查管理的MySQL复制集群的连接配置参数是否OK

[root@manager ~]# /usr/local/bin/masterha_check_repl --conf=/etc/mha/app1.cnf

启动MHA

manager节点上执行以下命令来启动MHA

[root@manager ~]# nohup /usr/local/bin/masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover &> /usr/local/mha/manager.log &

启动成功以后,查看master节点的状态

[root@manager ~]# masterha_check_status --conf=/etc/mha/app1.cnf
mha (pid:18829) is running(0:PING_OK), master:192.168.17.131

停止MHA命令

[root@manager ~]# /usr/local/bin/masterha_stop --conf=/etc/mha/app1.cnf

创建自动清除relay log脚本

MHA在发生切换的过程中,从库的恢复过程中依赖于relay log的相关信息,所以这里要将relay log的自动清除设置为OFF,采用手动清除relay log的方式。在默认情况下,从服务器上的中继日志会在SQL线程执行完毕后被自动删除。但是在MHA环境中,这些中继日志在恢复其他从服务器时可能会被用到,因此需要禁用中继日志的自动删除功能。定期清除中继日志需要考虑到复制延时的问题。在ext3的文件系统下,删除大的文件需要一定的时间,会导致严重的复制延时。为了避免复制延时,需要暂时为中继日志创建硬链接,因为在linux系统中通过硬链接删除大文件速度会很快。(在mysql数据库中,删除大表时,通常也采用建立硬链接的方式)

MHA节点中包含了pure_relay_logs命令工具,它可以为中继日志创建硬链接,执行SET GLOBAL relay_log_purge=1,等待几秒钟以便SQL线程切换到新的中继日志,再执行SET GLOBAL relay_log_purge=0。

清理日志脚本:

[root@manager ~]# vi /usr/local/mha/purge_relay_log.sh
#!/bin/bash
#数据库用户名密码端口
user=root
passwd=000000
port=3306
#脚本日志存放路径
log_dir='/usr/local/mha/app1'
#指定创建relay log的硬链接的位置,默认是/var/tmp。由于系统不同分区创建硬链接文件会失败,故需要执行硬链接具体位置,成功执行脚本后,硬链接的中继日志文件被删除。
work_dir='/usr/local/mha'
#删除中继日志脚本
purge='/usr/local/bin/purge_relay_logs'if [ ! -d $log_dir ]
thenmkdir -p $log_dir
fi#--disable_relay_log_purge :默认情况下,如果relay_log_purge=1,脚本会什么都不清理,自动退出。通过设定这个参数,当relay_log_purge=1的情况下会将relay_log_purge设置为0。清理relay log之后,最后将参数设置为OFF。
$purge --user=$user --password=$passwd --disable_relay_log_purge --port=$port --workdir=$work_dir >> $log_dir/purge_relay_logs.log 2>&1

授予可执行权限

[root@manager ~]# chmod +x purge_relay_log.sh 

添加至定时任务

00 03 * * * /bin/bash /usr/local/mha/purge_relay_log.sh

2种配置VIP的方式

使用keepalived配置VIP

keepalived安装略

在master和candidate master上安装,即在master、slave1上安装.

master的keepalived.conf

! Configuration File for keepalivedglobal_defs {router_id master
}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 100nopreemptadvert_int 1authentication {auth_type PASSauth_pass 000000}virtual_ipaddress {192.168.17.130}
}

slave1的keepalived.conf

! Configuration File for keepalivedglobal_defs {router_id slave1
}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 90nopreemptadvert_int 1authentication {auth_type PASSauth_pass 000000}virtual_ipaddress {192.168.17.130}
}

MHA引入keepalived

MySQL服务进程挂掉时通过MHA停止keepalived,需要修改切换是触发的脚本文件master_ip_failover即可,在该脚本中添加在master发生宕机时对keepalived的处理。

[root@manager scripts]# vi /usr/local/bin/master_ip_failover
#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';use Getopt::Long;my ($command,          $ssh_user,        $orig_master_host, $orig_master_ip,$orig_master_port, $new_master_host, $new_master_ip,    $new_master_port
);my $vip = "192.168.17.130";
my $ssh_start_vip = "systemctl start keepalived";
my $ssh_stop_vip = "systemctl stop keepalived";GetOptions('command=s'          => \$command,'ssh_user=s'         => \$ssh_user,'orig_master_host=s' => \$orig_master_host,'orig_master_ip=s'   => \$orig_master_ip,'orig_master_port=i' => \$orig_master_port,'new_master_host=s'  => \$new_master_host,'new_master_ip=s'    => \$new_master_ip,'new_master_port=i'  => \$new_master_port,
);exit &main();sub main {print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";if ( $command eq "stop" || $command eq "stopssh" ) {my $exit_code = 1;eval {print "Disabling the VIP on old master: $orig_master_host \n";&stop_vip();$exit_code = 0;};if ($@) {warn "Got Error: $@\n";exit $exit_code;}exit $exit_code;}elsif ( $command eq "start" ) {my $exit_code = 10;eval {print "Enabling the VIP - $vip on the new master - $new_master_host \n";&start_vip();$exit_code = 0;};if ($@) {warn $@;exit $exit_code;}exit $exit_code;}elsif ( $command eq "status" ) {print "Checking the Status of the script.. OK \n";exit 0;}else {&usage();exit 1;}
}
sub start_vip() {`ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;
}
# A simple system call that disable the VIP on the old_master
sub stop_vip() {`ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;
}sub usage {print"Usage: master_ip_failover --command=start|stop|stopssh|status --orig_master_host=host --orig_master_ip=ip --orig_master_port=port --new_master_host=host --new_master_ip=ip --new_master_port=port\n";
}

使用脚本引入VIP

通过脚本的方式管理VIP。这里是修改/usr/local/bin/master_ip_failover。修改完成后内容如下,而且如果使用脚本管理vip的话,需要手动在master服务器上绑定一个vip。

/sbin/ifconfig ens160:1 10.238.162.100/24

通过脚本引入VIP的实验不在演示,我自己做了自动切换的实验是可以的。大家可以自己做做实验看看日志输出理解原理。脚本如下供参考,需要根据自己环境修改VIP与网卡等信息

    # cat master_ip_failover#!/usr/bin/env perluse strict;use warnings FATAL => 'all';use Getopt::Long;my ($command,          $ssh_user,        $orig_master_host, $orig_master_ip,$orig_master_port, $new_master_host, $new_master_ip,    $new_master_port);my $vip = '10.238.162.100/24';my $key = '1';my $ssh_start_vip = "/sbin/ifconfig ens160:$key $vip";my $ssh_stop_vip = "/sbin/ifconfig ens160:$key down";GetOptions('command=s'          => \$command,'ssh_user=s'         => \$ssh_user,'orig_master_host=s' => \$orig_master_host,'orig_master_ip=s'   => \$orig_master_ip,'orig_master_port=i' => \$orig_master_port,'new_master_host=s'  => \$new_master_host,'new_master_ip=s'    => \$new_master_ip,'new_master_port=i'  => \$new_master_port,);exit &main();sub main {print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";if ( $command eq "stop" || $command eq "stopssh" ) {my $exit_code = 1;eval {print "Disabling the VIP on old master: $orig_master_host \n";&stop_vip();$exit_code = 0;};if ($@) {warn "Got Error: $@\n";exit $exit_code;}exit $exit_code;}elsif ( $command eq "start" ) {my $exit_code = 10;eval {print "Enabling the VIP - $vip on the new master - $new_master_host \n";&start_vip();$exit_code = 0;};if ($@) {warn $@;exit $exit_code;}exit $exit_code;}elsif ( $command eq "status" ) {print "Checking the Status of the script.. OK \n";exit 0;}else {&usage();exit 1;}}sub start_vip() {`ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;}sub stop_vip() {return 0  unless  ($ssh_user);`ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;}sub usage {print"Usage: master_ip_failover --command=start|stop|stopssh|status --orig_master_host=host --orig_master_ip=ip --orig_master_port=port --new_master_host=host --new_master_ip=ip --new_master_port=port\n";}

这篇关于13-MHA架构安装与配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1017573

相关文章

Jsoncpp的安装与使用方式

《Jsoncpp的安装与使用方式》JsonCpp是一个用于解析和生成JSON数据的C++库,它支持解析JSON文件或字符串到C++对象,以及将C++对象序列化回JSON格式,安装JsonCpp可以通过... 目录安装jsoncppJsoncpp的使用Value类构造函数检测保存的数据类型提取数据对json数

mac安装redis全过程

《mac安装redis全过程》文章内容主要介绍了如何从官网下载指定版本的Redis,以及如何在自定义目录下安装和启动Redis,还提到了如何修改Redis的密码和配置文件,以及使用RedisInsig... 目录MAC安装Redis安装启动redis 配置redis 常用命令总结mac安装redis官网下

最新版IDEA配置 Tomcat的详细过程

《最新版IDEA配置Tomcat的详细过程》本文介绍如何在IDEA中配置Tomcat服务器,并创建Web项目,首先检查Tomcat是否安装完成,然后在IDEA中创建Web项目并添加Web结构,接着,... 目录配置tomcat第一步,先给项目添加Web结构查看端口号配置tomcat    先检查自己的to

Servlet中配置和使用过滤器的步骤记录

《Servlet中配置和使用过滤器的步骤记录》:本文主要介绍在Servlet中配置和使用过滤器的方法,包括创建过滤器类、配置过滤器以及在Web应用中使用过滤器等步骤,文中通过代码介绍的非常详细,需... 目录创建过滤器类配置过滤器使用过滤器总结在Servlet中配置和使用过滤器主要包括创建过滤器类、配置过滤

如何安装 Ubuntu 24.04 LTS 桌面版或服务器? Ubuntu安装指南

《如何安装Ubuntu24.04LTS桌面版或服务器?Ubuntu安装指南》对于我们程序员来说,有一个好用的操作系统、好的编程环境也是很重要,如何安装Ubuntu24.04LTS桌面... Ubuntu 24.04 LTS,代号 Noble NumBAT,于 2024 年 4 月 25 日正式发布,引入了众

如何安装HWE内核? Ubuntu安装hwe内核解决硬件太新的问题

《如何安装HWE内核?Ubuntu安装hwe内核解决硬件太新的问题》今天的主角就是hwe内核(hardwareenablementkernel),一般安装的Ubuntu都是初始内核,不能很好地支... 对于追求系统稳定性,又想充分利用最新硬件特性的 Ubuntu 用户来说,HWEXBQgUbdlna(Har

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

python中poetry安装依赖

《python中poetry安装依赖》本文主要介绍了Poetry工具及其在Python项目中的安装和使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录前言1. 为什么pip install poetry 会造成依赖冲突1.1 全局环境依赖混淆:1

windows端python版本管理工具pyenv-win安装使用

《windows端python版本管理工具pyenv-win安装使用》:本文主要介绍如何通过git方式下载和配置pyenv-win,包括下载、克隆仓库、配置环境变量等步骤,同时还详细介绍了如何使用... 目录pyenv-win 下载配置环境变量使用 pyenv-win 管理 python 版本一、安装 和

在Spring中配置Quartz的三种方式

《在Spring中配置Quartz的三种方式》SpringQuartz是一个任务调度框架,它允许我们定期执行特定的任务,在Spring中,我们可以通过多种方式来配置Quartz,包括使用​​@Sche... 目录介绍使用 ​​@Scheduled​​ 注解XML 配置Java 配置1. 创建Quartz配置