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为设置定时任务周期的注解,参数常用的为两种:
- fixedRate,他表示以一种固定频率去执行,单位为毫秒,例如@Scheduled(fixedRate = 5000) 表示为每五秒执行一次。
- 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:定时任务与图片压缩处理的更多相关文章
- Spring Boot定时任务应用实践
在Spring Boot中实现定时任务功能,可以通过Spring自带的定时任务调度,也可以通过集成经典开源组件Quartz实现任务调度. 一.Spring定时器 1.cron表达式方式 使用自带的定时 ...
- spring boot.定时任务问题记录(TaskScheduler/ScheduledExecutorService异常)
一.背景 spring boot的定时任务非常简单,只需要在启动类中加上@EnableScheduling注解,然后在对应的方法上配置@Scheduled就可以了,系统会自动处理并按照Schedule ...
- (14)Spring Boot定时任务的使用【从零开始学Spring Boot】
本文介绍在 Spring Boot 中如何使用定时任务,使用非常简单,就不做过多说明了. com.kfit.base.scheduling.SchedulingConfig: package com. ...
- Spring Boot 定时任务单线程和多线程
Spring Boot 的定时任务: 第一种:把参数配置到.properties文件中: 代码: package com.accord.task; import java.text.SimpleDat ...
- Spring Boot (十一): Spring Boot 定时任务
在实际的项目开发工作中,我们经常会遇到需要做一些定时任务的工作,那么,在 Spring Boot 中是如何实现的呢? 1. 添加依赖 在 pom.xml 文件中只需引入 spring-boot-sta ...
- Spring Boot 定时任务 @Scheduled
项目开发中经常需要执行一些定时任务,比如在每天凌晨,需要从 implala 数据库拉取产品功能活跃数据,分析处理后存入到 MySQL 数据库中.类似这样的需求还有许多,那么怎么去实现定时任务呢,有以下 ...
- spring boot + vue实现图片上传及展示
转载:https://blog.csdn.net/weixin_40337982/article/details/84031778 其中一部分对我很有帮助 转载记录下 首先,html页面: <! ...
- Spring Boot定时任务运行一段时间后自动关闭的解决办法
用Spring Boot默认支持的 Scheduler来运行定时任务,有时在服务器运行一段时间后会自动关闭.原因:Schedule默认是单线程运行定时任务的,即使是多个不同的定时任务,默认也是单线程运 ...
- Spring Boot 定时任务 Quartz 使用教程
Quartz是一个完全由java编写的开源作业调度框架,他使用非常简单.本章主要讲解 Quartz在Spring Boot 中的使用. 快速集成 Quartz 介绍 Quartz 几个主要技术点 Qu ...
随机推荐
- JAVA注解基础知识
定义-摘自JAVA编程思想 注解(元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们在稍后某个时刻能非常方便的使用这些数据. 背景: 注解是JAVA5的一种新特性,是为应对C#等之类对JAV ...
- mysql performance storage engine
mysql performance storage engine 概要 mysql的运行时状态记录的存储引擎,实现了PSI(Performance Storage Interface) 通过WITH_ ...
- linux 下socket编程
原理 类unix系统中, 一切皆文件, 诸如磁盘文件, 显卡, 内核驱动, 网络协议栈等 socket就是linux中提供的用于网络通信的文件接口, 两台机器之间可以读写消息 在使用socket真正的 ...
- Head First 设计模式 —— 04. 工厂 (Factory) 模式
思考题 如何将实例化具体类的代码从应用中抽离,或者封装起来,使它们不会干扰应用的其他部分? P111 将实例化具体类的代码放入一个对象中管理,通过不同入参决定实例化具体的类 简单工厂 不是23种GOF ...
- Apache伪静态(Rewrite).htaccess文件详解
Htaccess(超文本访问)是一个简单的配置文件,它允许设计师,开发者和程序员通过它来改变Apache Web服务器的配置.这些功能包括用户重定向.URL重写(url rewrite,国内很多称为伪 ...
- NOIP初赛篇——10计算机网络
网络的定义 所谓计算机网络,就是利用通信线路和设备,把分布在不同地理位置上的多台计算机连接起来. 计算机网络是现代通信技术与计算机奇数结合的产物. 网络中计算机与计算机之间的通信依靠协议进 ...
- java反射-Method中的invoke方法的用法-以及函数式接口和lambda表达式
作者最近研究框架底层代码过程中感觉自己基础不太牢固,于是写了一点案例,以防日后忘记 接口类:Animals 1 public interface Animals { 2 3 public void e ...
- 【二分搜索树】1、二分查找法的实现 - Binary Search
简单记录 - bobo老师的玩转算法系列–玩转算法 - 二分搜索树 二叉搜索树 Binary Search Tree 查找问题 Searching Problem 查找问题是计算机中非常重要的基础问题 ...
- RandomForest 随机森林算法与模型参数的调优
公号:码农充电站pro 主页:https://codeshellme.github.io 本篇文章来介绍随机森林(RandomForest)算法. 1,集成算法之 bagging 算法 在前边的文章& ...
- SAP密码策略挺有意思
很多系统管理员可能都知道通过RZ10可以配置SAP的密码策略.例如:密码里包含的大小写字符.数字.特殊字符.密码长度.密码不能和前多少次的密码相同.不能和之前的密码有多少位相似等但是你知道吗?其实还有 ...