springboot项目如何在项目停止前调用本地方法

我想在destroy中调用jni执行一些操作外部设备的工作,但是都执行失败。
#

A fatal error has been detected by the Java Runtime Environment:

EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0000000180002710, pid=14536, tid=16960

JRE version: Java(TM) SE Runtime Environment (8.0_71-b15) (build 1.8.0_71-b15)

Java VM: Java HotSpot(TM) 64-Bit Server VM (25.71-b15 mixed mode windows-amd64 compressed oops)

Problematic frame:

C 0x0000000180002710

Core dump written. Default location: D:\work\hs_err_pid14536.mdmp

An error report file with more information is saved as:

D:\work\hs_err_pid14536.log

If you would like to submit a bug report, please visit:

http://bugreport.java.com/bugreport/crash.jsp

The crash happened outside the Java Virtual Machine in native code.

See problematic frame for where to report the bug.

……

Register to memory mapping:

RAX=0x0000000180002710 is an unknown value
RBX={method} {0x000000003a917bb0} 'findSymbol' '(JLjava/lang/String;)J' in 'com/sun/jna/NativeLibrary'
RCX=0x000000003add39f8 is an unknown value
RDX=0x000000003d89efe8 is pointing into the stack for thread: 0x000000003add3800
RSP=0x000000003d89ef58 is pointing into the stack for thread: 0x000000003add3800
RBP=0x000000003d89efd8 is pointing into the stack for thread: 0x000000003add3800
RSI=0x00000000f812a32e is an unknown value
RDI=0x0000000000000000 is an unknown value
R8 =0x00007ffd64420000 is an unknown value
R9 =0x000000003d89eff8 is pointing into the stack for thread: 0x000000003add3800
R10=0x0000000002e6dfa0 is at code_begin+1632 in an Interpreter codelet
method entry point (kind = native) [0x0000000002e6d940, 0x0000000002e6e960] 4128 bytes
R11=0x0000000054099530 is an unknown value
R12=0x0000000000000000 is an unknown value
R13={method} {0x000000003a917bb0} 'findSymbol' '(JLjava/lang/String;)J' in 'com/sun/jna/NativeLibrary'
R14=0x000000003d89f008 is pointing into the stack for thread: 0x000000003add3800
R15=0x000000003add3800 is a thread
……

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j com.sun.jna.NativeLibrary.findSymbol(JLjava/lang/String;)J+0
j com.sun.jna.NativeLibrary.getSymbolAddress(Ljava/lang/String;)J+24
j com.sun.jna.Function.(Lcom/sun/jna/NativeLibrary;Ljava/lang/String;I)V+41
j com.sun.jna.NativeLibrary.getFunction(Ljava/lang/String;I)Lcom/sun/jna/Function;+48
j com.sun.jna.Library$Handler.invoke(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;+231
j com.sun.proxy.$Proxy194.NET_DVR_CloseAlarmChan_V30(I)Z+19
j com.cgnpc.device.register.RegisterDevice.destroy()V+69
j org.springframework.beans.factory.support.DisposableBeanAdapter.destroy()V+141
j org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(Ljava/lang/String;Lorg/springframework/beans/factory/DisposableBean;)V+133
j org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(Ljava/lang/String;)V+41
j org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingleton(Ljava/lang/String;)V+2
j org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons()V+105
j org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingletons()V+1
j org.springframework.context.support.AbstractApplicationContext.destroyBeans()V+4
j org.springframework.context.support.AbstractApplicationContext.doClose()V+127
j org.springframework.context.support.AbstractApplicationContext$2.run()V+14
v ~StubRoutines::call_stub

那你得先把执行失败的情形展现在帖子里,不然别人没法判断。