文章中使用到的发送邮件代码就不写了,之前发布过--/yan95520/article/details/89366606
1.在pom.xml中导入jar包(maven工程)
<!-- 计划任务支持 -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
<exclusions>
<exclusion>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Excel支持 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.13</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.13</version>
</dependency>
2.编写工作类,用于完成计划任务的行为事件,如发文件邮件清数据等(包含制作Excel表格)
@Component("myjob")
public classMyJob {
@Autowired
privateEmailUtilemailUtil;
public voidclearMemberTickct() {
System.out.println("清空程序运行");
//调用清空数据的方法
System.out.println("清空"+ 3 +"条数据");
}
public voidsendMemberReport() {
System.out.println("文本邮件程序运行");
//调用查询最近登录信息
emailUtil.sendEmail("huangwenhao.567@","每日会员报表","会员最近登录信息");
}
public voidsendExcel()throwsIOException {
System.out.println("表格邮件程序运行");
List<Member> list = service.findAll();
HSSFWorkbook wk =newHSSFWorkbook();//生成excel文件
HSSFSheet sheet = wk.createSheet("会员");//创建表
sheet.createRow(2).createCell(3).setCellValue("会员信息报表");//创建行2同时创建列3并给列3赋值
HSSFRow titleRow = sheet.createRow(3);//创建行3
titleRow.createCell(2).setCellValue("会员ID");//创建列2同时赋值
titleRow.createCell(3).setCellValue("会员名称");//创建列3同时赋值
titleRow.createCell(4).setCellValue("最近登录时间");//创建列4同时赋值
intn = 4;
for(Member m : list) {
HSSFRow dataRow = sheet.createRow(n);
dataRow.createCell(2).setCellValue(m.getId());
dataRow.createCell(3).setCellValue(m.getNickName());
dataRow.createCell(4).setCellValue(m.getUuidCreateTime() ==null?"": m.getUuidCreateTime().toString());
n++;
}
OutputStream os =newFileOutputStream("D:/report.xls");// 创建输出流 report.xls文件
wk.write(os);//将刚刚生成的excel文件的数据写入report.xls文件
os.close();//清空缓冲区
//发送Excel表格到指定会员邮箱中
emailUtil.sendEmail("huangwenhao.567@","每日会员报表","请查看每日报表",newString[]{"D:/report.xls"});
}
}
3.使用配置文件控制计划任务(applicationContext-task.xml)
<?xml version="1.0"encoding="UTF-8"?>
<beansxmlns:xsi="/2001/XMLSchema-instance"
xmlns="/schema/beans"
xmlns:aop="/schema/aop"
xmlns:context="/schema/context"
xmlns:tx="/schema/tx"
xmlns:cache="/schema/cache"
xmlns:p="/schema/p"
xsi:schemaLocation="/schema/beans
/schema/beans/spring-beans-4.0.xsd
/schema/aop
/schema/aop/spring-aop-4.0.xsd
/schema/context
/schema/context/spring-context-4.0.xsd
/schema/tx
/schema/tx/spring-tx-4.0.xsd
/schema/cache
/schema/cache/spring-cache-4.0.xsd">
<!--完成动作的类 可用注解-->
<!--<bean id="myjob" class="com.it.service.quartz.MyJob"/>-->
<!-- 控制行为,清除数据 -->
<beanid="clearuuid"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<propertyname="targetObject">
<refbean="myjob"/><!--完成动作的类-->
</property>
<propertyname="targetMethod"value="clearMemberTickct"/><!--类中的方法名-->
<propertyname="concurrent"value="false"/><!-- 作业不并发调度 -->
</bean>
<!-- org.springframework.scheduling.quartz.CronTriggerBean -->
<!-- 控制时间,每天0点 -->
<beanid="clear_ticket"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<propertyname="jobDetail"ref="clearuuid"/><!-- 上面的bean类 -->
<propertyname="cronExpression"value="0 11 11 * * ? *"/><!-- 从第几秒开始每隔几秒执行 -->
</bean>
<!-- 控制行为,发送文本邮件 -->
<beanid="send_email"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<propertyname="targetObject">
<refbean="myjob"/>
</property>
<propertyname="targetMethod"value="sendMemberReport"/>
<propertyname="concurrent"value="false"/><!-- 作业不并发调度 -->
</bean>
<!-- org.springframework.scheduling.quartz.CronTriggerBean -->
<!-- 控制时间,每天0点 -->
<beanid="sendMemberReport"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<propertyname="jobDetail"ref="send_email"/><!-- 类 -->
<propertyname="cronExpression"value="20/10 * * * * ?"/><!-- 从第几秒开始每隔几秒执行 -->
</bean>
<!-- 控制行为,发送Excel表格邮件 -->
<beanid="send_email2"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<propertyname="targetObject">
<refbean="myjob"/>
</property>
<propertyname="targetMethod"value="sendExcel"/>
<propertyname="concurrent"value="false"/><!-- 作业不并发调度 -->
</bean>
<!-- org.springframework.scheduling.quartz.CronTriggerBean -->
<!-- 控制时间,每天0点 -->
<beanid="sendMemeberExcel"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<propertyname="jobDetail"ref="send_email2"/><!-- 类 -->
<propertyname="cronExpression"value="20/10 * * * * ?"/><!-- 从第几秒开始每隔几秒执行 --><!--10/10 * * ?* MON-FRI-->
</bean>
<!-- 控制开关 -->
<beanclass="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<propertyname="triggers">
<list>
<!--<ref bean="cronTrigger" />-->
<!--<ref bean="clear_ticket" />-->
<!--<ref bean="sendMemberReport" />-->
<refbean="sendMemeberExcel"/>
</list>
</property>
</bean>
</beans>
Java计划任务(任务调度) 定时器 定时安排任务 如定时发送Excel表格到用户邮箱(quartz+poi+javax.mail)