package com.its.rota.server; import com.its.rota.server.common.SpringUtils; import com.its.rota.server.process.dbms.DbmsDataProcess; import com.its.rota.server.xnet.server.process.work.DataPacketProcess; import com.its.rota.server.repository.ApplicationRepository; import com.its.rota.server.service.UnitSystService; import com.its.rota.server.xnet.server.ItsAsnCommServerService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.boot.Banner; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.context.ApplicationPidFileWriter; import org.springframework.context.ApplicationListener; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.event.ContextClosedEvent; import org.springframework.transaction.annotation.EnableTransactionManagement; import java.text.SimpleDateFormat; import java.util.Date; @Slf4j @SpringBootApplication @EnableTransactionManagement @ComponentScan(basePackages = {"com.its.app.common", "com.its.rota.server.config", "com.its.rota.server"}) public class ItsRotaServerApplication implements CommandLineRunner, ApplicationListener, InitializingBean, DisposableBean { private static final String APPLICATION_NAME = "its-rota-server"; public static void main(String[] args) { SpringApplication application = new SpringApplicationBuilder() .sources(ItsRotaServerApplication.class) .listeners(new ApplicationPidFileWriter("./conf/" + APPLICATION_NAME + ".pid")) .build(); application.setBannerMode(Banner.Mode.OFF); application.run(args); } @Override public void run(String... args) throws Exception { SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); log.info(""); log.info(""); log.info("************************************************************************************"); log.info("** **"); log.info("** UTIC ITS ROTA System **"); log.info("** UTIC ITS ROTA Communication Server Program. **"); log.info("** **"); log.info("** [ver.1.0] **"); log.info("** startup: {}", sdfDate.format(new Date())); log.info("** HOME: {}", System.getProperty("user.home")); log.info("************************************************************************************"); DbmsDataProcess dbmsDataProcess = SpringUtils.getBean(DbmsDataProcess.class); dbmsDataProcess.run(); ApplicationRepository applicationRepository = SpringUtils.getBean(ApplicationRepository.class); applicationRepository.loadDb(); DataPacketProcess dataPacketProcess = SpringUtils.getBean(DataPacketProcess.class); dataPacketProcess.run(); ItsAsnCommServerService itsAsnCommServerService = SpringUtils.getBean(ItsAsnCommServerService.class); itsAsnCommServerService.run(); } public void terminateApplication() { ApplicationRepository applicationRepository = SpringUtils.getBean(ApplicationRepository.class); applicationRepository.terminate(); UnitSystService unitSystService = SpringUtils.getBean(UnitSystService.class); unitSystService.updateUnitSystStts(false); ItsAsnCommServerService itsAsnCommServerService = SpringUtils.getBean(ItsAsnCommServerService.class); itsAsnCommServerService.shutdown(); } @Override public void onApplicationEvent(ContextClosedEvent contextClosedEvent) { SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); log.error("Application Terminated: {}, {}", sdfDate.format(new Date()), contextClosedEvent); terminateApplication(); } @Override public void destroy() throws Exception { log.error("Application destroy"); } @Override public void afterPropertiesSet() throws Exception { log.info("Application afterPropertiesSet"); } }