一、定时任务

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

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_初晨

Spring Boot:定时任务与图片压缩处理的更多相关文章

  1. Spring Boot定时任务应用实践

    在Spring Boot中实现定时任务功能,可以通过Spring自带的定时任务调度,也可以通过集成经典开源组件Quartz实现任务调度. 一.Spring定时器 1.cron表达式方式 使用自带的定时 ...

  2. spring boot.定时任务问题记录(TaskScheduler/ScheduledExecutorService异常)

    一.背景 spring boot的定时任务非常简单,只需要在启动类中加上@EnableScheduling注解,然后在对应的方法上配置@Scheduled就可以了,系统会自动处理并按照Schedule ...

  3. (14)Spring Boot定时任务的使用【从零开始学Spring Boot】

    本文介绍在 Spring Boot 中如何使用定时任务,使用非常简单,就不做过多说明了. com.kfit.base.scheduling.SchedulingConfig: package com. ...

  4. Spring Boot 定时任务单线程和多线程

    Spring Boot 的定时任务: 第一种:把参数配置到.properties文件中: 代码: package com.accord.task; import java.text.SimpleDat ...

  5. Spring Boot (十一): Spring Boot 定时任务

    在实际的项目开发工作中,我们经常会遇到需要做一些定时任务的工作,那么,在 Spring Boot 中是如何实现的呢? 1. 添加依赖 在 pom.xml 文件中只需引入 spring-boot-sta ...

  6. Spring Boot 定时任务 @Scheduled

    项目开发中经常需要执行一些定时任务,比如在每天凌晨,需要从 implala 数据库拉取产品功能活跃数据,分析处理后存入到 MySQL 数据库中.类似这样的需求还有许多,那么怎么去实现定时任务呢,有以下 ...

  7. spring boot + vue实现图片上传及展示

    转载:https://blog.csdn.net/weixin_40337982/article/details/84031778 其中一部分对我很有帮助 转载记录下 首先,html页面: <! ...

  8. Spring Boot定时任务运行一段时间后自动关闭的解决办法

    用Spring Boot默认支持的 Scheduler来运行定时任务,有时在服务器运行一段时间后会自动关闭.原因:Schedule默认是单线程运行定时任务的,即使是多个不同的定时任务,默认也是单线程运 ...

  9. Spring Boot 定时任务 Quartz 使用教程

    Quartz是一个完全由java编写的开源作业调度框架,他使用非常简单.本章主要讲解 Quartz在Spring Boot 中的使用. 快速集成 Quartz 介绍 Quartz 几个主要技术点 Qu ...

随机推荐

  1. JAVA注解基础知识

    定义-摘自JAVA编程思想 注解(元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们在稍后某个时刻能非常方便的使用这些数据. 背景: 注解是JAVA5的一种新特性,是为应对C#等之类对JAV ...

  2. mysql performance storage engine

    mysql performance storage engine 概要 mysql的运行时状态记录的存储引擎,实现了PSI(Performance Storage Interface) 通过WITH_ ...

  3. linux 下socket编程

    原理 类unix系统中, 一切皆文件, 诸如磁盘文件, 显卡, 内核驱动, 网络协议栈等 socket就是linux中提供的用于网络通信的文件接口, 两台机器之间可以读写消息 在使用socket真正的 ...

  4. Head First 设计模式 —— 04. 工厂 (Factory) 模式

    思考题 如何将实例化具体类的代码从应用中抽离,或者封装起来,使它们不会干扰应用的其他部分? P111 将实例化具体类的代码放入一个对象中管理,通过不同入参决定实例化具体的类 简单工厂 不是23种GOF ...

  5. Apache伪静态(Rewrite).htaccess文件详解

    Htaccess(超文本访问)是一个简单的配置文件,它允许设计师,开发者和程序员通过它来改变Apache Web服务器的配置.这些功能包括用户重定向.URL重写(url rewrite,国内很多称为伪 ...

  6. NOIP初赛篇——10计算机网络

    网络的定义 ​ 所谓计算机网络,就是利用通信线路和设备,把分布在不同地理位置上的多台计算机连接起来. ​ 计算机网络是现代通信技术与计算机奇数结合的产物. ​ 网络中计算机与计算机之间的通信依靠协议进 ...

  7. java反射-Method中的invoke方法的用法-以及函数式接口和lambda表达式

    作者最近研究框架底层代码过程中感觉自己基础不太牢固,于是写了一点案例,以防日后忘记 接口类:Animals 1 public interface Animals { 2 3 public void e ...

  8. 【二分搜索树】1、二分查找法的实现 - Binary Search

    简单记录 - bobo老师的玩转算法系列–玩转算法 - 二分搜索树 二叉搜索树 Binary Search Tree 查找问题 Searching Problem 查找问题是计算机中非常重要的基础问题 ...

  9. RandomForest 随机森林算法与模型参数的调优

    公号:码农充电站pro 主页:https://codeshellme.github.io 本篇文章来介绍随机森林(RandomForest)算法. 1,集成算法之 bagging 算法 在前边的文章& ...

  10. SAP密码策略挺有意思

    很多系统管理员可能都知道通过RZ10可以配置SAP的密码策略.例如:密码里包含的大小写字符.数字.特殊字符.密码长度.密码不能和前多少次的密码相同.不能和之前的密码有多少位相似等但是你知道吗?其实还有 ...