0%

记项目中一些细节性的问题

目录

  1. @Jsonformat注解
  2. @Scheduled注解定时任务不执行
  3. Java对象null判定位置

@Jsonformat注解

使用@Jsonformat注解格式化输出日期时出现了一个小问题,以此记录:

1
2
3
//具体使用
@Jsonformat(patten"YYYY/MM/DD HH:MM:SS", timezone="GMT+8")
private Date date;

乍一看没问题,但是输出的日期不对,大概是这样

1
2
3
4
//按理应该输出的
2000/03/01 00:00:00
//实际输出的(类似这样的,就不复现了)
2000/03/167 02:10:12

在网上找了很久都没找到类似这样的错误,多是时区出问题的;

具体解决:

之前进了一个比较活跃的java电报群,就在里边问了问,有位大佬说看到过是格式控制的大小写不能改动,我去试了,确实,正确的格式应该是yyyy/MM/dd HH:mm:ss或者yyyy-MM-dd HH:mm:ss,又有一位大佬说这个jdk接口文档里有,jdk11的文档里没提到大小写相关的内容,但有对格式的要求,不知JDK1.8的文档里有无,然后又找了找Jackson 的文档,很难找,找到的也很简陋,也没找到。

@Scheduled注解定时计划任务不执行

项目需要一些简单的定时任务,就用了@Scheduled注解,然而怎么改,就是不执行,网上的各种配置都试过了,不论是新建配置类还是仅仅只用注解,可就是不执行定时任务,直到我把定时任务类所在的包加入了扫描。

定时任务类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com.gwg.bwtgame.scheduletask;

import com.gwg.bwtgame.dao.DailyTaskMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
@EnableScheduling
@EnableAsync
public class ScheduleTask {
@Autowired
private DailyTaskMapper dailyTaskMapper;

// 每天5点刷新每日任务
@Async
@Scheduled(cron = "0 0 5 * * ?")
public void dailyTask(){
dailyTaskMapper.updateDailyTask();
}
}

启动类

1
2
3
4
5
6
7
@ComponentScan({"com.gwg.bwtgame.scheduletask"})
@EnableScheduling
public class BwtgameApplication {
public static void main(String[] args) {
SpringApplication.run(BwtgameApplication.class, args);
}
}

Java对象null判定位置

这个就非常基础了,但是没注意还是出错了,所以记录一下。关于对象值为null的判定一定要放在对对象进行操作前:如下

1
2
3
4
5
6
7
8
9
10
11
public boolean isFirstARads(int bearId) {
dailyTask=dailyTaskMapper.selectByPrimaryKey(bearId);
bear=bearMapper.selectByPrimaryKey(bearId);
if (dailyTask.getWatchArAds()==0&&dailyTask!=null&&bear!=null){//报错这里有问题 空对象
//具体操作
return true;
}
else {
return false;
}
}

一开始没反应过来:我也判定对象值不为null了啊,细看代码,出大问题了:

按Java代码运行逻辑,同一行代码都是自左向右先后运行的,而我却将对象null值的判定放在了对象操作之后,所报错,所以争取的顺序是dailyTask!=null&&bear!=null&&dailyTask.getWatchArAds()==0bear!=null&&dailyTask!=null&&dailyTask.getWatchArAds()==0

总结

看上边出现的问题,还是一些比较基础性、细节性的的问题,正所谓基础不牢,地动山摇;当然也不是没有其他问题,只是其他问题都百度解决了,只剩下这些基础性的、百度上没有的,仅此记录一下。