欢迎关注微信公众号:数据科学与艺术 作者WX:superhe199
使用Java的定时任务库Quartz来定时获取MySQL数据并发送邮件。下面是一个简单的示例代码:
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-email</artifactId>
<version>1.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
EmailSenderJob
:import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class EmailSenderJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
// 获取数据库连接
Connection connection = null;
try {
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "root", "123456");
Statement statement = connection.createStatement();
// 查询需要发送的数据
ResultSet resultSet = statement.executeQuery("SELECT * FROM data");
// 处理结果集,发送邮件
while (resultSet.next()) {
String email = resultSet.getString("email");
String subject = resultSet.getString("subject");
String content = resultSet.getString("content");
sendEmail(email, subject, content);
}
resultSet.close();
statement.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
private void sendEmail(String toAddress, String subject, String content) throws EmailException {
// 创建邮件
Email email = new SimpleEmail();
email.setHostName("your_smtp_host");
email.setSmtpPort(25);
// 设置发件人信息
email.setFrom("your_email_address", "Your Name");
// 设置收件人信息
email.addTo(toAddress);
// 设置邮件主题和内容
email.setSubject(subject);
email.setMsg(content);
// 发送邮件
email.send();
}
public static void main(String[] args) throws SchedulerException {
// 创建JobDetail
JobDetail job = JobBuilder.newJob(EmailSenderJob.class)
.withIdentity("emailSenderJob", "emailSenderGroup")
.build();
// 创建Trigger
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("emailSenderTrigger", "emailSenderGroup")
.withSchedule(CronScheduleBuilder.cronSchedule("0 0 0/1 * * ?"))
.build();
// 创建SchedulerFactory并获取Scheduler实例
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
// 注册Job和Trigger并启动定时任务
scheduler.scheduleJob(job, trigger);
scheduler.start();
}
}
注意替换代码中的your_database
、your_username
、your_password
等为你的数据库信息,以及your_smtp_host
和your_email_address
为你的SMTP服务器和邮箱地址。
在main
方法中,我们创建了一个JobDetail
对象来定义要执行的任务,然后创建了一个Trigger
对象来定义任务的触发时间。最后,我们使用SchedulerFactory
创建了一个Scheduler
实例,并通过调用scheduleJob
方法将JobDetail
和Trigger
注册到Scheduler
,然后启动定时任务。
此时,当定时任务触发时,EmailSenderJob
中的execute
方法将会被执行,即获取数据库数据并发送邮件。