侧边栏壁纸
  • 累计撰写 72 篇文章
  • 累计创建 31 个标签
  • 累计收到 5 条评论

目 录CONTENT

文章目录

springboot异步操作之Async-Peak-Gao

PeakGao
2024-11-27 / 0 评论 / 0 点赞 / 2 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
部分素材可能会来自网络,若不小心影响到您的利益,请联系我们删除。
前言

最近看了下springboot的异步操作,学到了使用async注解来实现异步操作的功能,这不就立马把项目中的发送邮件通知就都换成了异步的操作,而不是去新建一个线程来发送通知,虽然async注解也是通过新线程的方式来实现,但就很美观。下面就来看看async的简单示例

1. 启动类添加注解@EnableAsync
@SpringBootApplication
@MapperScan(basePackages = {"com.fyg.mapper"})
@ServletComponentScan
@EnableAsync
public class BlogApplication {
    public static void main(String[] args) throws UnknownHostException {
        ConfigurableApplicationContext application = SpringApplication.run(BlogApplication.class, args)
        Environment env = application.getEnvironment()
        String ip = InetAddress.getLocalHost().getHostAddress()
        String port = env.getProperty("server.port")
        String path = env.getProperty("server.servlet.context-path")
        System.out.println("n----------------------------------------------------------nt" +
                "blog is running! Access URLs:nt" +
                "Local: tthttp://localhost:" + port + path + "/nt" +
                "External: thttp://" + ip + ":" + port + path + "/nt" +
                "Knife4j-ui: thttp://" + ip + ":" + port + path + "/doc.htmlnt" +
                "----------------------------------------------------------")
    }

}
2. 在使用的方法上添加注解@Async
    @Async("threadPoolTaskExecutor")
    public void emailNoticeMe(String subject,String content) {
        // 构建一个邮件对象
        SimpleMailMessage message = new SimpleMailMessage()
        // 设置邮件主题
        message.setSubject(subject)
        // 设置邮件发送者
        message.setFrom(Objects.requireNonNull(javaMailSender.getUsername()))
        // 设置邮件接收者,可以有多个接收者,中间用逗号隔开
        message.setTo("[email protected]")
        // 设置邮件发送日期
        message.setSentDate(new Date())
        // 设置邮件的正文
        message.setText(content)
        // 发送邮件
        javaMailSender.send(message)
    }

可以指定线程池的名称,以上代码我是已经指定了,不指定名称就会使用默认的线程池

3.调用
    @Transactional(rollbackFor = Exception.class)
    public ResponseResult applyFriendLink(FriendLink friendLink) {

        Assert.isTrue(StringUtils.isNotBlank(friendLink.getUrl()),"输入正确的网址!")
        friendLink.setStatus(APPLY.getCode())

        Assert.isTrue(!friendLink.getUrl().contains("fyg.com") &&
                !friendLink.getUrl().contains("baidu.com"),"不合法的网址!")

        //如果已经申请过友链 再次接入则会进行下架处理 需重新审核
        FriendLink entity = baseMapper.selectOne(new QueryWrapper<FriendLink>()
                .eq(SqlConf.URL,friendLink.getUrl()))
        if (entity != null) {
            friendLink.setId(entity.getId())
            baseMapper.updateById(friendLink)
        }else {
            baseMapper.insert(friendLink)
        }
        //异步操作邮箱发送
        emailService.emailNoticeMe("友链接入通知","网站有新的友链接入啦("+friendLink.getUrl()+"),快去审核吧!!!")
        return ResponseResult.success()
    }

需要注意的是调用方法和被调用方法不能在同类中,否则就会失效

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区