在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 stop() {
shutdownDestroy();
isRunning = false;
}
Run Code Online (Sandbox Code Playgroud)
Sea*_*oyd 14
有趣的问题.我想你应该可以通过让你的bean实现SmartLifeCycle
它来做到这一点.
这样,如果你的int getPhase();
方法返回Integer.MAX_VALUE
,它将是ApplicationContext
最后关闭时被调用的第一个.
参考:
归档时间: |
|
查看次数: |
23111 次 |
最近记录: |