在spring bean的destroy方法中,我想执行一些查询来清理数据库中的一些东西.Spring似乎无法以任何方式找到它.
错误始终如下:
破坏方法的调用上的名字豆失败"someBean":org.springframework.beans.factory.BeanCreationNotAllowedException:错误创建名为"transactionManager的"豆:辛格尔顿bean创建时不允许使用这家工厂的单身人士都在破坏(不要求在destroy方法实现中来自BeanFactory的bean!)
以下将告诉spring在不再需要bean之后调用shutdownDestroy.但是,我在尝试使用事务时遇到上述错误.
<bean id="someId" name="someName" class="someClass"
destroy-method="shutdownDestroy"/>
Run Code Online (Sandbox Code Playgroud)
使用以下命令启用公共生命周期注释时也是如此:
<bean class="org.springframework. ... .CommonAnnotationBeanPostProcessor"/>
Run Code Online (Sandbox Code Playgroud)
然后用方法标记方法@PreDestroy.该方法也不能使用事务.
有没有办法做到这一点?
编辑:谢谢!我有bean实现SmartLifecycle并添加以下内容,它的工作非常好.
private boolean isRunning = false;
@Override
public boolean isAutoStartup() {return true;}
@Override
public boolean isRunning() {return isRunning;}
/** Run as early as possible so the shutdown method can still use transactions. */
@Override
public int getPhase() {return Integer.MIN_VALUE;}
@Override
public void start() {isRunning = true;}
@Override
public void stop(Runnable callback) {
shutdownDestroy();
isRunning = false;
callback.run();
}
@Override
public void …Run Code Online (Sandbox Code Playgroud)