- java.lang.Object
-
- jdk.jfr.internal.Control
-
- jdk.jfr.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
-
-
方法详细信息
-
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
-
-