相关疑难解决方法(0)

在spring bean中是否可以使用可以使用事务的shutdown方法?

在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)

spring shutdown

13
推荐指数
1
解决办法
2万
查看次数

标签 统计

shutdown ×1

spring ×1