根据数据库所查数据进行邮件定时发送

根据数据库所查数据进行邮件定时发送

项目地址:https://gitee.com/AirOranges/email-crontab
功能需求

定期从数据库中获取数据,并将所获取数据以邮件形式发送给需求者。

介绍

定时发送邮件程序,使用多数据库源,可从mysql,oracle 中 读取数据进行发送。

软件架构

使用springboot 2.3.5.RELEASE 作为主要框架

使用quartz 作为定时任务调度框架

使用springboot 整合mail 进行邮件发送

使用easypoi 将数据生成excel

整合mysql ,oracle 驱动 使用阿里数据库连接池

使用velocity 作为velocity代码生成使用模板

使用mybatis 作为持久层查询

安装教程
  1. mvn clean
  2. mvn package
  3. 导入sql ./sql/email-crontab.sql
  4. java -jar ./target/email-crontab.jar --spring.profiles.active=pro
使用说明
  1. 修改application-pro.yml 文件配置

    server:
     session-timeout: 28800
     #    tomcat:
     #        max-threads: 1000
     #        min-spare-threads: 30
     # 端口修改
     port: ${sport:8080}
    spring:
     # 邮箱配置 使用smtp 协议各个邮箱配置方式可以自行查找
     mail:
      host: smtp.qq.com
      name: 顾明杰
      username: 295703009@qq.com
      # 客户端密码(非登录密码)
      password: XXXXXXXXX
      properties:
       mail:
        smtp:
         auth: true  # 需要验证登录名和密码
        starttls:
         enable: true  # 需要TLS认证 保证发送邮件安全验证
         required: true
    
     datasource:
      type: com.alibaba.druid.pool.DruidDataSource
      driverClassName: com.mysql.cj.jdbc.Driver
      druid:
       # 主库数据源
       master:
        url: jdbc:mysql://localhost:3306/email-crontab?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        username: root
        password: 1qaz2wsx
       # 从库数据源
       slave:
        # 从数据源开关/默认关闭
        enabled: false
        url:
        username:
        password:
       # oracle
       oracle:
        # 从数据源开关/默认关闭
        enabled: true
        url: jdbc:oracle:thin:@localhost:1521:email-crontab
        username: root
        password: 1qaz2wsx
       # 初始连接数
       initialSize: 5
       # 最小连接池数量
       minIdle: 10
       # 最大连接池数量
       maxActive: 20
       # 配置获取连接等待超时的时间
       maxWait: 60000
       # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
       timeBetweenEvictionRunsMillis: 60000
       # 配置一个连接在池中最小生存的时间,单位是毫秒
       minEvictableIdleTimeMillis: 300000
       # 配置一个连接在池中最大生存的时间,单位是毫秒
       maxEvictableIdleTimeMillis: 900000
       # 配置检测连接是否有效
       validationQuery: SELECT 1 FROM DUAL
       testWhileIdle: true
       testOnBorrow: false
       testOnReturn: false
       webStatFilter:
        enabled: true
       statViewServlet:
        enabled: true
        # 设置白名单,不填则允许所有访问
        allow:
        url-pattern: /druid/*
        # 控制台管理用户名和密码
        login-username:
        login-password:
       filter:
        stat:
         enabled: true
         # 慢SQL记录
         log-slow-sql: true
         slow-sql-millis: 1000
         merge-sql: true
        wall:
         config:
          multi-statement-allow: true
    
    # 任务时间配置
    jobs:
     sendGasJob:
      # 每天 12:00
      corn: 0 12 00 * * ?
    
    
  2. 修改config.json 配置

    [
      {
        "sql": [
          {
            "sqlName": "SELECT * FROM email_crontab_test",
            "sqlContent": "第一封邮件测试主数据库1"
          },
          {
            "sqlName": "SELECT * FROM email_crontab_test_copy",
            "sqlContent": "第一封邮件测试主数据库2"
          }
        ],
        "subject": "第一封邮件测试主数据库",
        "content": "第一封邮件测试主数据库",
        "useDataSource": "master",
        "toList": [
          {
            "toName": "顾明杰qq",
            "toMail": "1033128175@qq.com"
          },
          {
            "toName": "顾明杰gmail",
            "toMail": "gumingjie.qi@gmail.com"
          }
        ],
        "ccList": [
          {
            "toName": "顾明杰qq",
            "toMail": "1033128175@qq.com"
          },
          {
            "toName": "顾明杰gmail",
            "toMail": "gumingjie.qi@gmail.com"
          }
        ]
      },
      {
        "sql": [
          {
            "sqlName": "select * from user_tables",
            "sqlContent": "第二封邮件测试从数据库"
          }
        ],
        "subject": "第二封邮件测试从数据库",
        "content": "第二封邮件测试从数据库",
        "useDataSource": "oracle",
        "toList": [
          {
            "toName": "顾明杰qq",
            "toMail": "1033128175@qq.com"
          },
          {
            "toName": "顾明杰gmail",
            "toMail": "gumingjie.qi@gmail.com"
          }
        ],
        "ccList": [
          {
            "toName": "顾明杰qq",
            "toMail": "1033128175@qq.com"
          },
          {
            "toName": "顾明杰gmail",
            "toMail": "gumingjie.qi@gmail.com"
          }
        ]
      }
    ]
    
  3. 修改日志文件配置 logback-spring.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration  scan="true" scanPeriod="60 seconds" debug="false">
        <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
        <!--<property name="LOG_HOME" value="/home" />-->
        <!-- 控制台输出 -->
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            </encoder>
        </appender>
        <!-- 按照每天生成日志文件 -->
        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--日志文件输出的文件名-->
                <!--<FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern>-->
                <FileNamePattern>
                    applog/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.log
                </FileNamePattern>
                <!--日志文件保留天数-->
                <MaxHistory>30</MaxHistory>
            </rollingPolicy>
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            </encoder>
            <!--日志文件最大的大小-->
            <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <MaxFileSize>10MB</MaxFileSize>
            </triggeringPolicy>
        </appender>
    
    
        <!-- 日志输出级别 -->
        <root level="INFO">
            <appender-ref ref="STDOUT" />
            <appender-ref ref="FILE" />
        </root>
    </configuration>
    
    
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值