(转)SpringBoot之退出服务(exit)时调用自定义的销毁方法

我们在工作中有时候可能会遇到这样场景,需要在退出容器的时候执行某些操作。SpringBoot中有两种方法可以供我们来选择(其实就是spring中我们常用的方式。只是destory-method是在XML中配置的,SpringBoot是去配置化。所以这里就不提这种方式了),一种是实现DisposableBean接口,一种是使用@PreDestroy注解。OK,下面我写两个例子看一下:

DisposableBean接口

我们可以通过实现这个接口来在容器退出的时候执行某些操作。例子如下:

package com.zkn.learnspringboot.destory;  

import org.springframework.beans.factory.DisposableBean;
import org.springframework.boot.ExitCodeGenerator;
import org.springframework.stereotype.Component;  

/**
 * Created by zkn on 2016/8/14.
 */
@Component
public class TestImplDisposableBean implements DisposableBean, ExitCodeGenerator {  

    @Override
    public void destroy() throws Exception {  

        System.out.println("<<<<<<<<<<<我被销毁了......................>>>>>>>>>>>>>>>");
        System.out.println("<<<<<<<<<<<我被销毁了......................>>>>>>>>>>>>>>>");
    }  

    @Override
    public int getExitCode() {  

        return 5;
    }
}  

@PreDestroy注解

我们可以在需要的类的方法上添加这个注解,同样可以满足我们的需求。

package com.zkn.learnspringboot.destory;  

import org.springframework.stereotype.Component;
import javax.annotation.PreDestroy;  

/**
 * Created by zkn on 2016/8/14.
 */
@Component
public class TestAnnotationPreDestroy {  

    @PreDestroy
    public void destory() {  

        System.out.println("我被销毁了、、、、、我是用的@PreDestory的方式、、、、、、");
        System.out.println("我被销毁了、、、、、我是用的@PreDestory的方式、、、、、、");
    }
}  

输出结果如下:

TIPS:

退出你可以通过Ide中的功能来退出。这里我启动的时候是在CMD中用jar启动的,启动命令如下:java -jar LearnSpringBoot-0.0.1-SNAPSHOT.jar,所以我在这里退出的时候是用的Ctrl+C来执行的退出操作。如果你用的mvn spring-boot:run来启动运行的话,可能不会执行销毁的操作。

转自:http://blog.csdn.net/zknxx/article/details/52204036

原文地址:https://www.cnblogs.com/zhangmingcheng/p/8340150.html

时间: 2024-11-06 07:31:07

(转)SpringBoot之退出服务(exit)时调用自定义的销毁方法的相关文章

Android Fragment 隐藏或显示时调用的生命周期方法

Fragment使用方式大体分两种: 大家要注意不同的Fragment使用方法,Fragment隐藏和显示调用的生命周期方法是不同的,以下是Fragment显示隐藏调用的方法: //判断是否展示—与ViewPager连用,进行左右切换@Overridepublic void setUserVisibleHint(boolean isVisibleToUser) {super.setUserVisibleHint(isVisibleToUser);if (isVisibleToUser)//展示}

DedeCMS搜索结果页面调用自定义字段的方法

有时候在我们需要在dedecms的搜索结果页面调用自定义字段,尤其是在做下载站的时候,需要在搜索结果页调用软件大小以及软件等级等等,但是我们发现在搜索结果页模板中使用"[field:字段名]"标签无法正确调用,就算添加了列表附加字段也不行.这里,织梦58就教大家如何在搜索结果页调用自定义字段,具体方法及步骤如下:找到并打开include目录下的extend.func.php文件,在文件末尾添加如下代码: 1 function Search_addfields($id,$result){

织梦添加和调用自定义字段的方法

织梦自定义字段要想在任何位置任何模版中调用或者在{dede:list }和{dede:arclist }标签中调用,需要特殊设置.自定义字段就是列表附加字段自定义的字段. 一,织梦如何添加自定义字段:网站后台>核心>频道模型>内容模型管理>选择要添加自定义字段的频道模型,这里以图片集频道举例 注意:创建字段,前台参数这里“使字段可以在列表的底层模板中获得”这个必须勾选 在字段管理>添加新字段中添加(价格属性) 在基本设置里>列表附加字段中添加jiage(可以在列表模板{

【SpringBoot】SpringBoot 之 OpenFeign服务调用(八)

OpenFeign介绍 前面在使用Ribbon+RestTemplate时,利用RestTemplate对http请求的封装处理,形成了一套模版化的调用方法.但是在实际开发中,对于服务依赖的调用可能不止一处,往往一个接口会被多处调用.所有Feign在此基础上做了进一步封装,由他来帮助我们定义和实现依赖服务接口的定义.在Feign的实现下,我们只需创建一个接口并使用注解的方式来配置它(以前是Dao接口上面标注Mapper注解,现在是一个微服务接口上面标注一个Feign注解即可),集可完成对服务提供

谷歌浏览器本地调试时调用服务跨域

谷歌浏览器本地调试时调用服务跨域,解决方法: 右键点击谷歌浏览器图标打开属性,设置“目标”,在末尾添加 --disable-web-security --user-data-dir=C:\MyChromeData c盘创建MyChromeData文件夹 然后点击图标打开浏览器即可 原文地址:https://www.cnblogs.com/onlyperfect/p/12418592.html

Springboot 优雅停止服务的几种方法

在使用Springboot的时候,都要涉及到服务的停止和启动,当我们停止服务的时候,很多时候大家都是kill -9 直接把程序进程杀掉,这样程序不会执行优雅的关闭.而且一些没有执行完的程序就会直接退出. 我们很多时候都需要安全的将服务停止,也就是把没有处理完的工作继续处理完成.比如停止一些依赖的服务,输出一些日志,发一些信号给其他的应用系统,这个在保证系统的高可用是非常有必要的.那么咱么就来看一下几种停止springboot的方法. 第一种就是Springboot提供的actuator的功能,它

Springboot 构建http服务,返回的http行是&#39;HTTP/1.1 200&#39; 无状态码描述 客户端解析错误

----------------------------------------- *** 响应的数据格式 HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Accept-Ranges: bytes ETag: W/"27-1432777730225" Last-Modified: Thu, 28 May 2015 01:48:50 GMT Content-Type: text/html Content-Length: 27 Date: Thu, 28

SpringCloud从入门到进阶(四)——使用SpringBoot搭建微服务

内容 SpringBoot整合SpringCloud的Eureka.Zuul等组件,快速实现简单易懂且具有服务熔断.负载均衡的分布式架构1.0,体验微服务的魅力. 版本 IDE:IDEA 2017.2.2 x64 JDK:1.8.0_171 manve:3.3.3 SpringBoot:1.5.9.RELEASE SpringCloud:Dalston.SR1 适合人群 ?Java开发人员 说明 转载请说明出处:SpringCloud从入门到进阶(四)--使用SpringBoot搭建微服务 参考

绑定服务调用远程服务中的方法

在Andorid平台中,各个组件运行在自己的进程中,他们之间是不能相互访问的,但是在程序之间是不可避免的要传递一些对象,在进程之间相互通信.为了实现进程之间的相互通信,Andorid采用了一种轻量级的实现方式RPC(Remote Procedure Call 远程进程调用)来完成进程之间的通信,并且Android通过接口定义语言(Andorid Interface Definition Language ,AIDL)来生成两个进程之间相互访问的代码,例如,你在Activity里的代码需要访问Se