java定时删除数据库中的图片

本文详细介绍了一种在Java Spring Boot项目中定时删除数据库中过期图片路径的方法。通过配置定时任务,根据设定的时间间隔(如8天),自动查找并删除数据库中相应字段的旧图片路径,有效管理资源。文章提供了完整的代码示例,包括配置、Controller、Service和DAO层的实现,以及MyBatis的mapper设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java定时删除数据库中的一个或多个图片路径地址,也是第一次遇到写,希望写出来能给大家带来一些帮助。

1.在application.priperties中配置连接数据库的设置,我创建的是一个spring-boot框架项目,相关jar包需要注意导入,基本上我也没有导入包。

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://ip地址:3306/数据表名?useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456

time=8

2.controller层编写定时删除任务

package com.ssist.modules.CarPassinfo.web;

import com.ssist.common.utils.CommonUtils;
import com.ssist.common.web.BaseController;
import com.ssist.modules.CarPassinfo.entity.CarPassinfo;
import com.ssist.modules.CarPassinfo.service.CarPassinfoService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;


@RestController
public class CarPassinfoController extends BaseController implements ServletContextListener {

    private Logger logger = LoggerFactory.getLogger(getClass());

    @Autowired
    private CarPassinfoService carPassinfoService;

    @ResponseBody
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            public void run() {
                CarPassinfo carPassinfo = new CarPassinfo();
                // 1.从配置为文件中读取时间
                System.out.println(CommonUtils.props.getProperty("time"));
                String d0 = CommonUtils.props.getProperty("time");
                // 2.获取当前时间
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                Calendar c1 = Calendar.getInstance();
                // 3.获取当前时间前第8天时间
                c1.setTime(new Date());
                c1.add(Calendar.DATE , -Integer.valueOf(d0));
                Date d1 = c1.getTime();
                String day = format.format(d1);
                System.out.println("过去八天:"+day);

                Date pass_time = null;
                try {
                    pass_time = format.parse(day);
                    System.out.println(pass_time);
                    // 4.层级传递
                    int r1 = carPassinfoService.delete(pass_time);
                    if(r1 > 0){
                        System.out.println("删除成功");
                    }else{
                        System.out.println("删除失败");
                    }
                } catch (ParseException e) {
                    e.printStackTrace();
                }
      
            }
        },0,86400000);
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {

    }
}

3.service层

package com.ssist.modules.CarPassinfo.service;

import com.ssist.modules.CarPassinfo.dao.CarPassinfoDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;

@Service
public class CarPassinfoService {

    @Autowired
    private CarPassinfoDao carPassinfoDao;

    public int delete(Date pass_time){
        return carPassinfoDao.delete(pass_time);
    }

}

4.dao层

package com.ssist.modules.CarPassinfo.dao;

import org.springframework.context.annotation.ComponentScan;
import java.util.Date;

@ComponentScan
public interface CarPassinfoDao {

    public int delete(Date pass_time);

}

5.resources 下的mapper设置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="个人项目的dao所在位置">

    <delete id="delete" parameterType="java.util.Date">
        DELETE from res_car_passinfo where pass_time &lt;= (select DATE_ADD(SYSDATE(),interval -8 DAY))
    </delete>
    
</mapper>

6.项目的大致目录截图

 

7.数据库表中需要有一行字段为pass_time,我这里设置的datetime类型,关于删除的sql语句,我想了很长时间才写出来,希望分享出来给大家带来帮助!

还有一个定时删除ftp上8天前的文件夹,希望也能给大家带来参考

https://mp.youkuaiyun.com/postedit/84875214

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值