Подтвердить что ты не робот

Spring boot - пользовательские переменные в Application.properties

У меня есть клиент загрузки spring, который использует успокоительный api. Вместо жесткого кодирования IP-адреса REST API в классе java есть ли какая-либо ключевая запись в application.properties, которую я могу использовать?

А если нет, могу ли я создать пользовательскую запись?

Спасибо

4b9b3361

Ответ 1

Инфраструктура, которая использует Spring Boot, может быть использована в вашем собственном проекте точно так же. Вы прокомментировали @zmitrok ответ о предупреждении "неизвестного свойства". Это потому, что ваше свойство не имеет метаданных, поэтому среда IDE не знает об этом.

Я бы настоятельно советовал вам не использовать @Value, если можно, поскольку он ограничен, по сравнению с тем, что предлагает Spring Boot (@Value - это функция Spring Framework).

Начните с создания POJO для вашего IP:

@ConfigurationProperties("app.foo")
public class FooProperties {

    /**
     * IP of foo service used to blah.
     */
    private String ip = 127.0.0.1;

    // getter & setter
}

Тогда у вас есть два варианта

  • Поместите @Component на FooProperties и включите обработку свойств конфигурации, добавив @EnableConfigurationProperties в любой из ваших классов @Configuration (этот последний шаг больше не нужен как из Spring Boot 1.3.0.M3)
  • Оставьте FooProperties как есть и добавьте @EnableConfigurationProperties(FooProperties.class) в любой из ваших классов @Configuration, который автоматически создаст для вас Spring Bean.

Как только вы сделали это, app.foo.ip можно использовать в application.properties, и вы можете @Autowired FooProperties в своем коде искать значение свойства

@Component
public MyRestClient {

    private final FooProperties fooProperties;

    @Autowired
    public MyRestClient(FooProperties fooProperties) { ... }

    public callFoo() {
       String ip = this.fooProperties.getIp();
       ...
    }

}

Итак, ваш ключ по-прежнему остается желтым в вашей среде IDE. Последним шагом является добавить дополнительную зависимость, которая будет смотреть ваш код и генерировать соответствующие метаданные во время сборки. Добавьте в свой pom.xml следующее:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

И voilà, ваш ключ распознается, у вас есть javadoc, и IDE дает вам значение по умолчанию (значение, которое вы инициализировали в поле). После этого вы можете использовать любой тип, который обрабатывает службы преобразования (т.е. URL), а javadoc в поле используется для создания документации для ваших ключей.

Вы также можете добавить любую проверку JSR-303 ограничения в своем поле (например, регулярное выражение, чтобы проверить его действительный ip).

Отметьте этот примерный проект и документацию для более подробности.

Ответ 2

Вместо жесткого кодирования IP в файл свойств вы можете запустить приложение с помощью

-Dmy.property=127.127.10.20

И Spring Boot автоматически подберет его с помощью

@Value("${my.property}")
private String myProperty;