SpringBootの設定プロンプト

プロンプト

目的

設定が自動的に補助機能は、構成が大幅に精度が向上、より速く書き込むことができ促します。

springbootジャーは、すべてのサポートされている設定は、プロパティメタデータファイルの詳細を提供するが含まれています。文書の目的は、開発者がIDEのユーザーを使用できるようにすることですapplication.propertiesapplication.ymlコンテキストヘルプやコード補完ファイルを提供しています。
ほとんどのメタデータファイルを用いた処理によってコンパイルされた@ConfigurationPropertiesすべて自動的に生成されたコメント。また、手動でメタデータの一部を書き込むことができます。

参考SpringBoot 2.2.0.RELEASEドキュメント

ファイル

JARパッケージMETA-INF/spring-configuration-metadata.json(自動的に生成)またはMETA-INF/additional-spring-configuration-metadata.json(手動で追加)

リアル

<!-- 引入相关依赖 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-configuration-processor</artifactId>
  <optional>true</optional>
</dependency>
@Configuration
@ConfigurationProperties(prefix = "file.upload")
public class FileUploadConfig {
  /** Maximum number of bytes per file */
  private String maxSize = "1024M";

  /** 不允许的文件后缀 */
  private String rejectSuffix;
  //注意:使用的时候必须要有getter/setter,否则不会自动生成该属性对应的提示
  //此处因为篇幅原因省略 getter/setter
}
@Configuration
@ConfigurationProperties("map.test")
public class MapTestConfig {
  /** 测试Map类型数据的提示 */
  private Map<String, Object> data;
  //注意:使用的时候必须要有getter/setter,否则不会自动生成该属性对应的提示
  //此处因为篇幅原因省略 getter/setter
}

注記されている場合、中国のコメントは、より慎重に中国の文字化けしている、それがカバーするかどうかを確認するために、対応するファイルの以下の説明で指定されます。

追加のスプリング・コンフィギュレーション・metadata.json

{
  "properties": [
    {
      "name": "file.upload.reject-suffix",
      "type": "java.lang.String",
      "defaultValue": "exe,jar",
      "description": "The file suffix is not allowed.",
      "sourceType": "com.lw.metadata.config.FileUploadConfig"
    },
    {
      "name": "map.test.data",
      "type": "java.util.Map",
      "description": "Tips for testing Map type data.",
      "sourceType": "com.lw.metadata.config.MapTestConfig"
    }
  ],
  "hints": [
    {
      "name": "map.test.data.keys",
      "values": [
        {
          "value": "name",
          "description": "The name of the person."
        },
        {
          "value": "sex",
          "description": "The sex of the person."
        }
      ]
    }
  ]
}

Mavenの後に生成、コンパイルadditional-spring-configuration-metadata.json生成され、ソースコードと同じでspring-configuration-metadata.json次のように

{
  "groups": [
    {
      "name": "file.upload",
      "type": "com.lw.metadata.config.FileUploadConfig",
      "sourceType": "com.lw.metadata.config.FileUploadConfig"
    },
    {
      "name": "map.test",
      "type": "com.lw.metadata.config.MapTestConfig",
      "sourceType": "com.lw.metadata.config.MapTestConfig"
    }
  ],
  "properties": [
    {
      "name": "file.upload.max-size",
      "type": "java.lang.String",
      "description": "Maximum number of bytes per file",
      "sourceType": "com.lw.metadata.config.FileUploadConfig",
      "defaultValue": "1024M"
    },
    {
      "name": "file.upload.reject-suffix",
      "type": "java.lang.String",
      "description": "The file suffix is not allowed.",
      "sourceType": "com.lw.metadata.config.FileUploadConfig",
      "defaultValue": "exe,jar"
    },
    {
      "name": "map.test.data",
      "type": "java.util.Map<java.lang.String,java.lang.Object>",
      "description": "Tips for testing Map type data.",
      "sourceType": "com.lw.metadata.config.MapTestConfig"
    }
  ],
  "hints": [
    {
      "name": "map.test.data.keys",
      "values": [
        {
          "value": "name",
          "description": "The name of the person."
        },
        {
          "value": "sex",
          "description": "The sex of the person."
        }
      ]
    }
  ]
}

効果

SpringBoot構成プロンプト効果

それは以下のような現象を見ることができます。

  • FileUploadConfig#maxSizeのデフォルト値は、次のような、ファイルを要求するためのコードを自動的に生成されます
  • FileUploadConfig#maxSizeの次のようなコード内のコメントに自動的にプロンプ​​トファイルに生成されます、
  • 付加スプリング構成-metadata.jsonファイルには、そのようなプロパティが自動的に増加されていない場合、自動的に生成され、自動的に生成された対応する属性プロンプトオーバーライド、に存在します。

手動プロンプトファイルの書き込み

{
    "groups": [
        {
            "name": "server",
            "type": "org.springframework.boot.autoconfigure.web.ServerProperties",
            "sourceType": "org.springframework.boot.autoconfigure.web.ServerProperties"
        },
        {
            "name": "spring.jpa.hibernate",
            "type": "org.springframework.boot.autoconfigure.orm.jpa.JpaProperties$Hibernate",
            "sourceType": "org.springframework.boot.autoconfigure.orm.jpa.JpaProperties",
            "sourceMethod": "getHibernate()"
        }
    ],
    "properties": [
        {
            "name": "server.port",
            "type": "java.lang.Integer",
            "sourceType": "org.springframework.boot.autoconfigure.web.ServerProperties"
        },
        {
            "name": "server.address",
            "type": "java.net.InetAddress",
            "sourceType": "org.springframework.boot.autoconfigure.web.ServerProperties"
        },
        {
              "name": "spring.jpa.hibernate.ddl-auto",
              "type": "java.lang.String",
              "description": "DDL mode. This is actually a shortcut for the \"hibernate.hbm2ddl.auto\" property.",
              "sourceType": "org.springframework.boot.autoconfigure.orm.jpa.JpaProperties$Hibernate"
        }
    ],
    "hints": [
        {
            "name": "spring.jpa.hibernate.ddl-auto",
            "values": [
                {
                    "value": "none",
                    "description": "Disable DDL handling."
                },
                {
                    "value": "validate",
                    "description": "Validate the schema, make no changes to the database."
                },
                {
                    "value": "update",
                    "description": "Update the schema if necessary."
                },
                {
                    "value": "create",
                    "description": "Create the schema and destroy previous data."
                },
                {
                    "value": "create-drop",
                    "description": "Create and then destroy the schema at the end of the session."
                }
            ]
        }
    ]
}

グループ

パケット、パケットのクラス構成。
つまり、ファイルに応じてグループ分けすることができます:プロファイルのすべての属性と同じグループに

プロパティ タイプ あなたはする必要がありますか 使用
名前 グループの完全な名前
タイプ N パケットデータ型クラス名(例:完全なクラス名を使用して注釈付き@ConfigurationProperties、戻り値の型注釈@Beanを用いた方法)
説明 N グループ化の簡単な説明を。
ソースの種類 N パケットの送信元のクラス名を指定します。
たsourceMethod N グルーピングは、ブラケットおよびパラメータの型を含む、方法を提供します。

プロパティ

ヒントボディ必見

プロパティ タイプ あなたはする必要がありますか 使用
名前 プロパティの完全な名前。使用名小文字期間は分離:のようなフォーマットをserver.address
タイプ N 完全な署名属性のデータ型(のような:java.lang.String)、または完全なジェネリック型(例:java.util.Map<java.util.String,acme.Myenum>)。このプロパティの価値は、ユーザーの種類を要求します。(のような:ここで使用されるネイティブ型パッケージタイプbooleanを使用java.lang.Boolean)。
説明 N グループ化の簡単な説明を。
ソースの種類 N パケットの送信元のクラス名を指定します。
defaultValue オブジェクト N デフォルト値。指定されたプロパティとして使用する場合。
廃止 非推奨 N プロパティが放棄されているかどうかを指定します。

次のように非推奨のプロパティは次のとおりです。

プロパティ タイプ あなたはする必要がありますか 使用
レベル N レベルを放棄し、それであってもよいwarning(デフォルト)またはerrorwarning:プロパティはまだ使用されなければならない; error:属性を使用すると、使用できることを保証するものではありません。
理由 N 短い理由は、財産を放棄しました。
置換 N 新しいプロパティのフルネームの捨てられたプロパティを置換します。空でもよいです

注意:春のブートバージョン1.3の前に、boolean型を使用deprecated

次の例では、このシナリオに対処する方法を示す、公式文書から来ています:

@ConfigurationProperties("app.acme")
public class AcmeProperties {

    private String name;

    public String getName() { ... }

    public void setName(String name) { ... }

    @DeprecatedConfigurationProperty(replacement = "app.acme.name")
    @Deprecated
    public String getTarget() {
        return getName();
    }

    @Deprecated
    public void setTarget(String target) {
        setName(target);
    }
}

一度getTargetsetTarget公共のAPIから削除する方法、メタデータが自動的にプロンプトが表示されなくなり、廃棄されます。あなたはヒントを維持したい場合は、追加する必要がありerror、ユーザーはまだプロパティを理解することができることを保証放棄したマニュアルレベルのメタデータを。そうするための選択肢を提供するのに特に有用です。

ヒント

補助プロンプト、非必須

プロパティ タイプ あなたはする必要がありますか 使用
名前 それに関連付けられたプロパティの完全な名前をヒント。名は小文字で期間によって分離された形式(例:spring.mvc.servlet.path)、もしマップタイプに関連付けられた属性(例:system.contexts)、キーマップに関連付けることができることを示唆している(system.contexts.keys)または値(system.contexts.values)。
ValueHint [] N 有効な値のセット。(以下の表で詳述)
プロバイダー ValueProvider [] N プロバイダーのコレクション。(以下の表で詳述)

values 次のような特性は以下のとおりです。

プロパティ タイプ あなたはする必要がありますか 使用
オブジェクト ヒント実効参照要素。プロパティが配列である場合、値および説明は、アレイとすることができます。
説明 N 対応する値の簡単な説明

### ValueHint

次のようにサポートの種類のための地図は、次のとおりです。

@ConfigurationProperties("sample")
public class SampleProperties {

    private Map<String,Integer> contexts;
    // getters and setters
}
{"hints": [
    {
        "name": "sample.contexts.keys",
        "values": [
            {
                "value": "sample1"
            },
            {
                "value": "sample2"
            }
        ]
    }
]}

ヒントヒントは、キーと値のそれぞれについて、地図の範囲内です。

.keysそして、.valuesプレフィックスは、それぞれのキーと値のマップを関連付ける必要があります。

providers 次のような特性は以下のとおりです。

プロパティ タイプ あなたはする必要がありますか 使用
名前 N コンテンツプロバイダの名前が参照される要素のための他の有用なヒントを提供します。
パラメーター JSONオブジェクト N 他のパラメータプロバイダが(詳細については、プロバイダのドキュメントを参照してください)サポート。

ValueProvider

スキップされた推奨値よりも一般的に少ないです

次の表は、サポートされているプロバイダのリストをまとめたものです。

プロパティ 説明
どれか どんな付加価値を提供することができました。
クラス参照 プロジェクトのカテゴリで自動的に利用できます。典型的には、標的パラメータ制約によって指定された基底クラス。
ハンドルとして それはターゲットパラメータの種類によって定義されたかのように、プロパティの処理は定義する必要があります。
ロガー名 自動的に効果的なレコード名とグループを記録します。典型的には、現在のアイテム利用可能なパッケージおよびクラス名を自動的に行うことができ、グループを定義することができます。
スプリングビーン参照 プロジェクトで現在使用可能なのオートコンプリートBean名。一般的に、ターゲットパラメータベースクラスの制約によって指定されました。
春プロファイル名 自動的にプロジェクトで利用可能なプロファイル名を春。

どれか

すべてのプロパティタイプの値を持つ行で。

{"hints": [
    {
        "name": "system.state",
        "values": [
            {
                "value": "on"
            },
            {
                "value": "off"
            }
        ],
        "providers": [
            {
                "name": "any"
            }
        ]
    }
]}

クラス参照

以下のパラメータを指定します。

パラメータ タイプ デフォルト値 説明
ターゲット String(Class) 分配给值的类的全限定类名。通常用于筛选非候选类。
concrete boolean true 指定是否仅将具体类视为有效候选。
{"hints": [
    {
        "name": "server.servlet.jsp.class-name",
        "providers": [
            {
                "name": "class-reference",
                "parameters": {
                    "target": "javax.servlet.http.HttpServlet"
                }
            }
        ]
    }
]}

handle-as

允许您将属性的类型替换为更高级的类型。

这通常在属性具有 java.lang.String 类型时发生,因为您不希望配置类依赖于不在类路径上的类。

参数 类型 默认值 描述
target String(Class) Y 为属性考虑的类型的完全限定名。

可用的值如下:

  • 任何 java.lang.Enum: 列出属性的可能值。
  • java.nio.charset.Charset: 支持自动完成字符集/编码值(如 utf-8
  • java.util.Locale:自动完成区域设置(如:en_US)
  • org.springframework.util.MimeType:支持自动完成 content-type 值(如:text/plain
  • org.springframework.core.io.Resource: 支持自动完成spring的资源抽象以引用文件系统或类路径上的文件 (如:classpath:/sample.properties

注意:如果要提供多个值,用 Collection 或 数组类型

{"hints": [
    {
        "name": "spring.liquibase.change-log",
        "providers": [
            {
                "name": "handle-as",
                "parameters": {
                    "target": "org.springframework.core.io.Resource"
                }
            }
        ]
    }
]}

logger-name

logger-name provider 自动完成有效的记录器名称和记录器组。 通常,当前项目中可用的包和类名可以自动完成。 如果组已启用(默认),并且配置中标识了自定义记录器组,则应提供该组的自动完成。

支持以下参数:

参数 类型 默认值 描述
group boolean true 指定是否应考虑已知组。

由于记录器名称可以是任意名称,此 provider 应允许任何值,但可以突出显示项目的类路径中不可用的有效包和类名。

以下是 logging.level 属性。keys 是 logger 名,values 关联标准的 log levels 或 自定义的 level,

{"hints": [
    {
        "name": "logging.level.keys",
        "values": [
            {
                "value": "root",
                "description": "Root logger used to assign the default logging level."
            },
            {
                "value": "sql",
                "description": "SQL logging group including Hibernate SQL logger."
            },
            {
                "value": "web",
                "description": "Web logging group including codecs."
            }
        ],
        "providers": [
            {
                "name": "logger-name"
            }
        ]
    },
    {
        "name": "logging.level.values",
        "values": [
            {
                "value": "trace"
            },
            {
                "value": "debug"
            },
            {
                "value": "info"
            },
            {
                "value": "warn"
            },
            {
                "value": "error"
            },
            {
                "value": "fatal"
            },
            {
                "value": "off"
            }

        ],
        "providers": [
            {
                "name": "any"
            }
        ]
    }
]}

spring-bean-reference

此 provider 自动完成在当前项目的配置中定义的bean。 支持以下参数:

参数 类型 默认值 描述
target String(Class) 应该分配给候选对象的bean类的完全限定名。通常用于筛选非候选bean。

以下示例表示:spring.jmx.server 属性定义了使用 MBeanServer

{"hints": [
    {
        "name": "spring.jmx.server",
        "providers": [
            {
                "name": "spring-bean-reference",
                "parameters": {
                    "target": "javax.management.MBeanServer"
                }
            }
        ]
    }
]}

spring-profile-name

此 provider 自动完成在当前项目的配置中定义的spring配置文件。

以下示例表示:spring.profiles.active属性可启用的配置文件名称。

{"hints": [
    {
        "name": "spring.profiles.active",
        "providers": [
            {
                "name": "spring-profile-name"
            }
        ]
    }
]}

可重复的元数据项

具有相同“property”和“group”名称的对象可以在元数据文件中多次出现。 例如,可以将两个单独的类绑定到同一前缀,每个类都有可能重叠的属性名。 虽然多次出现在元数据中的相同名称不应是常见的,但元数据的使用者应注意确保他们支持该名称。

自动生成提示文件

通过使用 spring-boot-configuration-processor jar,您可以从用 @ConfigurationProperties 注释的类中轻松生成自己的配置元数据文件。 jar包含一个java注释处理器,在编译项目时调用它。 用此处理器,需要引入 spring-boot-configuration-processor 依赖。

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

处理器获取用@configurationproperties注释的类和方法。 配置类中字段值的 javadoc 用于填充 description 属性。

注意:仅仅只应将简单文本与@configurationproperties字段javadoc一起使用,因为在将它们添加到json之前不会对它们进行处理。

如果类有一个“至少一个参数”的构造函数,则为每个构造函数参数创建一个属性。 否则,通过标准getter和setter来发现属性,这些getter和setter对集合类型进行了特殊处理(即使只有getter存在,也会检测到)。

注解处理器还支持使用@data、@getter和@setter 的 lombok 注解。

注解处理器无法自动检测 EnumCollections 的默认值。在集合或枚举属性具有非空默认值的情况下,应提供手动元数据。

@ConfigurationProperties(prefix="acme.messaging")
public class MessagingProperties {

    private List<String> addresses = new ArrayList<>(Arrays.asList("a", "b")) ;

    private ContainerType = ContainerType.SIMPLE;

    // ... getter and setters

    public enum ContainerType {
        SIMPLE,
        DIRECT
    }
}

为了提示上述属性的默认值,应该手动添加如下元数据:

{"properties": [
    {
        "name": "acme.messaging.addresses",
        "defaultValue": ["a", "b"]
    },
    {
        "name": "acme.messaging.container-type",
        "defaultValue": "simple"
    }
]}

注:プロジェクトではAspectJを使用する場合は、一度だけ実行する注釈プロセッサを確認する必要があります。Mavenの、明示的に設定使用する場合maven-apt-plugin、プラグを、どこでのみ注釈プロセッサ依存関係を追加します。また、AspectJのは、プラグインの処理のすべての上で動作し、中に作ることができます無効に注釈プロセス、次のように:maven-compiler-pluginconfiguration

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <proc>none</proc>
    </configuration>
</plugin>

バインディング・プロパティ

注釈プロセッサは、自動的に内部のネストしたプロパティクラスを検討しました。

@ConfigurationProperties(prefix="server")
public class ServerProperties {
    private String name;
    private Host host;
    // ... getter and setters
    public static class Host {
        private String ip;
        private int port;
        // ... getter and setters
    }
}

上記実施例の生成server.nameserver.host.ipおよびserver.host.portメタデータ属性情報。@NestedconfigurationProperty注釈は、従来の(非内部)と考えタイプのネストされたクラスであるべきであるフィールドを示すために使用されてもよいです。

注:これは、これらのタイプを自動的に識別しているとして、収集・マッピングに影響を与え、各タイプのメタデータプロパティを生成しません。

追加のメタデータを追加します。

非常に柔軟な処理スプリングブート・コンフィギュレーション・ファイルは、通常の状況下では、そこに結合されないことが@ConfigurationPropertiesBeanプロパティ。また、これをサポートするために、既存のキーのプロパティの一部を調整する必要があり、あなたが「プロンプト」カスタム注釈プロセッサは自動的に提供することを可能にするかもしれMETA-INF/additional-spring-configuration-metadata.jsonエントリが要求されます(メインのメタデータファイルにマージ春構成- metadata.jsonで)

参照が自動的に属性を検出された場合、説明はカバーし、情報を廃棄し、デフォルト値(指定されている場合)。現在のモジュールを手動でプロパティを識別するために宣言されていない場合は、新しいプロパティとして追加されます。

additional-spring-configuration-metadata.jsonファイル形式とspring-configuration-metadata.json同じファイル。追加のプロパティファイルはオプションです。他の属性が存在しない場合は、ファイルを追加しないでください。

参考資料

springboot構成のヒント公式文書
、公開番号:イーフェイは(Javaドメインの知識に焦点を当て、是非における綿密な研究システムの原則にソースからと秩序の学習)

逸飞兮

おすすめ

転載: www.cnblogs.com/lw5946/p/11769298.html