Ward/src/main/java/dev/leons/ward/Ward.java

77 lines
2.2 KiB
Java
Raw Normal View History

2022-02-18 04:05:30 +08:00
package dev.leons.ward;
import dev.leons.ward.services.SetupService;
2020-06-28 22:04:59 +08:00
import lombok.Getter;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
2020-06-28 22:04:59 +08:00
import org.springframework.context.ConfigurableApplicationContext;
import java.io.File;
2020-05-17 21:33:19 +08:00
/**
* Ward is a Spring Boot application class
*
* @author Rudolf Barbu
* @version 1.0.4
2020-05-17 21:33:19 +08:00
*/
@SpringBootApplication
public class Ward extends SpringBootServletInitializer {
2020-07-02 01:54:20 +08:00
/**
* Constant for determine settings file name
*/
public static final String SETUP_FILE_PATH = "setup.ini";
2020-07-02 01:54:20 +08:00
2020-07-02 03:35:28 +08:00
/**
* Constant for determine initial application port
*/
public static final int INITIAL_PORT = 4000;
2020-06-28 22:04:59 +08:00
/**
* Holder for determine first launch of application
2020-06-28 22:04:59 +08:00
*/
@Getter
private static boolean isFirstLaunch;
/**
* Holder for application context
*/
private static ConfigurableApplicationContext configurableApplicationContext;
2020-05-17 21:33:19 +08:00
/**
* Entry point of Ward application
*
* @param args Spring Boot application arguments
*/
public static void main(final String[] args) {
2020-06-28 22:04:59 +08:00
isFirstLaunch = true;
configurableApplicationContext = SpringApplication.run(Ward.class, args);
File setupFile = new File(Ward.SETUP_FILE_PATH);
if (System.getenv("WARD_NAME") != null || (System.getenv("WARD_THEME") != null) || (System.getenv("WARD_PORT") != null) || (System.getenv("WARD_FOG") != null)) {
SetupService.envSetup();
} else if (setupFile.exists()) {
restart();
}
2020-06-28 22:04:59 +08:00
}
/**
* Restarts application
*/
public static void restart() {
2020-06-28 22:04:59 +08:00
isFirstLaunch = false;
ApplicationArguments args = configurableApplicationContext.getBean(ApplicationArguments.class);
Thread thread = new Thread(() ->
{
configurableApplicationContext.close();
configurableApplicationContext = SpringApplication.run(Ward.class, args.getSourceArgs());
});
thread.setDaemon(false);
2020-06-28 22:04:59 +08:00
thread.start();
}
}