构建镜像监测MySQL免费服务器节点状态

1. MySQL免费服务器

https://sqlpub.com/#/

注册即可免费获得MySQL服务

image-20240607153755675

2. 监测服务可靠性

springboot:3.3.0

jdk:17

因为服务器结点会有版本迁移情况存在,所以我想写一个服务,能够监测服务器的可靠性,并且在不可达的时候发送邮件给我

@Slf4j
@Component
@RequiredArgsConstructor
public class MySQLMonitor {

    private final JavaMailSender mailSender;

    private static final String DB_URL = "jdbc:mysql://mysql.sqlpub.com:3306/*****";
    private static final String DB_USERNAME = "*****";
    private static final String DB_PASSWORD = "*******";

    @Scheduled(fixedRate = 60000000)  // 每1000分钟检查一次
    public void checkMySQLConnection() {
        try (Connection connection = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD)) {
            log.info("MySQL is online.");
        } catch (SQLException e) {
            sendAlertEmail();
            log.info("MySQL is offline.");
        }
    }

    private void sendAlertEmail() {
        try {
            MimeMessage message = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);

            helper.setFrom("***@163.com", "MySQL服务器监测服务");
            helper.setTo("*****@qq.com");
            helper.setSubject("MySQL Service Alert");
            helper.setText("MySQL service is down.");

            mailSender.send(message);
        } catch (MessagingException e) {
            log.error("发送邮件失败: {}", e.getMessage());
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
    }
}

yml配置文件

spring:
  mail:
    host: smtp.163.com
    port: 25
    username: ***@163.com
    password: 授权码
    default-encoding: UTF-8

授权码需要去申请开通,Google一下很多教程

启动类注解,开启定时任务

@EnableScheduling

image-20240607154151168

3. 构建镜像

jar包

mvn clean package

编写Dockerfile文件

# 使用官方的 OpenJDK 17 作为基础镜像
FROM openjdk:17

# 设置工作目录
WORKDIR /app

# 将应用的 jar 文件复制到容器中
COPY MysqlOnline-0.0.1-SNAPSHOT.jar /app/app.jar

# 暴露应用运行的端口(根据你的应用配置)
EXPOSE 6060

# 运行应用
ENTRYPOINT ["java", "-jar", "/app/app.jar"]

构建

docker build -t mysql-monitor .

运行容器

docker run -d -p 6060:6060 --name mysql-monitor mysql-monitor

image-20240607154445009

4. 验证服务

image-20240607154516010

代码仓库