AE86 2 роки тому
батько
коміт
5f62b97d4a

+ 2 - 5
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/config/ConfigChecker.java

@@ -1,6 +1,5 @@
 package org.dbsyncer.biz.checker.impl.config;
 
-import org.apache.commons.lang3.StringUtils;
 import org.dbsyncer.biz.BizException;
 import org.dbsyncer.biz.checker.AbstractChecker;
 import org.dbsyncer.common.util.NumberUtil;
@@ -85,11 +84,9 @@ public class ConfigChecker extends AbstractChecker {
             config.setRefreshInterval(time);
         }
 
-        // 刷新邮箱配置
+        // 刷新邮箱配置(有配置则发邮件)
         String email = params.get("email");
-        if (StringUtils.isNotBlank(email)){
-            config.setEmail(email);
-        }
+        config.setEmail(email);
 
         // 修改基本配置
         this.modifyConfigModel(config, params);

+ 0 - 14
dbsyncer-common/pom.xml

@@ -31,10 +31,6 @@
             <groupId>javax.annotation</groupId>
             <artifactId>javax.annotation-api</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-core</artifactId>
-        </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-cache</artifactId>
@@ -61,16 +57,6 @@
             <artifactId>fastjson</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-web</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-mail</artifactId>
-        </dependency>
-
     </dependencies>
 
 </project>

+ 0 - 9
dbsyncer-common/src/main/java/org/dbsyncer/common/mail/MailService.java

@@ -1,9 +0,0 @@
-package org.dbsyncer.common.mail;
-
-import org.dbsyncer.common.mail.entity.MailRequest;
-
-public interface MailService {
-
-    void sendSimpleMail(MailRequest mailRequest);
-
-}

+ 0 - 24
dbsyncer-common/src/main/java/org/dbsyncer/common/mail/controller/SendMailController.java

@@ -1,24 +0,0 @@
-package org.dbsyncer.common.mail.controller;
-
-
-import org.dbsyncer.common.mail.MailService;
-import org.dbsyncer.common.mail.entity.MailRequest;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-@RequestMapping(value = "/sendMail")
-public class SendMailController {
-
-    @Autowired
-    private MailService mailService;
-
-    @PostMapping(value = "/simple")
-    public void sendSimpleMessage(@RequestBody MailRequest mailRequest){
-        mailService.sendSimpleMail(mailRequest);
-    }
-
-}

+ 0 - 58
dbsyncer-common/src/main/java/org/dbsyncer/common/mail/entity/MailRequest.java

@@ -1,58 +0,0 @@
-package org.dbsyncer.common.mail.entity;
-
-import java.io.Serializable;
-
-public class MailRequest implements Serializable {
-
-    /**
-     * 接收人
-     */
-    private String receiver;
-
-    /**
-     * 邮件主题
-     */
-    private String subject;
-
-    /**
-     * 邮件内容
-     */
-    private String text;
-
-    /**
-     * 附近路径
-     */
-    private String filePath;
-
-    public String getReceiver() {
-        return receiver;
-    }
-
-    public void setReceiver(String receiver) {
-        this.receiver = receiver;
-    }
-
-    public String getSubject() {
-        return subject;
-    }
-
-    public void setSubject(String subject) {
-        this.subject = subject;
-    }
-
-    public String getText() {
-        return text;
-    }
-
-    public void setText(String text) {
-        this.text = text;
-    }
-
-    public String getFilePath() {
-        return filePath;
-    }
-
-    public void setFilePath(String filePath) {
-        this.filePath = filePath;
-    }
-}

+ 0 - 69
dbsyncer-common/src/main/java/org/dbsyncer/common/mail/impl/MailServiceImpl.java

@@ -1,69 +0,0 @@
-package org.dbsyncer.common.mail.impl;
-
-import org.dbsyncer.common.mail.MailService;
-import org.dbsyncer.common.mail.entity.MailRequest;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.mail.SimpleMailMessage;
-import org.springframework.mail.javamail.JavaMailSender;
-import org.springframework.stereotype.Service;
-import org.springframework.util.Assert;
-
-import java.util.Date;
-
-@Service
-public class MailServiceImpl implements MailService{
-
-    private static final Logger LOG = LoggerFactory.getLogger(MailService.class);
-
-    @Value("${spring.mail.username}")
-    private String sender;
-
-    // 注入邮件工具类
-    @Autowired
-    private JavaMailSender javaMailSender;
-
-    public void checkMail(MailRequest mailRequest){
-        Assert.notNull(mailRequest,"邮件请求不能为空");
-        Assert.notNull(mailRequest.getReceiver(),"邮件收件人不能为空");
-        Assert.notNull(mailRequest.getSubject(),"邮件主题不能为空");
-        Assert.notNull(mailRequest.getText(),"邮件内容不能为空");
-    }
-
-    /**
-     * 发送简单邮件
-     *
-     * @param mailRequest
-     */
-    @Override
-    public void sendSimpleMail(MailRequest mailRequest){
-
-        checkMail(mailRequest);
-
-        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
-        simpleMailMessage.setFrom(sender);
-
-        // 邮件发件人一个或多个
-        String receiver = mailRequest.getReceiver();
-        if (receiver.contains(";")){
-            simpleMailMessage.setTo(receiver.split(";"));
-        }else {
-            simpleMailMessage.setTo(receiver);
-        }
-
-        simpleMailMessage.setSubject(mailRequest.getSubject());
-        simpleMailMessage.setText(mailRequest.getText());
-        simpleMailMessage.setSentDate(new Date());
-
-        try {
-            javaMailSender.send(simpleMailMessage);
-            LOG.info("simple mail send success");
-        }catch (Exception e){
-            LOG.error("simpple mail send error!",e);
-        }
-
-    }
-
-}

+ 50 - 0
dbsyncer-common/src/main/java/org/dbsyncer/common/model/NotifyMessage.java

@@ -0,0 +1,50 @@
+package org.dbsyncer.common.model;
+
+/**
+ * 通知消息
+ *
+ * @author AE86
+ * @version 1.0.0
+ * @date 2022/11/13 22:14
+ */
+public class NotifyMessage {
+
+    /**
+     * 消息标题
+     */
+    private String title;
+
+    /**
+     * 消息内容
+     */
+    private String content;
+
+    /**
+     * 消息接收人
+     */
+    private String receiver;
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getReceiver() {
+        return receiver;
+    }
+
+    public void setReceiver(String receiver) {
+        this.receiver = receiver;
+    }
+}

+ 20 - 0
dbsyncer-common/src/main/java/org/dbsyncer/common/spi/NotifyService.java

@@ -0,0 +1,20 @@
+package org.dbsyncer.common.spi;
+
+import org.dbsyncer.common.model.NotifyMessage;
+
+/**
+ * 通知服务(同步异常、连接器异常、应用异常等消息)
+ *
+ * @author AE86
+ * @version 1.0.0
+ * @date 2022/11/13 22:07
+ */
+public interface NotifyService {
+
+    /**
+     * 发送通知消息
+     *
+     * @param notifyMessage
+     */
+    void sendMessage(NotifyMessage notifyMessage);
+}

+ 5 - 22
dbsyncer-manager/src/main/java/org/dbsyncer/manager/puller/FullPuller.java

@@ -1,8 +1,5 @@
 package org.dbsyncer.manager.puller;
 
-import org.dbsyncer.common.mail.MailService;
-import org.dbsyncer.common.mail.entity.MailRequest;
-import org.dbsyncer.common.util.CollectionUtils;
 import org.dbsyncer.common.util.NumberUtil;
 import org.dbsyncer.manager.Manager;
 import org.dbsyncer.parser.Parser;
@@ -10,7 +7,10 @@ import org.dbsyncer.parser.enums.ParserEnum;
 import org.dbsyncer.parser.event.FullRefreshEvent;
 import org.dbsyncer.parser.logger.LogService;
 import org.dbsyncer.parser.logger.LogType;
-import org.dbsyncer.parser.model.*;
+import org.dbsyncer.parser.model.Mapping;
+import org.dbsyncer.parser.model.Meta;
+import org.dbsyncer.parser.model.TableGroup;
+import org.dbsyncer.parser.model.Task;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -48,25 +48,9 @@ public class FullPuller extends AbstractPuller implements ApplicationListener<Fu
 
     private Map<String, Task> map = new ConcurrentHashMap<>();
 
-    @Autowired
-    private MailService mailService;
-
-
     @Override
     public void start(Mapping mapping) {
-
-        List<Config> all = manager.getConfigAll();
-        String email = null;
-        if (!CollectionUtils.isEmpty(all)) {
-            Config config = all.get(0);
-            email = config.getEmail();
-        }
-        MailRequest mailRequest = new MailRequest();
-        mailRequest.setReceiver(email);
-        mailRequest.setSubject("dbsyncer同步结果");
-        mailRequest.setText("数据库同步失败!!!");
-
-        Thread worker = new Thread(() -> {
+        Thread worker = new Thread(()->{
             final String metaId = mapping.getMetaId();
             try {
                 List<TableGroup> list = manager.getSortedTableGroupAll(mapping.getId());
@@ -79,7 +63,6 @@ public class FullPuller extends AbstractPuller implements ApplicationListener<Fu
             } catch (Exception e) {
                 logger.error(e.getMessage());
                 logService.log(LogType.SystemLog.ERROR, e.getMessage());
-                mailService.sendSimpleMail(mailRequest);
             } finally {
                 map.remove(metaId);
                 publishClosedEvent(metaId);

+ 23 - 0
dbsyncer-plugin/src/main/java/org/dbsyncer/plugin/NotifySupportConfiguration.java

@@ -0,0 +1,23 @@
+package org.dbsyncer.plugin;
+
+import org.dbsyncer.common.spi.NotifyService;
+import org.dbsyncer.plugin.notify.DefaultNotifyService;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author AE86
+ * @version 1.0.0
+ * @date 2022/11/13 22:20
+ */
+@Configuration
+public class NotifySupportConfiguration {
+
+    @Bean
+    @ConditionalOnMissingBean
+    public NotifyService notifyService() {
+        return new DefaultNotifyService();
+    }
+
+}

+ 18 - 0
dbsyncer-plugin/src/main/java/org/dbsyncer/plugin/notify/DefaultNotifyService.java

@@ -0,0 +1,18 @@
+package org.dbsyncer.plugin.notify;
+
+import org.dbsyncer.common.model.NotifyMessage;
+import org.dbsyncer.common.spi.NotifyService;
+
+/**
+ * 默认通知服务
+ *
+ * @author AE86
+ * @version 1.0.0
+ * @date 2022/11/13 22:57
+ */
+public class DefaultNotifyService implements NotifyService {
+    @Override
+    public void sendMessage(NotifyMessage notifyMessage) {
+
+    }
+}

+ 102 - 0
dbsyncer-plugin/src/main/java/org/dbsyncer/plugin/notify/EmailNotifyService.java

@@ -0,0 +1,102 @@
+package org.dbsyncer.plugin.notify;
+
+import org.dbsyncer.common.model.NotifyMessage;
+import org.dbsyncer.common.spi.NotifyService;
+import org.dbsyncer.common.util.StringUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.mail.SimpleMailMessage;
+import org.springframework.mail.javamail.JavaMailSender;
+import org.springframework.mail.javamail.JavaMailSenderImpl;
+import org.springframework.stereotype.Component;
+import org.springframework.util.Assert;
+
+import javax.annotation.PostConstruct;
+import java.util.Date;
+import java.util.Properties;
+
+/**
+ * 邮件通知服务实现
+ *
+ * @author AE86
+ * @version 1.0.0
+ * @date 2022/11/13 22:20
+ */
+@Component
+@ConditionalOnProperty(value = "dbsyncer.plugin.notify.email.enabled", havingValue = "true")
+@ConfigurationProperties(prefix = "dbsyncer.plugin.notify.email")
+public class EmailNotifyService implements NotifyService {
+
+    private final Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+     * 邮箱账户
+     */
+    private String username;
+
+    /**
+     * 授权码
+     */
+    private String password;
+
+    /**
+     * 邮件发送
+     */
+    private JavaMailSender mailSender;
+
+    @PostConstruct
+    private void init() {
+        logger.info("username:{}", username);
+
+        JavaMailSenderImpl sender = new JavaMailSenderImpl();
+        //服务器
+        sender.setHost("smtp.qq.com");
+        //协议
+        sender.setProtocol("smtps");
+        //端口号
+        sender.setPort(465);
+        //邮箱账号
+        sender.setUsername(username);
+        //邮箱授权码
+        sender.setPassword(password);
+        //编码
+        sender.setDefaultEncoding("Utf-8");
+        Properties p = new Properties();
+        p.setProperty("mail.smtp.ssl.enable", "true");
+        sender.setJavaMailProperties(p);
+
+        this.mailSender = sender;
+    }
+
+    @Override
+    public void sendMessage(NotifyMessage notifyMessage) {
+        checkMail(notifyMessage);
+
+        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
+        // 发送人
+        simpleMailMessage.setFrom(username);
+        // 标题
+        simpleMailMessage.setSubject(notifyMessage.getTitle());
+        // 内容
+        simpleMailMessage.setText(notifyMessage.getContent());
+        // 接收人
+        simpleMailMessage.setTo(StringUtil.split(notifyMessage.getReceiver(), ";"));
+        simpleMailMessage.setSentDate(new Date());
+
+        try {
+            mailSender.send(simpleMailMessage);
+            logger.info("simple mail send success");
+        } catch (Exception e) {
+            logger.error("simple mail send error!", e);
+        }
+    }
+
+    private void checkMail(NotifyMessage notifyMessage) {
+        Assert.notNull(notifyMessage, "通知请求不能为空");
+        Assert.notNull(notifyMessage.getTitle(), "邮件主题不能为空");
+        Assert.notNull(notifyMessage.getContent(), "邮件内容不能为空");
+        Assert.notNull(notifyMessage.getReceiver(), "邮件收件人不能为空");
+    }
+}

+ 5 - 12
dbsyncer-web/src/main/resources/application.properties

@@ -21,6 +21,11 @@ dbsyncer.parser.flush.buffer.actuator.batch-count=1000
 dbsyncer.parser.flush.buffer.actuator.queue-capacity=50000
 dbsyncer.parser.flush.buffer.actuator.period-millisecond=300
 
+#plugin
+#dbsyncer.plugin.notify.email.enabled=false
+#dbsyncer.plugin.notify.email.username=your email username
+#dbsyncer.plugin.notify.email.password=your email authorization code
+
 #storage
 dbsyncer.storage.binlog.recorder.batch-count=1000
 dbsyncer.storage.binlog.recorder.max-processing-seconds=120
@@ -52,15 +57,3 @@ spring.thymeleaf.cache=false
 spring.resources.chain.strategy.content.enabled=true
 spring.resources.chain.strategy.content.paths=/**
 
-#邮件参数
-spring.mail.host=smtp.qq.com
-#发送方邮件名 配置自己的邮箱账户
-spring.mail.username=coderszx@qq.com
-#授权码 配置自己的授权码
-spring.mail.password=
-spring.mail.default-encoding=UTF-8
-#465
-spring.mail.port=587 
-spring.mail.properties.mail.smtp.ssl.enable=false
-spring.mail.properties.mail.smtp.ssl.required=false
-