zoukankan      html  css  js  c++  java
  • 配置元数据-1

    SpringBoot jar包含元数据文件,这些文件提供了所有支持的配置属性的详细信息。这些文件旨在让IDE开发人员在用户使用时提供上下文帮助和“代码完成”(application.propertes或application.yml)。

    大部分元数据文件是在编译时通过处理用@ConfigurationProperties注释的所有项自动生成的。但是,可以手动为案例编写部分元数据。

    一、元数据格式

    配置元数据文件位于META-INF/spring-configuration-metadata.json. 它们使用JSON格式,将项目分类为“groups”或“properties”,将附加值提示分类为“hints”,如下例所示:

    {"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."
                }
            ]
        }
    ]}

    每个“属性”都是用户用给定值指定的配置项。例如,服务器端口以及服务器地址可能在application.properties指定,如下所示:

    server.port=9090
    server.address=127.0.0.1

    “groups”是更高级别的项,它们本身不指定值,而是为属性提供上下文分组。例如服务器端口以及服务器地址属性是服务器组的一部分。

    不要求每个“属性”都有一个“组”。有些属性可能本身就存在。

    最后,“hints”是用于帮助用户配置给定属性的附加信息。例如,当开发人员配置spring.jpa.hibernate.ddl auto属性,工具可以使用提示为none、validate、update、create和create drop值提供一些自动完成帮助。

    Group属性

    groups数组中包含的JSON对象可以包含下表所示的属性:

    名称 类型 目的
    name String 组的全名。此属性是必需的。
    type String 组的数据类型的类名。例如,如果组基于用@ConfigurationProperties注释的类,则该属性将包含该类的完全限定名。如果它基于@Bean方法,那么它将是该方法的返回类型。如果类型未知,则可以省略该属性。 
    description  String  可以向用户显示的组的简短描述。如果没有说明,可以省略。建议用简短的段落描述,第一行提供简明的摘要。说明中的最后一行应以句点(.)结尾。 
    sourceType  String  提供此组的源的类名。例如,如果该组基于用@ConfigurationProperties注释的@Bean方法,则该属性将包含包含该方法的@Configuration类的完全限定名。如果源类型未知,则可以省略该属性。 
    sourceMethod String 提供此组的方法的全名(包括括号和参数类型)(例如,@ConfigurationProperties注释的@Bean方法的名称)。如果源方法未知,则可以省略。
    Property 属性

    properties数组中包含的JSON对象可以包含下表中描述的属性:

    名称 类型 目的
    name  String  属性的全名。名称采用小写句点分隔形式(例如,server.address). 此属性是必需的。 
    type  String  属性的数据类型的完整签名(例如,java.lang.String)但也可以是一个完整的泛型类型(例如java.util.Map<java.lang.String,acme.MyEnum>)。可以使用此属性指导用户输入的值类型。为了保持一致性,原语的类型是通过使用其对应的包装器来指定的(例如,boolean变成java.lang.Boolean). 注意,这个类可能是一个复杂类型,在绑定值时从字符串转换而来。如果类型未知,则可以省略。
    description  String  可以显示给用户的属性的简短描述。如果没有说明,可以省略。建议用简短的段落描述,第一行提供简明的摘要。说明中的最后一行应以句点(.)结尾。 
    sourceType  String  该类的源提供了该类的名称。例如,如果属性来自用@ConfigurationProperties注释的类,则此属性将包含该类的完全限定名。如果源类型未知,则可以省略。 
    defaultValue  Object  默认值,如果未指定属性,则使用该值。如果属性的类型是数组,则可以是值数组。如果默认值未知,则可以省略。 
    deprecation  Deprecation  指定属性是否已弃用。如果该字段未被否决或该信息未知,则可以省略该字段。下表提供了关于deprecation属性的更多详细信息。 

    每个properties元素的deprecation属性中包含的JSON对象可以包含以下属性:

    名称 类型 目的
    level String 弃用级别,可以是warning(默认值)或error。当属性具有warning弃用级别时,它仍应绑定在环境中。但是,当属性具有error弃用级别时,该属性将不再受管理且不绑定。
    reason String 对不推荐使用该属性的原因的简短描述。如果没有理由,可以省略。建议用简短的段落描述,第一行提供简明的摘要。说明中的最后一行应以句点(.)结尾。
    replacement String 替换此不推荐使用的属性的全名。如果没有替换此属性,则可以省略。
         

    在SpringBoot1.3之前,可以使用一个不推荐使用的boolean属性,而不是deprecision元素。这仍然以不推荐的方式支持,不应再使用。如果没有原因和替换,则应设置一个空的弃用对象。

    也可以通过将@DeprecatedConfigurationProperty注解添加到公开deprecated属性的getter,在代码中以声明方式指定。例如,假设app.acme.target属性混乱,已重命名为app.acme.name属性. 以下示例说明如何处理这种情况:

    @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);
        }
    }

    没有办法设定一个level。由于代码仍在处理属性,因此始终假定为warning。

    前面的代码确保不推荐使用的属性仍然有效(在幕后委托给name属性)。一旦可以从公共API中删除getTarget和setTarget方法,元数据中的自动弃用提示也将消失。如果希望保留提示,则添加带有error弃用级别的手动元数据可确保用户仍能了解该属性。当提供替换件时,这样做特别有用。

    提示属性

    提示数组中包含的JSON对象可以包含下表所示的属性:

    名称 类型 目的
    name String 此提示引用的属性的全名。名称采用小写句点分隔形式(例如 spring.mvc.servlet.path)。如果属性引用一个map(例如system.contexts),该提示要么应用于map的键(system.contexts.keys)或者map的value(system.contexts.values)上。此属性是必需的。
    values ValueHint[] ValueHint对象定义的有效值的列表(下表中描述)。每个条目定义值并可能有一个描述。
    providers ValueProvider[] 由ValueProvider对象定义的提供程序列表。每个条目定义提供程序的名称及其参数(如果有)。

    每个hint元素的values属性中包含的JSON对象可以包含下表中描述的属性:

    名称 类型 目的
    value Object 提示所指向的元素的有效值。如果属性的类型是数组,它也可以是值数组。此属性是必需的。
    description String 可以显示给用户的值的简短描述。如果没有说明,可以省略。建议用简短的段落描述,第一行提供简明的摘要。说明中的最后一行应以句点(.)结尾。

    每个hint元素的providers属性中包含的JSON对象可以包含下表中描述的属性:

    名称 类型 目的
    name String 用于为提示所指向的元素提供附加内容帮助的提供程序的名称。
    parameters JSON object 提供程序支持的任何其他参数

    二、提供手动提示

    要改善用户体验并进一步帮助用户配置给定属性,可以提供其他元数据:

    • 描述属性的潜在值列表。
    • 关联提供程序,将定义良好的语义附加到属性,以便工具可以根据项目上下文发现潜在值的列表。
    值提示

    每个提示的name属性都引用属性的名称。spring.jpa.hibernate.ddl auto属性:none、validate、update、create和create drop。每个值也可能有一个描述。

    如果属性的类型是Map,则可以为键和值提供提示(但不能为映射本身提供提示)。特殊的.keys和.values后缀必须分别引用键和值。

    假设示例上下文将魔法字符串值映射为整数,如下例所示:

    @ConfigurationProperties("sample")
    public class SampleProperties {
    
        private Map<String,Integer> contexts;
        // getters and setters
    }

    魔法值在本例中是sample1和sample2。为了为键提供额外的内容帮助,可以将以下JSON添加到模块的手动元数据中:

    {"hints": [
        {
            "name": "sample.contexts.keys",
            "values": [
                {
                    "value": "sample1"
                },
                {
                    "value": "sample2"
                }
            ]
        }
    ]}

    我们建议对这两个值使用枚举。如果您的IDE支持它,那么这是迄今为止最有效的自动完成方法。

    时刻与技术进步,每天一点滴,日久一大步!!! 本博客只为记录,用于学习,如有冒犯,请私信于我。
  • 相关阅读:
    jquery同步请求
    js换空格为别的元素
    获取页面的checkbox,并给参数赋值
    jQuery判断checkbox是否选中的3种方法
    opencv基础知识------IplImage, CvMat, Mat 的关系和相互转换
    Opencv基础知识-----视频的读取和操作
    OpenCV 基础知识------图像创建、访问、转换
    windows消息钩子注册底层机制浅析
    Windows内核遍历驱动模块源码分析
    VC 快速创建多层文件夹
  • 原文地址:https://www.cnblogs.com/myitnews/p/13548439.html
Copyright © 2011-2022 走看看