hea*_*ach 6 java shutdown-hook dropwizard
问题是,我停止了Dropwizard应用程序(通过ctrl + c),我在主类中插入了一个Shutdown Hook,以便在关机前做一些事情.但是现在,在我可以做我想做的事情之前,应用程序的ServerConnector已关闭.
有一个轮询服务(轮询我的一个资源),我需要告诉他们,该应用程序将很快停止以防止一些问题.在资源停止之前我需要至少15秒.
有些想法如何解决这个问题?
添加一个Dropwizard任务,它将更改您的轮询资源将用于响应的静态字段的状态(或者您想要传递数据).
public class ShutdownTask extends Task {
private int timeoutSeconds;
public ShutdownTask (int timeoutSeconds) {
super("shutdown");
this.timeoutSeconds = timeoutSeconds;
}
@Override
public void execute(ImmutableMultimap<String, String> parameters, PrintWriter output) throws Exception {
// you probably can take the timeout parameter from the request via 'parameters' instead of the constructor.
PollingResource.shuttingDownIn = timeoutSeconds;
}
}
environment.admin().addTask(new ShutdownTask(15));
Run Code Online (Sandbox Code Playgroud)
然后编写一个bash脚本,它将卷曲到任务
curl -X POST http://dw.example.com:8081/tasks/shutdown
Run Code Online (Sandbox Code Playgroud)
和:
System.exit(0))但你可以添加以下执行方法:Thread.sleep(timeoutSeconds * 1000);
System.exit(0)
kill -SIGINT <pid>
小智 5
您可以使用生命周期挂钩来管理某些资源。
public class ManagedObject implements Managed {
private final Object obj;
public ManagedObject(Object obj) {
this.obj = obj;
}
@Override
public void start() throws Exception {
// Do something to start the object
}
@Override
public void stop() throws Exception {
// Do something to stop the object
}
}
Run Code Online (Sandbox Code Playgroud)
然后在环境上注册
ManagedObject myManagedObject = new ManagedObject(obj);
environment.lifecycle().manage(myManagedObject);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4449 次 |
| 最近记录: |