X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=dmaap-adaptor-java%2Fsrc%2Fmain%2Fjava%2Forg%2Foran%2Fdmaapadapter%2FApplication.java;h=2058202f1b35bb0614f24d00bb4c13a8a78de7a1;hb=bc5c16b1b1aa2f90e8b9f85dd7558c6be1edeea3;hp=aa10972d9a3bca50576657f4d519b47512eaa39f;hpb=2389606af9e77879c76e2f87822b5b7d68920d19;p=nonrtric.git 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(); + } }