使用QuartZ定时发送邮件

QuartZ简介

Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。Quartz是一个完全由java编写的开源作业调度框架。

核心API

执行流程

cron表达式

定时表达式共7部分组成,第7部分是可选项,定义时每部分使用空格分隔。
参考官方文档,也可以借助在线生成工具自动生成。
这里写图片描述

定时发送邮件

pom.xml中引入依赖

    <!-- 引入Spring-support -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- 引入QuartZ ,也可以引入最新的2.2.3版本-->
    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
        <version>2.2.1</version>
    </dependency>
    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz-jobs</artifactId>
        <version>2.2.1</version>
    </dependency>
    <!-- JavaMail -->
    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4</version>
    </dependency>

自定义工具类

        /**
         * 定时发送邮箱工具类
         */
        public class MailJob {

            //注入工单service
            @Autowired
            private WorkBillService workBillService;

            private String username;
            private String password;
            private String smtpServer;

            public String getUsername() {
                return username;
            }
            public void setUsername(String username) {
                this.username = username;
            }
            public String getPassword() {
                return password;
            }
            public void setPassword(String password) {
                this.password = password;
            }
            public String getSmtpServer() {
                return smtpServer;
            }
            public void setSmtpServer(String smtpServer) {
                this.smtpServer = smtpServer;
            }

            /**
             * 执行发送邮件任务
             */
            public void execute(){

                try {
                    //查询工单类型为新单的所有工单
                    List<WorkBill> workBillList = workBillService.findNewWorkBills();
                    if (null != workBillList && workBillList.size() > 0) {
                        final Properties mailProps = new Properties();
                        mailProps.put("mail.smtp.host", this.getSmtpServer());
                        mailProps.put("mail.smtp.auth", "true");
                        mailProps.put("mail.username", this.getUsername());
                        mailProps.put("mail.password", this.getPassword());

                        //构建授权信息,用于进行SMTP进行身份验证
                        Authenticator authenticator = new Authenticator() {
                            protected PasswordAuthentication getPasswordAuthentication() {
                                //用户名、密码
                                String userName = mailProps.getProperty("mail.username");
                                String password = mailProps.getProperty("mail.password");

                                return new PasswordAuthentication(userName, password);
                            }
                        };

                        //使用环境属性和授权信息,创建邮件会话
                        Session mailSession = Session.getInstance(mailProps, authenticator);

                        for (WorkBill workBill : workBillList) {
                            //创建邮件消息
                            MimeMessage message = new MimeMessage(mailSession);
                            //设置发件人
                            InternetAddress from = new InternetAddress(mailProps.getProperty("mail.username"));
                            message.setFrom(from);

                            //设置收件人
                            InternetAddress to = new InternetAddress(workBill.getStaff().getEmail());
                            message.setRecipient(RecipientType.TO, to);

                            //设置邮件标题
                            message.setSubject("系统邮件,新单通知");

                            //设置邮件的内容体
                            message.setContent(workBill.toString(),"text/html;charset=UTF-8");
                            //发送邮件
                            Transport.send(message);
                        }
                    }
                } catch (AddressException e) {
                    e.printStackTrace();
                } catch (MessagingException e) {
                    e.printStackTrace();
                }
            }
        }

配置任务类

    <!-- 定义一个任务类 -->
    <bean id="mailJobBean" class="cn.aric.bos.quartz.MailJob" >
        <!-- 注入发邮件的任务类的参数 -->
        <property name="username" value="ashuai@163.com" />
        <property name="password" value="123" />
        <property name="smtpServer" value="smtp.163.com" />
    </bean>

在spring容器中配置任务描述类

    <!-- 配置任务描述类,targetObject:任务目标类,targetMethod:任务目标方法 -->
    <bean id="mailJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" >
        <property name="targetObject" ref="mailJobBean" />
        <property name="targetMethod" value="execute" />
    </bean>

在spring容器中配置触发器

    <!-- 配置触发器 -->
    <bean id="mailTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="mailJobDetail" />
        <!-- 表达式,设置每10秒执行1次 -->
        <!-- <property name="cronExpression" value="0/10 * * * * ? *" /> -->
        <!-- 表达式,每天中午12点和下午16点触发一次 -->
        <property name="cronExpression" value="0 0 12,16 * * ? *" />
    </bean>

在spring容器中配置调度容器工厂

    <!-- QuartZ调度容器工厂 -->
    <bean id="startQuartZ" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="mailTrigger" />
            </list>
        </property>
    </bean>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值