From bc5c16b1b1aa2f90e8b9f85dd7558c6be1edeea3 Mon Sep 17 00:00:00 2001 From: PatrikBuhr Date: Thu, 25 Nov 2021 14:17:41 +0100 Subject: [PATCH] NONRTRIC - Implement DMaaP mediator producer service in Java Re-reading of configuration file by restart of everything. Signed-off-by: PatrikBuhr Issue-ID: NONRTRIC-597 Change-Id: Ic93bd70e991e88f102b1a92a3fab24aef828bf91 --- .../java/org/oran/dmaapadapter/Application.java | 47 +++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/dmaap-adaptor-java/src/main/java/org/oran/dmaapadapter/Application.java b/dmaap-adaptor-java/src/main/java/org/oran/dmaapadapter/Application.java index aa10972d..2058202f 100644 --- a/dmaap-adaptor-java/src/main/java/org/oran/dmaapadapter/Application.java +++ b/dmaap-adaptor-java/src/main/java/org/oran/dmaapadapter/Application.java @@ -20,14 +20,59 @@ package org.oran.dmaapadapter; +import java.io.File; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.ApplicationArguments; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; @SpringBootApplication +@EnableConfigurationProperties +@EnableScheduling public class Application { + private static final Logger logger = LoggerFactory.getLogger(Application.class); + + @Value("${app.configuration-filepath}") + private String localConfigurationFilePath; + + private long configFileLastModification = 0; + private static ConfigurableApplicationContext applicationContext; + public static void main(String[] args) { - SpringApplication.run(Application.class); + applicationContext = SpringApplication.run(Application.class); } + @Scheduled(fixedRate = 10 * 1000) + public void checkConfigFileChanges() { + long timestamp = new File(localConfigurationFilePath).lastModified(); + if (configFileLastModification != 0 && timestamp != configFileLastModification) { + logger.info("Restarting due to change in the file {}", localConfigurationFilePath); + restartApplication(); + } + configFileLastModification = timestamp; + } + + private static void restartApplication() { + if (applicationContext == null) { + logger.info("Cannot restart in unittest"); + return; + } + ApplicationArguments args = applicationContext.getBean(ApplicationArguments.class); + + Thread thread = new Thread(() -> { + applicationContext.close(); + applicationContext = SpringApplication.run(Application.class, args.getSourceArgs()); + }); + + thread.setDaemon(false); + thread.start(); + } } -- 2.16.6