在做项目的时候,发现项目里面拿取的数据是有日期要求的(比如 今天12点 ,拿取昨天一天的数据 或者今天0-12点的数据) 如果拿取的数据比较少,可以手动去数据库里面更改。如果前端有分页或者曲线图、饼状图、树状图等图像展示的时候,这是数据少的话 就不好呈现出来。想要呈现好看的话,那么数据就要多,数据多的话,手动去改日期就显得麻烦,这时就可以设置一个定时器,明天定时更新数据。保证数据每天都是及时变化的,方便我们使用。
具体实现方法如下
一、创建一个表的实体类,添加getter、setter方法
我的表中就(stcd,TM,DRP,DYP)四个字段,所以我就写了四个,具体根据自己的表字段修改即可。
二、创建一个一个mapper、以及对应的mapper.xml文件
<mapper namespace="com.sctsys.sluice.test.TestCornMapper">
<insert id="insert" >
insert into t_sluice_pptn_r_test (stcd,TM,DRP,DYP) values
<foreach collection="userList" item="user" index="index" separator=",">
(#{user.stcd},#{user.TM},#{user.DRP},#{user.DYP})
</foreach>
</insert>
<delete id="deleteAll">
delete from t_sluice_pptn_r_test
</delete>
</mapper>
三、创建一个类,里面写入你要实现的方法,在方法上面加入@Scheduled注解。写入触发的时间,以及出发时间内,每隔多少时间出发一次。我的是每天15:27就触发一次。
具体的可以查看
@Slf4j
@Component
public class Test {
@Autowired
private TestCornMapper mapper;
@Scheduled(cron = "0 42 15 ? * * ")
public void testTimer() {
log.info("---------定时任务开始执行---------" + new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()));
Long deleteNum = mapper.deleteAll();
log.info("删除了" + deleteNum + "条数据");
int count = 100;
int total = 111;
List<TestVCornByRain> userList = new ArrayList<>();
for (int i = 0; i < total; i++) {
TestVCornByRain rain = new TestVCornByRain();
rain.setStcd("606KC" + count);
rain.setTM(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()));
rain.setDRP(String.valueOf(Math.random()));
rain.setDYP(String.valueOf((Math.random()+1)/10));
userList.add(rain);
count++;
}
Long insertNum = mapper.insert(userList);
log.info("添加了" + insertNum + "条数据");
log.info("---------定时任务执行成功---------" + new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()));
}
}
我的是先删除了表中的数据,然后再添加数据。具体里面的实现方法可以因人而异。
四、在springbot启动类中加入@EnableScheduling注解
这个注解一定要加上,不然的话定时器到指定时间了,也不会触发。
五、结果
设置好时间后,到时间定时器便会启动执行,可以看到我的已经触发,并且先删除了数据,后添加了数据,定时任务执行成功,这与我们预期的结果一样。
查看数据库,进行验证,可以看到数据已经添加进来啦!!!