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 ...
随机推荐
- C#设计模式——建造者模式(Builder Pattern)
1.建造者模式简介 1.1>.定义 建造者模式(Builder)将复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. 1.2>.使用频率 中低 1.3>.原型模式应用 ...
- 轻量级 Kubernetes K3s - Github热点
轻量级 Kubernetes k3s star: 15.5k K3s是完全符合生产要求的Kubernetes发行版, 安装简单,可用于生产,整个二进制文件小于100M,作为单一文件打包部署,优势在于, ...
- VMware虚拟机安装黑群晖DSM6.2 (转)
安装DSM6.2.和安装5.1的过程大致相同,只是在虚拟机的配置时有所不同. 需要用到的工具 Roadkil's Disk Image – 写镜像工具:http://www.roadkil.net/p ...
- linux下如何看系统日志及Out Of Memery
1.一个Out Of Memery(OOM)导致的崩溃. linux系统经常会由于资源的问题导致自己的程序莫名被杀掉,可以从linux的系统日志中找到答案: vi /var/log/message - ...
- 用隧道协议实现不同dubbo集群间的透明通信
用隧道协议实现不同dubbo集群间的透明通信 前言 笔者最近完成了一个非常有意思的隧道机制(已在产线运行),可以让注册到不同zookeeper之间的dubbo集群之间能够正常进行通信.如下图所示: 例 ...
- linux find命令用法大全
本文档格式如下,命令说明在命令的上一行,尝试使用 Ctrl+f 组合键快速在页面内搜索. 命令说明 命令 参数起始目录:查找文件的起始目录.实例# 当前目录搜索所有文件,文件内容 包含 &qu ...
- JAVA开发手册-Markdown
前言 前 言 <Java 开发手册>是技术团队的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断完善.现代软件行业的高速发展对开发者的综合素质要求越来越高,因为不仅是编程知识点 ...
- shell 脚本安装Tomcat和java
脚本安装Tomcat和java#!/bin/bash##SCRIPT:install_jdk-8u181-linux-x64_apache-tomcat-8.0.53#AUTHOR:Shinyinfo ...
- 剑指 Offer 16. 数值的整数次方
实现函数double Power(double base, int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题. 来源:力扣(LeetCode) 链接 ...
- 【Linux】将ens33修改为eth0 网卡方法
1.编辑 grub 配置文件 vim /etc/sysconfig/grub # 其实是/etc/default/grub的软连接 # 为GRUB_CMDLINE_LINUX变量增加2个参数,添加的内 ...