quartzo alcançar regulares de limpeza de lixo imagem upload de fotos produzidas

1, primeiro resolver o que, upload de fotos em dois passos

  1. Após o primeiro carregamento de apresentar ao fundo, save-sucedido, ele retorna um caminho
  2. O segundo argumento é submetido com o caminho da imagem e outras informações de fundo para salvar

Assim, após o sucesso da implementação da primeira etapa, a segunda etapa ocorre quando por algum motivo não pode enviar, em seguida, o primeiro passo para fazer upload de fotos inútil, desta vez para o lixo fotos, essas fotos não há necessidade de continuar save

2, para o caso acima, o programa de design da seguinte forma:
(Os seguintes esquemas incluem somente quando o caminho [], e outra informação adicional armazenada, o outro, como editar, apagar, por analogia com a situação real)

Criar um projeto Maven, não aos Baidu

  1. Breve quartzo e cros expressões
    Quartz é um campo aberto projeto de código de programação Job (Scheduling), quartzo pode ser usado sozinho também pode ser integrado com o uso de Spring Framework, geralmente usam o último no desenvolvimento real. Quartzo pode ser usado para desenvolver um ou mais regulares tarefas, cada vez que tempo de execução da tarefa pode ser especificado individualmente, por exemplo, executado uma vez a cada hora, uma vez por mês realizou o primeiro dia 10:00, 17:00 no último dia de cada mês tais como a implementação de uma
    expressão cros :? * * * * 0/10, Baidu será capaz de conhecer o específico de aprendizagem on-line pode
    expressão cros gerado on-line

  2. Junte-se a dependência maven

		<dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz-jobs</artifactId>
            <version>2.2.1</version>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>
  1. arquivo de configuração web.xml
	 <!-- 加载spring容器 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:applicationContext*.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
  1. Crie um arquivo de configuração de mola
    (1) applicationContext-redis.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                         http://www.springframework.org/schema/beans/spring-beans.xsd
        				http://www.springframework.org/schema/mvc
                          http://www.springframework.org/schema/mvc/spring-mvc.xsd
        				http://code.alibabatech.com/schema/dubbo
                          http://code.alibabatech.com/schema/dubbo/dubbo.xsd
        				http://www.springframework.org/schema/context
                          http://www.springframework.org/schema/context/spring-context.xsd">

    <!--Jedis连接池的相关配置-->
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxTotal">
            <value>200</value>
        </property>
        <property name="maxIdle">
            <value>50</value>
        </property>
        <property name="testOnBorrow" value="true"/>
        <property name="testOnReturn" value="true"/>
    </bean>
    <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
        <constructor-arg name="poolConfig" ref="jedisPoolConfig" />
        <constructor-arg name="host" value="192.168.1.19" />
        <constructor-arg name="port" value="6379" type="int" />
        <constructor-arg name="timeout" value="30000" type="int" />
    </bean>
</beans>

(2) applicationContext-jobs.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
							http://www.springframework.org/schema/beans/spring-beans.xsd
							http://www.springframework.org/schema/mvc
							http://www.springframework.org/schema/mvc/spring-mvc.xsd
							http://code.alibabatech.com/schema/dubbo
							http://code.alibabatech.com/schema/dubbo/dubbo.xsd
							http://www.springframework.org/schema/context
							http://www.springframework.org/schema/context/spring-context.xsd">
    <!--开启spring注解使用-->
    <context:annotation-config></context:annotation-config>
    <!--注册自定义Job-->
    <bean id="clearImgJob" class="com.zeny.jobs.ClearImgJob"></bean>

    <bean id="jobDetail"
          class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <!-- 注入目标对象 -->
        <property name="targetObject" ref="clearImgJob"/>
        <!-- 注入目标方法 -->
        <property name="targetMethod" value="clearImg"/>
    </bean>
    <!-- 注册一个触发器,指定任务触发的时间 -->
    <bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <!-- 注入JobDetail -->
        <property name="jobDetail" ref="jobDetail"/>
        <!-- 指定触发的时间,基于Cron表达式 -->
        <property name="cronExpression">
            <!--
            <value>0 0 2 * * ?</value>
            -->
            <value>0/30 * * * * ?</value>
        </property>
    </bean>
    <!-- 注册一个统一的调度工厂,通过这个调度工厂调度任务 -->
    <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <!-- 注入多个触发器 -->
        <property name="triggers">
            <list>
                <ref bean="myTrigger"/>
            </list>
        </property>
    </bean>
</beans>
  1. criando clearImgJob
package com.zeny.jobs;

import com.zeny.constant.RedisConstant;
import com.zeny.util.QiniuUtils;
import org.springframework.beans.factory.annotation.Autowired;
import redis.clients.jedis.JedisPool;
import java.util.Set;
public class ClearImgJob {

    @Autowired
    private JedisPool jedisPool;

    public void clearImg() {
        //sdiff(大集合,小集合) 计算差值
        Set<String> set = jedisPool.getResource().sdiff(RedisConstant.SETMEAL_PIC_RESOURCES, RedisConstant.SETMEAL_PIC_DB_RESOURCES);
        if (set != null) {
            for (String picName : set) {
                //删除七牛云服务器的图片
                QiniuUtils.deleteFileFromQiniu(picName);
                //从Redis集合中删除图片的名称
                jedisPool.getResource().srem(RedisConstant.SETMEAL_PIC_RESOURCES, picName);
                System.out.println("定时删除垃圾图片: " + picName);
            }
        }
    }
}

Redis categorias constantes:

public class RedisConstant {
    //图片所有图片名称
    public static final String SETMEAL_PIC_RESOURCES = "setmealPicResources";
    //图片保存在数据库中的图片名称
    public static final String SETMEAL_PIC_DB_RESOURCES = "setmealPicDbResources";
}
  1. obter
    Aqui Insert Picture Descrição
  2. Análise
    após o primeiro carregamento da foto for bem sucedida, o nome do caminho de retorno de imagem (nome da imagem não é repetida) em Redis, a constante é a classe Redis SETMEAL_PIC_RESOURCESem
    segunda sucesso salvar as informações após o nome da imagem em Redis, que Redis é uma classe constante SETMEAL_PIC_DB_RESOURCES, o cálculo da diferença, isto é, imagens de lixo, regularmente excluir
Publicado 26 artigos originais · ganhou elogios 0 · Visualizações 556

Acho que você gosta

Origin blog.csdn.net/qq_36609994/article/details/104876937
Recomendado
Clasificación