Em um bean de primavera, é possível ter um método de desligamento que possa usar transaçõe

No método destroy de um spring bean, quero executar algumas consultas para limpar algumas coisas no banco de dados. A primavera parece não permitir isso de forma alguma que eu possa encontra

O erro é sempre algo como:

alha no método Invocation of destroy no bean com o nome 'someBean': org.springframework.beans.factory.BeanCreationNotAllowedException: Erro ao criar o bean com o nome 'transactionManager': a criação do bean Singleton não é permitida enquanto os singletons desta fábrica estão em destruição (Não solicitar um bean de um BeanFactory em uma implementação de método de destruição!)

O seguinte diz à primavera para chamar shutdownDestroy depois que o bean não é mais necessário. Mas, recebo o erro acima ao tentar usar transações.

<bean id="someId" name="someName" class="someClass"
 destroy-method="shutdownDestroy"/>

O mesmo ocorre quando eu ativo anotações comuns do ciclo de vida usando:

<bean class="org.springframework. ... .CommonAnnotationBeanPostProcessor"/>

e marque o método com@PreDestroy. Esse método também não pode usar transações.

Há alguma maneira de fazer isso

EDIT: Obrigado! Eu fiz o bean implementar o SmartLifecycle e adicionar o seguinte e funciona muito be

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;
}

questionAnswers(2)

yourAnswerToTheQuestion