定时器中实现数据库表数据移动的功能,Exception in thread "Timer-0" isExist java.lang.NullPointerException定时器中线程报错。
2016-09-02 15:23
656 查看
package com.shawnway.trade.marketdata.constants; import java.sql.SQLException; import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import com.shawnway.trade.marketdata.services.ChartService; @Component public class TimerConfig { @Autowired private ChartService chartService; @PersistenceContext private EntityManager em; public TimerConfig(ChartService ct){//关键点解决 null指针错误, chartService=ct; } // Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period) //每天的24:00:00执行迁移操作 public void init() { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 15); // 控制时 calendar.set(Calendar.MINUTE, 3); // 控制分 calendar.set(Calendar.SECOND, 0); // 控制秒 Date time = calendar.getTime(); Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { public void run() { System.out.println("处理器开始运行"); try { moveStableMes(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }, time, 1000 * 60 * 60 * 24);// 这里设定将延时每天固定执行 } @RequestMapping(value ="/move/moveStableMes", method = RequestMethod.GET) @ResponseBody public void moveStableMes() throws SQLException{ //首先判定存储表是否存在,如果存在则转移数据 //如果不存在,先创建该存储数据表,在转移数据 //情况临时存储表。(临时表是用来保存当天的数据。) Calendar c = Calendar.getInstance(); int year=c.get(c.YEAR); int month=c.get(c.MONTH)+1; int today = c.get(c.DAY_OF_MONTH); String tbname=""; if(month<=9) tbname="market_data_candlechart_"+Integer.toString(year)+"0"+Integer.toString(month);//数据库的名字 else tbname="market_data_candlechart_"+Integer.toString(year)+Integer.toString(month);//数据库的名字 String temperTB="market_data_candlechart";//存储临时信息的表名 System.out.println("执行到了isExist"); boolean flag=chartService.isExist(tbname);//判定对应的数据库是否存在 System.out.println("isExist结束"); if(flag){//如果已经存在了,就可以直接把临时表中的数据插入到对应的表中 chartService.moveMesToOldTB(tbname,temperTB);//将临时表中的数据移动到tbname名称的表中。 }else{ chartService.createTemperTB(tbname);//如果不存在,需要先创建一个对应名称的表 chartService.moveMesToOldTB(tbname,temperTB);//将临时表中的数据移动到tbname名称的表中。 } //转移完数据后,清洗临时表的数据 chartService.deletTemperTB(temperTB); } }
package com.shawnway.trade.marketdata; import java.io.FileNotFoundException; import org.apache.catalina.Server; import org.apache.catalina.Service; import org.apache.catalina.connector.Connector; import org.apache.catalina.valves.RemoteIpValve; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer; import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; import org.springframework.boot.context.embedded.tomcat.TomcatConnectorCustomizer; import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.PropertySource; import org.springframework.core.env.Environment; import com.shawnway.trade.marketdata.constants.SystemConfig; import com.shawnway.trade.marketdata.constants.TimerConfig; import com.shawnway.trade.marketdata.core.collect.MarketDataCollectHandler; import com.shawnway.trade.marketdata.core.ctp.CTPApiHandler; import com.shawnway.trade.marketdata.core.ctp.CTPGatewayProxy; import com.shawnway.trade.marketdata.core.ctp.CTPMarketDataHandler; import com.shawnway.trade.marketdata.core.ctp.CTPZeroMQHandler; import com.shawnway.trade.marketdata.core.es.EsMarketDataHandler; import com.shawnway.trade.marketdata.core.es.EsunnyApiHandler; import com.shawnway.trade.marketdata.core.es.EsunnyGatewayProxy; import com.shawnway.trade.marketdata.core.sp.SharppointApiHandler; import com.shawnway.trade.marketdata.core.sp.SharppointGatewayProxy; import com.shawnway.trade.marketdata.core.sp.SpMarketDataHandler; import com.shawnway.trade.marketdata.services.ChartService; import com.shawnway.trade.marketdata.services.MapContainer; @PropertySource({ "file:${config.dir}/config/web.properties" }) @SpringBootApplication public class ApplicationLauncher { @Autowired private Environment env; @Autowired private ChartService chartService; @Bean(name = { "timerConfig" }, initMethod = "init") public TimerConfig timerConfig() { System.out.println("timerConfig已经开始运行了~"); return new TimerConfig(chartService);//
chartService传入进去,解决空指针的错误
} public static void main(String[] args) throws Exception { System.setProperty("config.dir", System.getProperty("user.dir")); final String dir = System.getProperty("config.dir"); System.setProperty("logging.config", dir + "/config/logging.xml"); SpringApplication.run(ApplicationLauncher.class, args); } }
相关文章推荐
- 在java中String类为什么要设计成final?
- Java 基本数据类型最大值极限和最小值极限
- JAVA小知识点记录
- springboot security CSRF问题
- adb操作指南
- 【SSH】之 Struts
- 深入谈谈java的枚举(enum)类型
- Java多线程中yield方法的理解
- FusionCharts在Java中的应用
- spring boot(四):thymeleaf使用详解
- 【腾讯Bugly干货分享】基于RxJava的一种MVP实现
- java实现压缩指定文件夹(文件夹包含子文件夹或文件)为zip格式压缩包
- springboot学习笔记(三):基于MySql数据库的JPA操作
- JAVA中【enum】的使用
- 【腾讯Bugly干货分享】基于RxJava的一种MVP实现
- Java 容器类
- Java Classloader机制解析(转)
- 深入理解java异常处理机制
- Java多线程中join方法的理解
- MAC Java 开发环境配置