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

77 lines
2.2 KiB
Java

package dev.leons.ward;
import dev.leons.ward.services.SetupService;
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;
import org.springframework.context.ConfigurableApplicationContext;
import java.io.File;
/**
* Ward is a Spring Boot application class
*
* @author Rudolf Barbu
* @version 1.0.4
*/
@SpringBootApplication
public class Ward extends SpringBootServletInitializer {
/**
* Constant for determine settings file name
*/
public static final String SETUP_FILE_PATH = "setup.ini";
/**
* Constant for determine initial application port
*/
public static final int INITIAL_PORT = 4000;
/**
* Holder for determine first launch of application
*/
@Getter
private static boolean isFirstLaunch;
/**
* Holder for application context
*/
private static ConfigurableApplicationContext configurableApplicationContext;
/**
* Entry point of Ward application
*
* @param args Spring Boot application arguments
*/
public static void main(final String[] args) {
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();
}
}
/**
* Restarts application
*/
public static void restart() {
isFirstLaunch = false;
ApplicationArguments args = configurableApplicationContext.getBean(ApplicationArguments.class);
Thread thread = new Thread(() ->
{
configurableApplicationContext.close();
configurableApplicationContext = SpringApplication.run(Ward.class, args.getSourceArgs());
});
thread.setDaemon(false);
thread.start();
}
}