模块  jdk.jfr
软件包  jdk.jfr

Class SettingControl


  • public abstract class SettingControl
    extends jdk.jfr.internal.Control
    要扩展的基类以创建设置控件。

    以下示例显示了正则表达式的设置控件的简单实现:

       final class RegExpControl extends SettingControl { private Pattern pattern = Pattern.compile(".*"); @Override public void setValue(String value) { this.pattern = Pattern.compile(value); } @Override public String combine(Set<String> values) { return String.join("|", values); } @Override public String getValue() { return pattern.toString(); } public String matches(String s) { return pattern.matcher(s).find(); } }  
    setValue(String)getValue()combine(Set<String>)方法被调用时设定值的变化,当一个记录启动或停止其通常发生。 调用combine(Set<String>)方法来解析多个记录同时运行时要使用的值。

    设置控件必须具有可在注册事件时调用的默认构造函数。

    要对事件使用设置控件,请添加一个返回boolean值的方法,并将设置控件作为参数。 使用@SettingDefinition注释注释方法。 默认情况下,方法名称用作设置名称,但可以使用@Name注释显式设置名称。 如果方法返回true ,则将提交事件。

    建议setValue(String)方法更新可在事件提交时快速检查的高效数据结构。

    以下示例显示如何创建使用上面定义的正则表达式过滤器的事件。

       abstract class HTTPRequest extends Event { @Label("Request URI") protected String uri; @Label("Servlet URI Filter") @SettingDefinition protected boolean uriFilter(RegExpControl regExp) { return regExp.matches(uri); } } @Label("HTTP Get Request") class HTTPGetRequest extends HTTPRequest { } @Label("HTTP Post Request") class HTTPPostRequest extends HTTPRequest { } class ExampleServlet extends HTTPServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) { HTTPGetRequest request = new HTTPGetRequest(); request.begin(); request.uri = req.getRequestURI(); ... request.commit(); } protected void doPost(HttpServletRequest req, HttpServletResponse resp) { HTTPPostRequest request = new HTTPPostRequest(); request.begin(); request.uri = req.getRequestURI(); ... request.commit(); } }  
    以下示例显示如何通过使用指定的正则表达式分配"uriFilter"设置来过滤事件。
       Recording r = new Recording(); r.enable("HTTPGetRequest").with("uriFilter", "https://www.example.com/list/.*"); r.enable("HTTPPostRequest").with("uriFilter", "https://www.example.com/login/.*"); r.start();  
    从以下版本开始:
    9
    另请参见:
    SettingDefinition
    • 构造方法详细信息

      • SettingControl

        protected SettingControl()
        子类构造函数调用的构造方法。
    • 方法详细信息

      • combine

        public abstract String combine​(Set<String> settingValues)
        当多个录制同时运行时,将所有正在运行的录制的设置值合并为一个值,

        设置值如何组合的语义取决于所实现的设置控制,但所有记录应至少获得它们请求的所有事件。

        此方法应该没有副作用,因为调用者可能会缓存值。 此方法永远不应返回null或抛出异常。 如果某个值对此设置控件无效,则应忽略该值。

        例子:

        如果设置控制表示阈值和三个录音,同时运行与设定值"10 ms""8 s""1 ms" ,该方法返回"1 ms" ,因为它意味着所有的录音得到至少所有请求的数据。

        如果设置控件表示一组名称,并且两个记录同时在设置值"Smith, Jones""Jones, Williams"则返回值为"Smith, Jones, Williams"因为将接受所有名称。

        如果设置控制表示布尔条件和四个录音,同时具有以下值运行"true""false""false""incorrect" ,该方法返回"true" ,因为所有记录得到至少所有请求的数据。

        Specified by:
        combine在类 jdk.jfr.internal.Control
        参数
        settingValues - 值集,而不是 null
        结果
        要使用的值,而不是 null
      • setValue

        public abstract void setValue​(String settingValue)
        设置此设置的值。

        如果设置值对此设置无效,则此方法不会引发异常。 相反,该值被忽略。

        Specified by:
        setValue在类 jdk.jfr.internal.Control
        参数
        settingValue - 字符串值,而不是 null
      • getValue

        public abstract String getValue()
        返回此设置的当前使用值,而不是null

        此方法返回的值作为setValue(String)方法和combine(Set)方法的参数有效。

        注册事件以获取默认值时,将调用此方法。 因此,在创建此类的实例后立即返回有效值非常重要。 退回null

        Specified by:
        getValue在类 jdk.jfr.internal.Control
        结果
        设定值,而不是 null