aboutsummaryrefslogtreecommitdiff
path: root/pdf-as-web/src/main/java/at/gv
diff options
context:
space:
mode:
authorThomas Lenz <thomas.lenz@egiz.gv.at>2026-06-19 12:20:18 +0200
committerThomas Lenz <thomas.lenz@egiz.gv.at>2026-06-19 12:20:18 +0200
commit9a61ef589978e30d663e15dd2bb93ad6282f78ee (patch)
tree8ba75a3954630aba43766a45290f1784e7af87ae /pdf-as-web/src/main/java/at/gv
parent10e5c02b52c59c7a3bddc661f826c1bba08a64e0 (diff)
downloadpdf-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/gv')
-rw-r--r--pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/PdfAsWeb.java60
-rw-r--r--pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/config/PdfAsSpringBootApplicationContextInitializer.java71
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