diff options
| author | Thomas Lenz <thomas.lenz@egiz.gv.at> | 2026-06-19 12:20:18 +0200 |
|---|---|---|
| committer | Thomas Lenz <thomas.lenz@egiz.gv.at> | 2026-06-19 12:20:18 +0200 |
| commit | 9a61ef589978e30d663e15dd2bb93ad6282f78ee (patch) | |
| tree | 8ba75a3954630aba43766a45290f1784e7af87ae /pdf-as-web/src/main/java/at | |
| parent | 10e5c02b52c59c7a3bddc661f826c1bba08a64e0 (diff) | |
| download | pdf-as-4-9a61ef589978e30d663e15dd2bb93ad6282f78ee.tar.gz pdf-as-4-9a61ef589978e30d663e15dd2bb93ad6282f78ee.tar.bz2 pdf-as-4-9a61ef589978e30d663e15dd2bb93ad6282f78ee.zip | |
chore(core): rework PDF-AS-Web configuration integration with Spring Boot context
Diffstat (limited to 'pdf-as-web/src/main/java/at')
| -rw-r--r-- | pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/PdfAsWeb.java | 60 | ||||
| -rw-r--r-- | pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/config/PdfAsSpringBootApplicationContextInitializer.java | 71 |
2 files changed, 90 insertions, 41 deletions
diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/PdfAsWeb.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/PdfAsWeb.java index 75042176..85d94a7f 100644 --- a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/PdfAsWeb.java +++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/PdfAsWeb.java @@ -1,57 +1,35 @@ package at.gv.egiz.pdfas.web; -import lombok.val; -import org.jetbrains.annotations.NotNull; -import org.springframework.boot.EnvironmentPostProcessor; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; -import org.springframework.core.env.ConfigurableEnvironment; -import org.springframework.core.env.MapPropertySource; -import java.util.HashMap; +import at.gv.egiz.pdfas.web.config.PdfAsSpringBootApplicationContextInitializer; +import lombok.extern.slf4j.Slf4j; +@Slf4j @SpringBootApplication public class PdfAsWeb extends SpringBootServletInitializer { - // registered in resources/META-INF/spring.factories - public static class DefaultProperties implements EnvironmentPostProcessor { - @Override - public void postProcessEnvironment( - @NotNull ConfigurableEnvironment environment, @NotNull SpringApplication application) - { - /* - == DEFAULT PROPERTIES == - these are properties with the lowest precedence - so anything else (pdf-as-web.properties, system params, etc) can override them - */ - val defaultProperties = new HashMap<String, Object>(); - // set the default application name - defaultProperties.put("spring.application.name", "PDF-AS Web"); - // disable spring boot admin client by default - defaultProperties.put("spring.boot.admin.client.enabled", "false"); - // compatibility layer: map the old logback.configurationFile to the new logging.config - val legacyLogProperty = System.getProperty("logback.configurationFile"); - if (legacyLogProperty != null) { - defaultProperties.put("logging.config", legacyLogProperty); - } - - /* - == END DEFAULT PROPERTIES == - */ - - - environment.getPropertySources().addLast(new MapPropertySource("pdf-as-web-defaults", defaultProperties)); - } - } - @Override - protected @NotNull SpringApplicationBuilder configure(@NotNull SpringApplicationBuilder application) { - return application.sources(PdfAsWeb.class); + protected SpringApplicationBuilder createSpringApplicationBuilder() { + SpringApplicationBuilder builder = new SpringApplicationBuilder(); + builder.initializers(new PdfAsSpringBootApplicationContextInitializer()); + builder.sources(PdfAsWeb.class); + return builder; + } - + public static void main(String[] args) { - SpringApplication.run(PdfAsWeb.class, args); + log.info("=============== Initializing Spring-Boot context! ==============="); + final SpringApplication springApp = new SpringApplication(PdfAsWeb.class); + springApp.addInitializers(new PdfAsSpringBootApplicationContextInitializer()); + + log.debug("Run SpringBoot initialization process ... "); + springApp.run(args); + + log.info("Initialization of PDF-AS-Web finished."); + } } diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/config/PdfAsSpringBootApplicationContextInitializer.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/config/PdfAsSpringBootApplicationContextInitializer.java new file mode 100644 index 00000000..184030d2 --- /dev/null +++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/config/PdfAsSpringBootApplicationContextInitializer.java @@ -0,0 +1,71 @@ +package at.gv.egiz.pdfas.web.config; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Properties; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.context.ApplicationContextInitializer; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.core.env.PropertiesPropertySource; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class PdfAsSpringBootApplicationContextInitializer + implements ApplicationContextInitializer<ConfigurableApplicationContext> { + + private static final String SYSTEMD_PROP_NAME = "pdf-as-web.conf"; + private static final String FILE_PREFIX = "file:"; + + @Override + public void initialize(ConfigurableApplicationContext applicationContext) { + final String rawConfigPath = System.getProperty(SYSTEMD_PROP_NAME); + + if (StringUtils.isBlank(rawConfigPath)) { + log.info("No SystemD property '{}' found. No external configuration loaded.", SYSTEMD_PROP_NAME); + return; + } + + log.debug("Found configuration source from SystemD property '{}'.", SYSTEMD_PROP_NAME); + + final String configPath = stripFilePrefix(rawConfigPath); + injectConfiguration(Path.of(configPath), applicationContext); + } + + private static String stripFilePrefix(String configPath) { + return configPath.startsWith(FILE_PREFIX) + ? configPath.substring(FILE_PREFIX.length()) + : configPath; + } + + private void injectConfiguration( + Path configPath, + ConfigurableApplicationContext applicationContext) { + + if (!Files.isRegularFile(configPath)) { + log.error("Configuration from SystemD property '{}' does not exist or is not a file: {}", + SYSTEMD_PROP_NAME, configPath); + return; + } + + try (InputStream inputStream = Files.newInputStream(configPath)) { + final Properties properties = new Properties(); + properties.load(inputStream); + + applicationContext + .getEnvironment() + .getPropertySources() + .addFirst(new PropertiesPropertySource(SYSTEMD_PROP_NAME, properties)); + + log.info("Loaded configuration source from SystemD property '{}': {}", + SYSTEMD_PROP_NAME, configPath); + + } catch (IOException e) { + log.error("Configuration from SystemD property '{}' at location '{}' cannot be loaded.", + SYSTEMD_PROP_NAME, configPath, e); + } + } +}
\ No newline at end of file |
