一、定时任务

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

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. mysql事务_事务隔离级别详解

    使用事务语法 1. 开启事务start transaction,可以简写为 begin 2. 然后记录之后需要执行的一组sql 3. 提交commit 4. 如果所有的sql都执行成功,则提交,将sq ...

  2. 一行 CSS 代码的魅力

    之前在知乎看到一个很有意思的讨论 一行代码可以做什么? 那么,一行 CSS 代码又能不能搞点事情呢? CSS Battle 首先,这让我想到了,年初的时候沉迷的一个网站 CSS Battle .这个网 ...

  3. SpringMVC的@Validated校验注解使用方法

    validate会对参数进行校验,校验标准为validate后的类中的标准.本例中对User进行校验,User类中设置了校验标准. 在后台开发过程中,对参数的校验成为开发环境不可缺少的一个环节.比如参 ...

  4. 【SpringMVC】SpringMVC 入门

    SpringMVC 入门 文章源码 SpringMVC 基本概念 在 JavaEE 开发中,几乎全都是基于 B/S 架构的开发.在 B/S 架构中,系统标准的三层架构包括:表现层.业务层.持久层. 表 ...

  5. 有关Servlet的面试题

    CGI(Common Gateway Interface),通用网管接口 通用网管接口,简称CGI,是一种根据请求信息动态产生回应内容的技术.通过CGI,web服务器可以根据请求的不同,启动不同的外部 ...

  6. mysql的导入

    方法1 load data [local] infile 'filename' into table tablename[option] ields terminated by 'string'(字段 ...

  7. 【Oracle】重命名表空间

    将表空间重新命名 SQL>   alter tablespace 原名 rename to 新名; 在查看下是否命名成功 SQL> select tablespace_name from ...

  8. 目录遍历 - Pikachu

    概述: 在web功能设计中,很多时候我们会要将需要访问的文件定义成变量,从而让前端的功能便的更加灵活. 当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再执行其对应 ...

  9. List使用Stream流进行集合Collection的各种运算汇总:对BigDecimal求和,某个字段的和、最大值、最小值、平均值,字段去重,过滤等

    写Java接口的朋友都知道,Java 8的更新,经常会用到过滤 list<Object> 里的数据,本文就对List使用Stream流进行集合Collection的各种运算做一个汇总! 优 ...

  10. Lakehouse: 统一数据仓库和高级分析的新一代开放平台

    1. 摘要 数仓架构在未来一段时间内会逐渐消亡,会被一种新的Lakehouse架构取代,该架构主要有如下特性 基于开放的数据格式,如Parquet: 机器学习和数据科学将被作为头等公民支持: 提供卓越 ...