java定时查询数据库_Java定时器内调用数据库查询信息---踩到的坑

今天使用Java定时任务的时候遇到了一个坑,就是在使用定时器的时候,直接在定时器内操作了数据,结果报空指针异常,查了贴子才发现,原来是定时器内不允许操作数据,这里贴出了定时器内操作数据的实例,方便使用的小伙伴们早些弃坑

定时器内不允许直接调用services层的方法来进行数据操作,所以我们可以直接将实现类的方法写到这个地方,实现直接调用方法的情况

package com.zxjs.config;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;

import com.zxjs.dao.ComplaintsDao;

import com.zxjs.entity.Complaints;

import com.zxjs.service.ComplaintsService;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.InitializingBean;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.Configuration;

import org.springframework.context.annotation.ImportResource;

import javax.annotation.Resource;

import java.util.List;

import java.util.Timer;

import java.util.TimerTask;

/**

* @author nan

* @date 2020/7/24 15:07

*/

@Configuration

public class ConfigClass implements InitializingBean {

private final static Logger logger = LoggerFactory.getLogger(ConfigClass.class);

@Autowired

private static ComplaintsService complaintsService;

@Resource

private ComplaintsDao complaintsDao;

/**

* 项目开启的时候执行定时任务,用来检测投诉保存是否到达五天

* @throws Exception

*/

@Override

public void afterPropertiesSet() throws Exception {

/**

* 延迟60秒启动,每一小时执行一次

*/

try{

new Timer("testTimer").schedule(new TimerTask() {

@Override

public void run() {

QueryWrapper wrapper = new QueryWrapper<>();

//查询的是信息类型是保存的类型

wrapper.eq("complaintsActionType",0);

List list = complaintsDao.selectList(wrapper);

for (Complaints complaints : list) {

//判断时长是否到达五天,到达的话获取这个数据的id改变这条数据为不显示状态

//先判断毫秒值是不是空,是空的话直接进行下一步

if(complaints.getComplaintsActionsMils() != null && !complaints.getComplaintsActionsMils().equals(null)&& complaints.getComplaintsActionsMils() != null){

if((System.currentTimeMillis() / 1000) - Long.parseLong(complaints.getComplaintsActionsMils()) > 432000){

//0:显示;1不显示,设置为不显示

//只有当显示为0的时候才会进行更新,这样可以减少数据库执行时间

if(complaints.getComplaintsShow() != "1" && !complaints.getComplaintsShow().equals("1")){

complaints.setComplaintsShow("1");

complaintsDao.updateById(complaints);

}

}

}

}}

}, 60000,3600000);

}catch (Exception e){

logger.error(e.getMessage());

}

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值