1. 程式人生 > 其它 >根據資料庫所查資料進行郵件定時傳送

根據資料庫所查資料進行郵件定時傳送

技術標籤:javajava

根據資料庫所查資料進行郵件定時傳送

專案地址: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: [email protected] # 客戶端密碼(非登入密碼) 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": "[email protected]"
          },
          {
            "toName": "顧明傑gmail",
            "toMail": "[email protected]"
          }
        ],
        "ccList": [
          {
            "toName": "顧明傑qq",
            "toMail": "[email protected]"
          },
          {
            "toName": "顧明傑gmail",
            "toMail": "[email protected]"
          }
        ]
      },
      {
        "sql": [
          {
            "sqlName": "select * from user_tables",
            "sqlContent": "第二封郵件測試從資料庫"
          }
        ],
        "subject": "第二封郵件測試從資料庫",
        "content": "第二封郵件測試從資料庫",
        "useDataSource": "oracle",
        "toList": [
          {
            "toName": "顧明傑qq",
            "toMail": "[email protected]"
          },
          {
            "toName": "顧明傑gmail",
            "toMail": "[email protected]"
          }
        ],
        "ccList": [
          {
            "toName": "顧明傑qq",
            "toMail": "[email protected]"
          },
          {
            "toName": "顧明傑gmail",
            "toMail": "[email protected]"
          }
        ]
      }
    ]
    
  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>