В моем файле application.properties
определено несколько свойств.Они загружаются в различные файлы конфигурации в системе с помощью аннотаций @Configuration
, @PropertySource
и @ConfigurationProperties
.
Кроме того, у меня есть отдельная от этой системы библиотека, в которой нетзависимость от весны (и в идеале так и останется).В какой-то момент выполнения системы она инициализирует экземпляр класса из этой библиотеки с помощью отражения и конструктора без аргументов .Однако в этой инициализации я хочу получить свойство Spring и назначить его локальному полю - однако, как я упоминал ранее, этот библиотечный класс не настроен Spring и фактически находится в совершенно другом проекте.Как это можно сделать?
Мое текущее решение состоит в том, что, когда свойство инициализируется в классе config, установщик свойства также устанавливает системное свойство (через System.setProperty("someProp", propValue)
), а затем в аргументах no args.конструктор библиотечного класса я называю System.getProperty("someProp")
.Тем не менее, это выглядит очень странно, особенно в части, где я установил переменную.Возможно, есть какой-то способ настроить SpringBoot для автоматического распространения этого конкретного свойства, чтобы оно стало также системным свойством?
Мой код atm
ServiceConfig.class
@Configuration
@PropertySource("classpath:application.properties")
@ConfigurationProperties(prefix = "service")
public class ServiceConfig {
private String serviceUrl;
public String getServiceUrl() {
return serviceUrl;
}
public void setServiceUrl(String serviceUrl) {
this.serviceUrl = serviceUrl;
System.setProperty("SERVICE_URL", serviceUrl);
}
}
Мой application.properties
service.serviceUrl=http://localhost:8000
LibraryClass.class
public class LibraryClass {
private final String serviceUrl;
public LibraryClass() {
this.serviceUrl = getProperty("OAUTH_SERVICE_URL");
}
...
}