У меня проблема с файлом application.properties, который не является частью моего файла war.Я хочу создать приложение, в котором я смогу изменять значения application.properties во время выполнения.Мой файл свойств будет bean-компонентом, который мы будем использовать в сервисе.
Классы PoC ниже:
@Configuration
@Slf4j
public class ServiceReaderConfiguration {
@Bean
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
ServiceOutputProperties serviceProperties() {
log.info("create serviceProperties");
return new ServiceOutputProperties();
}
@Bean
ServiceOutput serviceOutput() {
log.info("create serviceOutput");
return new ServiceOutput(serviceProperties());
}
}
ServiceProperty
@Configuration
@ConfigurationProperties(prefix = "prefix")
@Setter
@Getter
public class ServiceOutputProperties {
private int param;
}
ServiceOutputProperties
@Slf4j
public class ServiceOutput {
private ServiceOutputProperties serviceOutputProperties;
public ServiceOutput(ServiceOutputProperties serviceOutputProperties) {
log.info("creating serviceOutputProperties");
this.serviceOutputProperties = serviceOutputProperties;
}
public int printValueFromFile() {
int param = serviceOutputProperties.getParam();
return param;
}
}
Контроллер
@RestController
@RequestMapping("/api")
public class ControllerConfiguration {
@Autowired
private ServiceOutput serviceOutput;
@GetMapping("/print")
public ResponseEntity<Integer> postValueFromPropertiesFile() {
return ResponseEntity.ok(serviceOutput.printValueFromFile());
}
}
application.properties
prefix.param=2
XML-файл помещен в файл Catalina
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Environment name="spring.config.location"
value="file:/home/marcin/tomcat/application.properties"
type="java.lang.String"/>
</Context>
Я создаю пакет war без файла свойств приложения, который я хочу изменить во время выполнения.Пакет развертывается на Tomcat.Все, чего я хочу добиться, - это изменить файл свойств и отобразить измененное значение из файла с помощью контроллера во время выполнения без необходимости перезагружать приложение.
Заранее спасибо за любую помощь.