web-dev-qa-db-ja.com

Spring boot-Application.propertiesのカスタム変数

安らかなAPIを使用するスプリングブートクライアントがあります。 REST APIのJavaクラスのIPアドレスをハードコーディングする代わりに、使用できるapplication.propertiesにキーエントリはありますか?

そうでない場合、カスタムエントリを作成できますか?

ありがとう

25
Kingamere

Spring Bootが使用するインフラストラクチャは、まったく同じ方法で独自のプロジェクトで使用できます。 @zmitrokの回答で、「不明なプロパティ」警告についてコメントしました。これは、プロパティにメタデータがないため、IDEはそれを認識しないためです。

Spring Bootが提供するもの(@ValueはSpring Frameworkの機能です)に比べてかなり制限されているため、可能であれば@Valueを使用することを強くお勧めしますnot

IPのPOJOを作成することから始めます。

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

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

    // getter & setter
}

次に、2つの選択肢があります

  1. @ComponentFooPropertiesに配置し、@EnableConfigurationPropertiesクラスのいずれかに@Configurationを追加して構成プロパティの処理を有効にします(この最後の手順は、Spring Boot 1.3.0.M3の時点で不要です)
  2. FooPropertiesをそのままにして、Spring Beanを自動的に作成する@Configurationクラスのいずれかに@EnableConfigurationProperties(FooProperties.class)を追加します。

app.foo.ipapplication.propertiesで使用でき、コードで@AutowiredFooPropertiesを使用してプロパティの値を検索できます。

@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>

そして、あなたのキーが認識され、javadocがあり、IDEはあなたにデフォルト値(フィールドで初期化した値)を与えます。サービスハンドル(つまりURL)およびフィールドのjavadocを使用して、キーのドキュメントを生成します。

また、フィールドにJSR-303制約検証を追加することもできます(たとえば、有効なIPであることを確認するための正規表現)。

詳細については、 このサンプルプロジェクト および ドキュメント を確認してください。

82
Stephane Nicoll

プロパティファイルにIPをハードコーディングする代わりに、次を使用してアプリケーションを開始できます。

-Dmy.property=127.127.10.20

そしてSpring Bootは自動的にそれを拾います

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

Application.propertiesに独自のエントリを追加できます。プロパティ名が http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#common-application-properties にリストされている共通のプロパティと衝突しないようにしてください。 =

3
zmitrok