Files
votianng/backend/src/main/java/de/stadtbote/votian/VotianApplication.java
T

47 lines
2.2 KiB
Java

package de.stadtbote.votian;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import de.stadtbote.votian.database.DatabaseDiagnostics;
import java.util.Arrays;
import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class VotianApplication {
public static void main(String[] args) {
if (Arrays.asList(args).contains("--database-check")) {
System.exit(databaseCheck());
}
SpringApplication.run(VotianApplication.class, args);
}
private static int databaseCheck() {
SpringApplication application = new SpringApplication(VotianApplication.class);
application.setWebApplicationType(WebApplicationType.NONE);
application.setBannerMode(Banner.Mode.OFF);
application.setLogStartupInfo(false);
DatabaseDiagnostics.Result result;
// Keep stdout machine-readable and prevent JDBC startup errors exposing connection details.
try (ConfigurableApplicationContext context = application.run(
"--spring.main.web-application-type=none", "--spring.main.banner-mode=off",
"--logging.level.root=OFF", "--logging.level.com.zaxxer.hikari=OFF",
"--logging.level.org.mariadb.jdbc=OFF")) {
result = context.getBean(DatabaseDiagnostics.class).check();
} catch (RuntimeException error) {
result = DatabaseDiagnostics.failure("CONFIGURATION_ERROR",
"Backend-Konfiguration oder Datenbankverbindung prüfen.", null);
}
try {
System.out.println(new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(result.details()));
} catch (JsonProcessingException error) {
System.out.println("{\"connected\":false,\"reason\":\"DIAGNOSTIC_ERROR\",\"message\":\"Diagnose konnte nicht ausgegeben werden.\",\"writes\":0}");
return 1;
}
return result.exitCode();
}
}