springboot中使⽤Schedule注解时@Value以及@Autowired报空指针异常
⽂章⽬录
@Value报空指针
在使⽤@value注解获取application.properties⽂件的内容的时候, 由于使⽤了@Schedule去创建定时任务, 因为他的加载⽐较早, 就会导致@value报空指针异常, 可以⾃⼰写⼀个获取配置⽂件内容的⽅法, 就可以规避这种错误, 代码如下:
其中: Property(“user.dir”) + File.separator + “conf” + File.separator + “application.properties”) 获取到的是配置⽂件的路径, Property(“user.dir”)获取到的是项⽬路径, 打成jar包之后代表的就是与该jar包平级的⽬录conf下的application.properties⽂件
public class GetPropertiesValue {
private static Properties properties =null;
// 初始化
static{
properties =new Properties();
try{
// resource⽬录下的配置⽂件
// ClassLoader().getResourceAsStream(application.properties)
InputStream inputStream =new FileInputStream(new Property("user.dir")+ File.separator +"conf"+ File.separator +"application.pr operties"));
properties.load(inputStream);
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
}
@Autowired空指针
通过实现ApplicationContextAware来实现注⼊的操作⽤以代替Autowtred
public class ApplicationContextUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
public static ApplicationContext getApplicationContext(){
return applicationContext;
}
@Override
public void setApplicationContext(ApplicationContext applicationContext)throws BeansException {
ApplicationContextUtil.applicationContext = applicationContext;
}
public static Object getBean(String beanName){
Bean(beanName);
}
}
⾃定义定时器就不会有注解空指针的问题了
import Logger;
import LoggerFactory;
import Lazy;
import Trigger;
import TriggerContext;
import EnableScheduling;
import SchedulingConfigurer; import ScheduledTaskRegistrar;
import CronTrigger;
import Date;
@EnableScheduling
@Lazy(value =false)
public class TimeTask implements SchedulingConfigurer {
private static Logger log = Logger(TimeTask.class);
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar){        scheduledTaskRegistrar.addTriggerTask(new Runnable(){
@Override
public void run(){
System.out.println("定时器逻辑放这⾥");
}
},new Trigger(){
@Override
public Date nextExecutionTime(TriggerContext triggerContext){
// 每五秒执⾏⼀次
schedule用法及搭配String cron ="0/5 * * * * ?";
CronTrigger cronTrigger =new CronTrigger(cron);
Date nextExec = ExecutionTime(triggerContext);
return nextExec;
}
});
}
}
参考⽂章

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。