NONRTRIC - Implement DMaaP mediator producer service in Java 22/7122/3
authorPatrikBuhr <patrik.buhr@est.tech>
Thu, 25 Nov 2021 13:17:41 +0000 (14:17 +0100)
committerPatrikBuhr <patrik.buhr@est.tech>
Fri, 26 Nov 2021 12:01:17 +0000 (13:01 +0100)
Re-reading of configuration file by restart of everything.

Signed-off-by: PatrikBuhr <patrik.buhr@est.tech>
Issue-ID: NONRTRIC-597
Change-Id: Ic93bd70e991e88f102b1a92a3fab24aef828bf91

dmaap-adaptor-java/src/main/java/org/oran/dmaapadapter/Application.java

index aa10972..2058202 100644 (file)
 
 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();
+    }
 }