Файл application.properties на основе среды доступа в классе, не управляемом Spring - PullRequest
1 голос
/ 15 февраля 2020

Я работаю над проектом весенней загрузки, имеющим версию 2.1.6.RELEASE и xslt 1.0.

У меня есть класс, который имеет набор методов stati c, используемых для генерации набора URL-адресов с использованием пользовательских логик c, связанных с приложением.

public class URLGenerator{

    public static String generateURLA(String param1,String param2,String param3)
    {
        String restServiceUrl=<acess url from application.properties>
        //code to invoke third party service
        RestTemplate restTemplate=new RestTemplate();
        String url=restTemplate.invoke()
        return url;
    }
}

В приведенном выше методе мне нужно сделать перерыв для вызова сторонней службы для получения окончательного URL-адреса. URL для вызова службы различен для каждой среды, поэтому я сохранил URL в файле application- {env} .properties.

Я не смогу изменить вышеуказанный метод на нестатический c, так как существует несколько файлов xsl, вызывающих вышеуказанный метод.

Каков наилучший способ доступа к приложению на основе среды Файл .properties в классе, который не управляется Spring?

Ответы [ 2 ]

3 голосов
/ 15 февраля 2020

Вы можете просто автоматически подключить Environment и получить свойство:

@Autowired
private Environment env;

public void method() {
    String url = env.getProperty("service.url");
    // ...
}

Если это не бин, вы можете просто создать сервис, который делает это:

@Service
class PropertyService implements InitializingBean {

    @Autowired
    private Environment env;

    private static PropertyService instance;

    public void method() {
        String url = env.getProperty("service.url");
        // ...
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        instance = this;
    }

    public static PropertyService get() {
        return instance;
    }
}
0 голосов
/ 15 февраля 2020

Вы можете использовать простые старые свойства здесь.

final Properties props = new Properties();
props.load(new FileInputStream("/path/application.properties"));
props.getProperty("urls.foo"));
props.getProperty("urls.bar"));

ИЛИ

final Properties props = new Properties();
try (InputStream is = getClass().getResourceAsStream("application.properties")) {
  props.load(is);
  props.getProperty("urls.foo"));
  props.getProperty("urls.bar"));
}
...