StartCommand.java 4.8 KB
package com.bsth;


import com.bsth.security.SecurityMetadataSourceService;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;


/**
 * 随应用启动运行
 * @author PanZhao
 *
 */
@Component
public class StartCommand implements CommandLineRunner{

	Logger logger = LoggerFactory.getLogger(this.getClass());
	
	@Autowired
	SecurityMetadataSourceService invocationSecurityMetadataSourceService;
	
	//public static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(8);
	
	/*@Autowired
	GpsRealDataRefreshThread gpsRefreshThread;
	@Autowired
	GetSchedulePlanThread getSchedulePlanThread;
	@Autowired
	CommonRefreshThread commonRefreshThread;
	@Autowired
	DirectivePersistenceThread directivePersistenceThread;
	@Autowired
	SchedulePersistenceThread SchedulePersistenceThread;
	@Autowired
	ArrivalThread gpsArrivalStationThread;
	@Autowired
	FirstScheduleIssuedThread firstScheduleIssuedThread;
	
	@Autowired
	DirectiveService directiveService;
	@Autowired
	DirectiveBuffer directiveBuffer;
	@Autowired
	CarConfigInfoRepository carConfigInfoRepository;
	
	@Autowired
	GpsOfflineMonitorThread gpsOfflineMonitorThread;*/
	
	/*final static Long HOUR_TIME = 1000 * 60 * 60L;
	
	final static int HOUR_SECOND = 60 * 60;*/
	
	@Override
	public void run(String... arg0){
		
		try {
			//启动时加载所有资源
			invocationSecurityMetadataSourceService.loadResourceDefine();
			
			/**
			 * 车辆,设备,公司等常用的映射数据,每两小时刷新一次
			 *//*
			commonRefreshThread.start();
			scheduler.scheduleWithFixedDelay(commonRefreshThread, HOUR_SECOND * 2 , HOUR_SECOND * 2, TimeUnit.SECONDS);
			//等映射数据加载完......睡一会吧
			Thread.sleep(4000);
			
			*//**
			 * GPS实时数据更新 线程
			 * 每8秒和网关HTTP接口同步一次
			 *//*
			scheduler.scheduleWithFixedDelay(gpsRefreshThread, 0, 8, TimeUnit.SECONDS);
			
			*//**
			 * GPS 监控设备掉线行为
			 * 每分钟检测一次
			 *//*
			scheduler.scheduleWithFixedDelay(gpsOfflineMonitorThread, 60, 60, TimeUnit.SECONDS);
			
			
			*//**
			 * 每天 凌晨 2 点 抓取当天实际排班
			 *//*
			//启动时先run一次
			getSchedulePlanThread.start();
			scheduler.scheduleAtFixedRate(getSchedulePlanThread
					, ((DateUtils.getTimesnight2() + HOUR_TIME * 2) - System.currentTimeMillis()) / 1000
					, 60 * 60 * 24, TimeUnit.SECONDS);
			
			*//**
			 * 调度指令两分钟入库一次
			 * 指令会缓存在内存,直到收到所有响应再入库
			 *//*
			//从数据库恢复初始数据
			directiveBuffer.recovery();
			scheduler.scheduleWithFixedDelay(directivePersistenceThread, 20, 60 * 2, TimeUnit.SECONDS);
			
			*//**
			 * 每分钟将有变更的班次入库(不包括子任务)
			 * 单纯为了提高 线调操作 的响应速度
			 *//*
			scheduler.scheduleWithFixedDelay(SchedulePersistenceThread, 60 * 1, 60 * 1, TimeUnit.SECONDS);
			
			*//**
			 * 每15秒从数据库抓取到离站信息和班次匹配
			 * (网关生成的到离站数据也是延迟批量入库,所以缩短该线程执行周期并不会提高 “实际到离站” 的实时性)
			 *//*
			scheduler.scheduleWithFixedDelay(gpsArrivalStationThread, 35, 15, TimeUnit.SECONDS);
			
			*//**
			 * 首个调度指令下发(2分钟运行一次)
			 * 每辆车的第一个调度指令由该线程下发
			 * 后续班次由 “实际终点到达” 事件触发指令下发
			 *//*
			scheduler.scheduleWithFixedDelay(firstScheduleIssuedThread, 60 , 60 * 2, TimeUnit.SECONDS);
			*/
			
/*			new Timer().schedule(new TimerTask() {
				
				@Override
				public void run() {
					List<CarConfigInfo> ccis = carConfigInfoRepository.findAll();
					Cars car;
					Line line;
					String lineCode;
					System.out.println("ccis size: " + ccis.size());
					for(CarConfigInfo cci : ccis){
						car = cci.getCl();
						line = cci.getXl();
						lineCode = line.getLineCode();
						
						String data = directiveService.createDeviceRefreshData(CommonMapped.vehicDeviceBiMap.inverse().get(car.getInsideCode())
								, Integer.parseInt(lineCode));
						System.out.println(data);
						int code = HttpUtils.postJson(data);
						System.out.println("车辆:" + car.getInsideCode() + "刷新线路:" + line.getLineCode());
						code = directiveService.lineChange(car.getInsideCode(), Integer.parseInt(lineCode));
						//directiveService.send60Phrase(car.getInsideCode(), "");
						System.out.println("返回值:" + code);
					}
					
				}
			}, 1000 * 10);*/
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}