• Spring Boot:定时任务与图片压缩处理




    一、定时任务

    项目中可以采用定时任务进行一些操作,如:文件迁移、备份、数据定期计算更新等;

    1、创建定时任务

    package com.example.demo.core.tasks;
    
    import org.springframework.scheduling.annotation.EnableScheduling;
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Component;
    
    import java.util.Date;
    
    @Component
    /**
     * 开启定时任务的注解
     */
    @EnableScheduling
    public class tesk {
    
        @Scheduled(fixedRate = 5000)
        public void job1(){
            System.out.println("定时任务1" + new Date());
        }
    
        @Scheduled(cron = "0/5 * * * * ?")
        public void job2(){
            System.out.println("定时任务2" + new Date());
        }
    }
    package com.example.demo.core.tasks;
    
    import org.springframework.scheduling.annotation.EnableScheduling;
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Component;
    
    import java.util.Date;
    
    @Component
    /**
     * 开启定时任务的注解
     */
    @EnableScheduling
    public class tesk {
    
        @Scheduled(fixedRate = 5000)
        public void job1(){
            System.out.println("定时任务1" + new Date());
        }
    
        @Scheduled(cron = "0/5 * * * * ?")
        public void job2(){
            System.out.println("定时任务2" + new Date());
        }
    }
    

    2、@Scheduled

    @Scheduled为设置定时任务周期的注解,参数常用的为两种:

    1. fixedRate,他表示以一种固定频率去执行,单位为毫秒,例如@Scheduled(fixedRate = 5000) 表示为每五秒执行一次。
    2. cron,他可以表达某种特定频率,例如每天晚上三点执行,每个星期三中午十二点等

    常用的cron:

    每隔5秒执行一次:/5 * * * ?
    每隔1分钟执行一次:0 /1 * * ?
    每天23点执行一次:0 0 23 * * ?
    每天凌晨1点执行一次:0 0 1 * * ?
    每月1号凌晨1点执行一次:0 0 1 1 * ?
    每月最后一天23点执行一次:0 0 23 L * ?
    ……….


    二、图片压缩处理

    1、添加thumbnailator依赖

    <dependency>
       <groupId>net.coobird</groupId>
       <artifactId>thumbnailator</artifactId>
       <version>0.4.8</version>
    </dependency>
    

    2、创建图片处理类

    package com.example.demo.core.utils;
    
    import net.coobird.thumbnailator.Thumbnails;
    import net.coobird.thumbnailator.geometry.Positions;
    import net.coobird.thumbnailator.name.Rename;
    import net.coobird.thumbnailator.resizers.configurations.ScalingMode;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import javax.imageio.ImageIO;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    
    /**
     * 图片处理工具类,主要压缩,添加logo等
     * @author 张瑶
     */
    public class ImageUtils {
    
        public static Logger logger = LoggerFactory.getLogger(ImageUtils.class);
    
        public static void main(String[] args) {
            //使用给定的图片生成指定大小的图片
            //generateFixedSizeImage();
    
            //对原图加水印,然后顺时针旋转90度,最后压缩为80%保存
            //generateRotationWatermark();
    
            //转换图片格式,将流写入到输出流
            //generateOutputstream();
    
            //按比例缩放图片
            //generateScale();
    
            //生成缩略图到指定的目录
            //generateThumbnail2Directory();
    
            //将指定目录下所有图片生成缩略图
            //generateDirectoryThumbnail();
        }
    
        /**
         * 使用给定的图片生成指定大小的图片
         */
        public static void generateFixedSizeImage(){
            try {
                Thumbnails.of("C:\Users\Administrator\Desktop\微信图片_20180129100019.jpg").size(80,80).toFile("C:\Users\Administrator\Desktop\newmeinv.jpg");
            } catch (IOException e) {
                logger.error(e.getMessage());
            }
        }
    
        /**
         * 对原图加水印,然后顺时针旋转90度,最后压缩为80%保存
         */
        public static void generateRotationWatermark(){
            try {
                Thumbnails.of("C:\Users\Administrator\Desktop\微信图片_20180129100019.jpg").
                        // 缩放大小
                        size(1600,1600).
                        // 顺时针旋转90度
                        rotate(90).
                        //水印位于右下角,半透明
                        watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("C:\Users\Administrator\Desktop\微信图片_20180329153521.png")),1f).
                        // 图片压缩80%质量
                        outputQuality(0.8).
                        toFile("C:\Users\Administrator\Desktop\2016010208_new.jpg");
            } catch (IOException e) {
                logger.error(e.getMessage());
            }
        }
    
        /**
         * 转换图片格式,将流写入到输出流
         */
        public static void generateOutputstream(){
            try(OutputStream outputStream = new FileOutputStream("data/2016010208_outputstream.png")) {
                Thumbnails.of("data/2016010208.jpg").
                        size(500,500).
                        // 转换格式
                        outputFormat("png").
                        // 写入输出流
                        toOutputStream(outputStream);
            } catch (IOException e) {
                logger.error(e.getMessage());
            }
        }
    
        /**
         * 按比例缩放图片
         */
        public static void generateScale(){
            try {
                Thumbnails.of("data/2016010208.jpg").
                        scalingMode(
                        ScalingMode.BICUBIC).
                        // 图片缩放80%, 不能和size()一起使用
                        scale(0.8).
                        // 图片质量压缩80%
                        outputQuality(0.8).
                        toFile("data/2016010208_scale.jpg");
            } catch (IOException e) {
                logger.error(e.getMessage());
            }
        }
    
        /**
         * 生成缩略图到指定的目录
         */
        public static void generateThumbnail2Directory(){
            try {
                Thumbnails.of("data/2016010208.jpg","data/meinv.jpg").
                        // 图片缩放80%, 不能和size()一起使用
                        scale(0.8).
                        //指定的目录一定要存在,否则报错
                        toFiles(new File("data/new/"), Rename.NO_CHANGE);
            } catch (IOException e) {
                logger.error(e.getMessage());
            }
        }
    
        /**
         * 将指定目录下所有图片生成缩略图
         */
        public static void generateDirectoryThumbnail(){
            try {
                Thumbnails.of(
                        new File("data/new").listFiles()).
                        scale(0.8).
                        toFiles(new File("data/new/"), Rename.SUFFIX_HYPHEN_THUMBNAIL);
            } catch (IOException e) {
                logger.error(e.getMessage());
            }
        }
    }

    3、基本使用方法

    Thumbnails.of("原图文件的路径") 
            //生成图片大小
            .size(100,100)
            //缩放比例   0-1之间
            .scale(1f) 
            //图片质量   0-1之间   1最好
            .outputQuality(0.5f)
            //顺时针旋转度数
            .rotate(90)
            //水印  第一个参数:水印位置   第二个:水印所在路径  第三个:水印透明度
            .watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("水印所在路径")),1f).
            .toFile("压缩后文件的路径");




    原文地址:Mr_初晨

  • 相关阅读:
    还是行列转换
    SQL实现交叉表的方法
    silverlight绘制场景的教程,讲解清晰,谁都能看懂
    简单的MEF例子
    在arcgis上根据区域显示小区
    一个不错的silverlight颜色选取框控件
    mac下制作iphone铃声
    xCode中工程相关的一些处理:一个工程包含多个Target的用途和使用方法【转】
    git 分支管理
    [转]判断ios中是否安装了某些软件
  • 原文地址:https://www.cnblogs.com/aixing/p/13327521.html
Copyright © 2020-2023  润新知