• Monthly Archives: 2月 2024

使用SpringBoot3.2.3[Gradle]整合JavaFX

环境:JDK1.7

官方的配置参考指导:https://openjfx.cn/openjfx-docs/#gradle

第一步:修改Gradle配置,增加JavaFX依赖

在项目的build.gradle文件中增加JavaFX的插件配置:

plugins {
	//JavaFX
	id 'application'
	id 'org.openjfx.javafxplugin' version '0.0.13'
}

//JavaFX配置
javafx {
	version = "17.0.2"
	modules = [ 'javafx.controls', 'javafx.graphics', 'javafx.base', 'javafx.fxml' ]
}

版本号可以在这里获取:https://openjfx.cn/dl/

但是注意一下:

1、有可能官网上最新的版本号在Maven依赖镜像仓中不存在,我在测试的时候,官网的是17.0.4,但一直无法下载成功,于是改成17.0.2就成功了。

2、org.openjfx.javafxplugin的version如果太低,则有可能无法匹配到对应的依赖。当时我找的教程是0.0.10,但是一直提示javafx的配置那里一直报灰色(失效),且无法build。

第二步:创建窗体程序类

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;

public class MainApp extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        AnchorPane anchorPane = new AnchorPane();
        Scene scene = new Scene(anchorPane, 200, 150);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

}

第三步:改造SpringBoot启动类

import javafx.application.Application;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class RmToolApplication implements CommandLineRunner {

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

	@Override
	public void run(String... args) throws Exception {
		Application.launch(MainApp.class, args);
	}

}

第四步:启动

在安装了OpenWrt的树莓派4B上组建软RAID1,然后进行故障恢复测试,并配置监控的邮件通知

组建软RAID1

先插入两个规格相同的存储器,一般会是/dev/sda和/dev/sdb,此时可以使用以下两个命令来查看磁盘情况:

#查看当前系统磁盘使用情况
df -h
#查看磁盘情况
fdisk -l

然后使用以下命令对这两个存储器分别进行分区和格式化:

fdisk /dev/sda

然后按顺序进行以下操作:

输入n,回车

输入p,回车

输入1,回车

回车

输入分区大小如+2G

输入wq,回车

至此新建完sda1,然后再用同样的操作对/dev/sdb进行操作以新建sda2。

然后在OpenWRT界面中进行软raid1的建立:

记得要把你的磁盘阵列成员选上,也就是刚刚的/dev/sda1和/dev/sdb1。

接着如下图所示创建一个挂载点:

注意:同一个存储器在开机启动时不能被同时挂载,否则会以最后一个挂载为准。

然后重启设备即可,重启后可以到OpenWRT中查看挂载情况:

模拟故障

查看当前RAID的详情:

mdadm --detail /dev/md0

使用以下命令让设备分区sdb1模拟故障:

mdadm --manage /dev/md0 --fail /dev/sdb1

然后查看软RAID的详情:

mdadm --detail /dev/md0

从RAID1阵列中移除sdb1分区:

mdadm --manage /dev/md0 --remove /dev/sdb1

再次查看RAID详情:

mdadm --detail /dev/md0

从上图中可以看到原来标记faulty的设备信息已经没有看见了。

接着我们拔掉故障存储器sdb,把存储器sdb插到其他电脑上删除分区,然后再插回到设备上,接着格式化,此时咱们的sdb1又回来了。

于是使用以下指令进行把用于模拟恢复的设备分区sdb1重新加回到原来的md0软阵列分区中:

mdadm --add /dev/md0 /dev/sdb1

执行命令后,可以看到两个存储器正在闪烁并同步数据,使用以下命令可以查看到RAID1的数据正在重建中:

最后等待重建完毕,在此过程中,/dev/sda1依然能够正常访问:

若同步完毕,则两个盘的状态都会如下图所示:

设置RAID的健康监控通知

在网络上有些人说mdadm的监控配置路径是/etc/mdadm.conf或/etc/mdadm/mdadm.conf,但是我都找不到,然后使用“mdadm –monitor –scan”指令,其提示:

这是没有配置邮箱地址的提示,那我便创建了/etc/mdadm.conf和/etc/mdadm/mdadm.conf这两个配置文件,结果提示依然没变。

找了网上资料,说monitor指令需要加-mail参数,加了后又说只允许有一个监控进程:

然后使用以下指令查看相关进程:

ps -ef | grep mdadm

这才得知,原来默认是加载的/var/etc/mdadm.conf文件啊!

于是便打开/var/etc/mdadm.conf文件,发现又有一句提示:

然后又看看/etc/config/mdadm这个文件,看到我明明已经修改了:

但是这里又看到下面的array配置已经成功写到了/var/etc/mdadm.conf文件了。于是心里便想,是不是启动服务时某个脚本创建的呢?所以就到/etc/init.d里面找找相关的启动脚本。

果真如此!找到了mdadm的启动脚本,编辑他:

vim /etc/init.d/mdadm

发现有如下代码片段:

意思是只有找到sendmail程序时才会在mdadm的配置文件中加入邮箱地址。

我看了下,没有sendmail,但我已经安装并配置好了msmtp了,所以就修改一下这里:

mdadm_common() {
        local cfg="$1"
        local email devices

#       if [ -x /usr/sbin/sendmail ]; then
        if [ -x /usr/bin/msmtp ]; then
                config_get email "$cfg" email
#               [ -n "$email" ] && printf "MAILADDR %s\n" "$email" >> $CONF
               [ -n "$email" ] && printf "MAILADDR %s\nMAILFROM %s\n" "$email" "$email" >> $CONF
        fi

        config_list_foreach "$cfg" devices append_list_item devices " "
        [ -n "$devices" ] && printf "DEVICE %s\n" "$devices" >> $CONF
}

然后umount你的分区,再使用 service mdadm restart 命令来服务即可。

如果配置正常,则你在模拟分区异常的时候,就能够收到如图所示的邮件通知:

其他

强制检查时遇到“sh: /usr/lib/sendmail: not found”,则代表你的mdadm默认调用的是sendmail的程序进行邮件发送的,但你的电脑上并没有安装sendmail,所以报了这个错误。此时你如果想继续使用msmtp的话,则可以使用以下指令创建软连接:

ln -s /usr/bin/msmtp /usr/lib/sendmail

然后再次执行mdadm的强制测试指令即可:

mdadm --monitor --scan --test --oneshot

在OpenWRT上配置MSMTP邮件服务并配置QQ邮箱

先执行msmtp命令看看是否已经安装,如果没有安装,则会如下图所示:

然后使用以下命令进行安装

opkg update
opkg install msmtp

再次输入msmtp命令,不再有命令错误提示,即代表安装成功。

使用以下指令测试邮件发送:

echo -e "Subject: Test\n\nThis is a test email." | msmtp 81408242@qq.com

此时出现如下提示:

这是因为安装msmtp服务后未配置邮件服务器引起的,我们使用以下指令进行配置:

vim /etc/msmtprc

然后修改成smtp的默认配置参数即可:

account default
host smtp.qq.com
port 587
tls on
tls_starttls on
user 81408242@qq.com
password *************** #这里换成邮箱授权密码
from 81408242@qq.com
auth on

保存后再次使用邮件测试指令进行测试即可:

echo -e "Subject: Test\r\n\r\nThis is a test email." | msmtp 81408242@qq.com
close