Spring Boot 定时任务和邮件任务

Spring Boot 定时任务和邮件任务

Spring Boot真是一个贴心的快速开发框架,你还在为设置Linux定时任务烦恼吗,你还在为寻找合适的邮件插件烦恼吗,对不起,我没有这些烦恼,因为我使用spring boot

定时任务

首先要在主程序类加上启用定时任务的注解@EnableScheduling

@EnableScheduling   
@SpringBootApplication
public class Demo20190808Application {

    public static void main(String[] args) {
        SpringApplication.run(Demo20190808Application.class, args);
    }
}

然后写一个定时方法,定时方法加上@Scheduled注解,程序执行中就会在对应的时间点执行,不需要在代码中调用。这里实现了自定义的接口,也可以不实现直接写类。

@Service
public class ScheduleServiceImpl implements ScheduleService {

    // 秒 分 时 日 月 周几
    // ?代表日和周几冲突不使用哪个
    // -代表范围
    // ,代表例举
    // /代表从什么时候开始,每隔多久
    // *代表任意
    // L代表最后
    // W代表工作日
    // #代表第几个周几
    //【0 0/5 14,18 * * ?】    每天14点、18点整每隔5分钟执行一次
    //【0 15 10 ? *1-6】       每月的周一到周六10:15:00执行一次
    //【0 0 2 ? * 6L】         每月的最后一个周六凌晨2点执行一次
    //【0 0 2 LW * ?】         每月的最后一个工作日的凌晨2点执行一次
    //【0 0 2-4 ? * 1#1】      每月的第一个周一的凌晨2点到4点间每个整点执行一次
    @Override
    @Scheduled(cron = "0 * * * * MON-SAT")
    public void schedulePrint() {

        System.out.println("currentMills:"+System.currentTimeMillis());
    }
}

邮件任务

首先要在邮箱设置中开启SMTP服务,生成授权码,后面有用到授权码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dLUl2loa-1569554590201)(1569553647620.png)]

然后在依赖文件引入依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-mail</artifactId>
</dependency>

在yml配置文件配置下面属性

#======================= 邮箱配置(授权) =======================
spring:
  mail:
    username: test@qq.com #授权用户
    password: testcode #授权码,需开启SMTP服务
    host: smtp.qq.com #授权服务器
    properties:
      mail:
        smtp:
          ssl:
            enable: true #开启SSL

以下是邮件接口和邮件接口的实现

/*
* MailService
*/
public interface MailService {

    /**
     * 发送简单邮件
     * @param subject
     * @param text
     * @param receiver
     * @param provider
     */
    void sendSimpleMail(String subject,String text,String receiver,String provider);

    /**
     * 发送带附件的邮件
     * @param subject
     * @param text
     * @param receiver
     * @param attachments
     * @param provider
     */
    void sendAttachmentMail(String subject, String text, String receiver, Map<String, String> attachments,String provider);
}


/*
* MailServiceImpl
*/
@Service
public class MailServiceImpl implements MailService {

    @Autowired
    private JavaMailSenderImpl mailSender;

    @Override
    public void sendSimpleMail(String subject, String text, String receiver,String provider) {

        SimpleMailMessage message = new SimpleMailMessage();
        message.setSubject(subject);
        message.setText(text);
        message.setTo(receiver);
        message.setFrom(provider);
        mailSender.send(message);
    }

    @Override
    public void sendAttachmentMail(String subject, String text, String receiver, Map<String, String> attachments,String provider) {

        MimeMessage mimeMessage = mailSender.createMimeMessage();

        try{

            //multipart 是否上传附件
            MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);

            mimeMessageHelper.setSubject(subject);
            mimeMessageHelper.setText(text);
            mimeMessageHelper.setTo(receiver);
            mimeMessageHelper.setFrom(provider);

            //上传附件
            attachments.forEach((k,v) -> {
                try{
                    mimeMessageHelper.addAttachment(k,new File(v));
                }catch (MessagingException e){
                    e.printStackTrace();
                }
            });
        }catch (Exception e){
            e.printStackTrace();
        }

        mailSender.send(mimeMessage);
    }
}

以下是测试代码

@RunWith(SpringRunner.class)
@SpringBootTest
public class MailServiceImplTest {

    @Autowired
    private MailService mailService;

    @Test
    public void sendSimpleMail() {

        mailService.sendSimpleMail("测试邮件主题1","这是测试邮件内容1","test@qq.com","test@qq.com");
    }

    @Test
    public void sendAttachmentMail() {

        Map<String,String> fileMap = new HashMap<>();
        fileMap.put("Global.asax","D:\\ZJ\\Global.asax");
        fileMap.put("ZYWCF.svc","D:\\ZJ\\ZYWCF.svc");
        mailService.sendAttachmentMail("测试邮件主题2","这是测试邮件内容2","test@qq.com",fileMap,"test@qq.com");
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 Spring定时任务功能以及 Java 的文件监控功能来实现监控多个文件夹下是否有新增文件的功能。 具体实现步骤如下: 1. 首先,使用 Spring定时任务功能,创建一个定时任务定时执行文件监控任务。 2. 在任务中,使用 Java 的文件监控功能,监控多个文件夹下是否有新增文件。可以使用 Java 的 NIO 去实现文件监控。通过遍历多个文件夹,获取文件夹下的所有文件,并对这些文件进行监控。 3. 当有新增文件时,可以采取不同的处理方式,例如将新增文件的信息记录到日志中、发送通知邮件等。 下面是一个简单的示例代码: ```java @Component public class FileMonitorTask { @Scheduled(fixedRate = 1000) // 每隔1秒执行一次任务 public void monitor() throws IOException { String[] folders = {"/path/to/folder1", "/path/to/folder2"}; // 监控多个文件夹 WatchService watchService = FileSystems.getDefault().newWatchService(); for (String folder : folders) { Path path = Paths.get(folder); path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE); } while (true) { WatchKey watchKey = null; try { watchKey = watchService.take(); } catch (InterruptedException e) { e.printStackTrace(); } for (WatchEvent<?> event : watchKey.pollEvents()) { if (event.kind() == StandardWatchEventKinds.ENTRY_CREATE) { Path filePath = ((WatchEvent<Path>) event).context(); System.out.println("New file detected: " + filePath.toString()); } } watchKey.reset(); } } } ``` 在上述代码中,我们创建了一个 `FileMonitorTask` 定时任务,每隔1秒执行一次。该任务中使用 Java 的文件监控功能监控了两个文件夹,当有新增文件时,在控制台输出新增文件的信息。你可以根据实际需求进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值