OA办公系统源码

news/2024/12/2 21:59:36/

办公自动化(OA)是面向组织的日常运作和管理,员工及管理者使用频率最高的应用系统,既可以用来搭建企业网站,也可聚合在政府网站中,应用广泛。

文件:590m.com/f/25127180-498614174-c340c8(访问密码:551685)

以下内容无关:

-------------------------------------------分割线---------------------------------------------

如果想在 Java 进程退出时,包括正常和异常退出,做一些额外处理工作,例如资源清理,对象销毁,内存数据持久化到磁盘,等待线程池处理完所有任务等等。特别是进程异常挂掉的情况,如果一些重要状态没及时保留下来,或线程池的任务没被处理完,有可能会造成严重问题。那该怎么办呢?

Java 中的 Shutdown Hook 提供了比较好的方案。我们可以通过 Java.Runtime.addShutdownHook(Thread hook) 方法向 JVM 注册关闭钩子,在 JVM 退出之前会自动调用执行钩子方法,做一些结尾操作,从而让进程平滑优雅的退出,保证了业务的完整性。

Shutdown Hook 介绍
其实,shutdown hook 就是一个简单的已初始化但是未启动的线程。当虚拟机开始关闭时,它将会调用所有已注册的钩子,这些钩子执行是并发的,执行顺序是不确定的。

在虚拟机关闭的过程中,还可以继续注册新的钩子,或者撤销已经注册过的钩子。不过有可能会抛出 IllegalStateException。注册和注销钩子的方法定义如下:

public void addShutdownHook(Thread hook) {
// 省略
}

public void removeShutdownHook(Thread hook) {
// 省略
}

关闭钩子被调用场景
关闭钩子可以在以下几种场景被调用:

程序正常退出
程序调用 System.exit() 退出
终端使用 Ctrl+C 中断程序
程序抛出异常导致程序退出,例如 OOM,数组越界等异常
系统事件,例如用户注销或关闭系统
使用 Kill pid 命令杀掉进程,注意使用 kill -9 pid 强制杀掉不会触发执行钩子
验证程序正常退出情况

package com.chenpi;

public class ShutdownHookDemo {

static {Runtime.getRuntime().addShutdownHook(new Thread(() -> System.out.println("执行钩子方法...")));
}public static void main(String[] args) throws InterruptedException {System.out.println("程序开始启动...");Thread.sleep(2000);System.out.println("程序即将退出...");
}

}
运行结果

程序开始启动…
程序即将退出…
执行钩子方法…

Process finished with exit code 0

验证程序调用 System.exit() 退出情况

package com.chenpi;

public class ShutdownHookDemo {

static {Runtime.getRuntime().addShutdownHook(new Thread(() -> System.out.println("执行钩子方法...")));
}public static void main(String[] args) throws InterruptedException {System.out.println("程序开始启动...");Thread.sleep(2000);System.exit(-1);System.out.println("程序即将退出...");
}

}
运行结果

程序开始启动…
执行钩子方法…

Process finished with exit code -1

验证终端使用 Ctrl+C 中断程序,在命令行窗口中运行程序,然后使用 Ctrl+C 中断

package com.chenpi;

public class ShutdownHookDemo {

static {Runtime.getRuntime().addShutdownHook(new Thread(() -> System.out.println("执行钩子方法...")));
}public static void main(String[] args) throws InterruptedException {System.out.println("程序开始启动...");Thread.sleep(2000);System.out.println("程序即将退出...");
}

}
运行结果

D:\IdeaProjects\java-demo\java ShutdownHookDemo
程序开始启动…
执行钩子方法…

演示抛出异常导致程序异常退出

package com.chenpi;

public class ShutdownHookDemo {

static {Runtime.getRuntime().addShutdownHook(new Thread(() -> System.out.println("执行钩子方法...")));
}public static void main(String[] args) {System.out.println("程序开始启动...");int a = 0;System.out.println(10 / a);System.out.println("程序即将退出...");
}

}
运行结果

程序开始启动…
执行钩子方法…
Exception in thread “main” java.lang.ArithmeticException: / by zero
at com.chenpi.ShutdownHookDemo.main(ShutdownHookDemo.java:12)

Process finished with exit code 1

至于系统被关闭,或者使用 Kill pid 命令杀掉进程就不演示了,感兴趣的可以自行验证。

注意事项
可以向虚拟机注册多个关闭钩子,但是注意这些钩子执行是并发的,执行顺序是不确定的。


http://www.ppmy.cn/news/917518.html

相关文章

永久免费oa办公系统到底靠不靠谱?免费oa办公系统市场分析

永久免费 oa办公系统到底靠不靠谱?免费oa办公系统 市场分析 大家在买东西的时候除了看商品质量 , 还会看什么呢? 没错 , 就是价格!购买任何产品都会遇到 “性价比”这个词,企…

开源中国上几款免费又好用的OA协同办公系统,真心不错!

随着企业内部信息化管理的重要程度越来越高,我国OA协同办公产品近年来得以快速发展。其中开源办公产品因为其开源免费的特性受到众多中小企业的喜爱。下面就来说一说那些开源OA协同产品,其中选了几款代表性项目(排名不分先后) NO…

免费OA系统有真正意义上的永久免费吗?

免费OA系统有真正意义上的永久免费吗? 选择免费OA系统,企业领导就会有这个担心,哪有真正的意义的永久免费呢?有一系列的顾虑,这个软件产品适合我们公司的企业管理吗?这个免费OA系统的功能齐全吗&#xff1f…

全国第一个永久性免费OA办公系统

78OA办公系统v4 是全球第一个完全永久免费的OA办公系统,不限使用时间、不限用户数、不限功能。拥有和企业版完全相同的系统架构,78OA办公系统v4的数据可轻松导入到企业版使用,完全免除用户的后顾之忧。 特点:永久免费使用、不限用…

别找OA试用版了,直接送你一个永久免费的

创业初期的企业或小微企业需要信息化管理、协同办公,都会倾向于寻找试用版、破解版的免费软件,但这些软件缺失了企业管理软件最重要的环节:软件维护更新与服务,所以即使是免费软件,各企业在选择的时候也要慎重考虑。 如果企业确实不需要太完整的软件功能,考虑到企业发展…

v-model绑定的数据与接收到的数据类型不一致引发的bug

在使用v-model的过程中 当页面渲染需要的数据类型与data中定义的数据类型不一致时,页面是不会进行响应式对应渲染的、 如:1:绑定的是string的时候,在定义时是number类型 也会导致页面不更新 2:列表下拉框的选中的数据若定义的是number的话,传…

​20X44 FCPX模板电影胶片滚动回忆照片相册图文展示动画 Move Time

20X44 FCPX模板电影胶片滚动回忆照片相册图文展示动画 Move Time [插件介绍] Fcpx模板电影滚动召回相册图像文字显示动画移动时间,50秒长,可修改上述视频中的图片和文字,可插入56张图片或视频,14段文字可修改,并修改…

电影 《狂暴飞车》

在线看了这个片子,感觉不怎么样啊!影帝雄风不再,倒是女演员不错。 老规矩,上几个图片留念。