小编JMa*_*Max的帖子

任何支持Process.supportsNormalTermination == true的VM?

Java 9的一个新特性是它不仅可以强制杀死SIGKILL它创建的进程(意思是),而且还可以支持发送SIGTERM(在Java中称为"正常终止").

根据Process的文档,可以查询实现是否支持:

public boolean supportsNormalTermination()如果destroy()的实现是正常终止进程,则返回true,如果执行destroy强制并立即终止进程,则返回false.在ProcessBuilder.start()和Runtime.exec(java.lang.String)返回的Process对象上调用此方法将返回true或false,具体取决于平台实现.

我使用Oracle JRE 9.0.1(Windows 64位)进行了一些测试:

Process p = Runtime.getRuntime().exec("javaw -cp target/classes TestClassWait10Minutes");
p.waitFor(5, TimeUnit.SECONDS);
System.out.println(p.supportsNormalTermination());
Run Code Online (Sandbox Code Playgroud)

但是,似乎Oracle JRE不支持"正常终止",因为我总是得到false.

由于它依赖于"平台实现",Java 9似乎定义了它但没有实现它.

有人知道在任何可用的Java VM中,"正常终止"的功能是否可用?

java kill process java-9

5
推荐指数
1
解决办法
91
查看次数

杰克逊过滤掉没有注释的字段

我试图通过SimpleBeanPropertyFilter使用以下(简化)代码从序列化中筛选出某些字段:

public static void main(String[] args) {
    ObjectMapper mapper = new ObjectMapper();

    SimpleFilterProvider filterProvider = new SimpleFilterProvider().addFilter("test",
            SimpleBeanPropertyFilter.filterOutAllExcept("data1"));
    try {
        String json = mapper.writer(filterProvider).writeValueAsString(new Data());

        System.out.println(json); // output: {"data1":"value1","data2":"value2"}

    } catch (JsonProcessingException e) {
        e.printStackTrace();
    }
}

private static class Data {
    public String data1 = "value1";
    public String data2 = "value2";
}
Run Code Online (Sandbox Code Playgroud)

我们使用的SimpleBeanPropertyFilter.filterOutAllExcept("data1"));我一直期望创建的序列化Json字符串仅包含{"data1":"value1"},但是我得到了{"data1":"value1","data2":"value2"}

如何创建一个尊重指定过滤器的临时编写器(在我的情况下,无法重新配置ObjectMapper)。

注意:由于我的应用程序中的使用场景,我只能接受不使用Jackson批注的答案。

java json jackson

4
推荐指数
3
解决办法
7064
查看次数

标签 统计

java ×2

jackson ×1

java-9 ×1

json ×1

kill ×1

process ×1