Mam aplikację internetową (używając Spring 3.1), która używa @ Zaplanowanej Adnotacji do okresowego wykonywania zadania roboczego (zaplanowane opóźnienie). Zadanie robocze otwiera połączenie z AWS DynamoDb i wykonuje niektóre operacje odczytu/aktualizacji DB. Po zatrzymaniu aplikacji webowej (od menedżera Tomcat) otrzymuję tę wiadomość w formacie catalina.out:Spring MVC WebApp: @schedule: java-sdk-http-connection-reaper: Nie udało się zatrzymać
"POWAŻNIE: Wydaje się, że aplikacja internetowa [] uruchomiła wątek o nazwie [java-sdk-http-reaper] ale nie udało się tego zatrzymać, bardzo prawdopodobne jest, że spowoduje to wyciek pamięci ".
Mam wrażenie, że ma to coś wspólnego z moim zaplanowanym zadaniem, które wciąż działa, nawet po zatrzymaniu Tomcat.
@Service
public class TaskScheduler implements ApplicationListener<ContextClosedEvent>{
@Autowired
private WorkerTask workerTask;
AmazonDynamoDBClient myDbConn = null;
private TaskScheduler() {
myDbConn = new AWSConnector("aws.properties").getDynamoConnection();
}
/*
* Will be repeatedly called, 10 seconds after the finish of the previous
* invocation.
*/
@Scheduled(fixedDelay=100000)
public void process() {
System.out.println("Scheduling worker task");
//worker task does some db read/writes
Future<String> status = workerTask.work(myDbConn);
if (status.isDone()) {
System.out.println("Completed Task");
return;
}
}
@Override
public void onApplicationEvent(ContextClosedEvent arg0) {
if(event instanceof ContextClosedEvent) {
// TODO Auto-generated method stub
if(myDbConn != null) {
this.myDbConn.shutdown();
}
}
}
dyspozytor-servlet.xml:
<task:annotation-driven scheduler="taskScheduler"/>
<task:scheduler id="taskScheduler" pool-size="2"/>
......
<bean id="TaskScheduler" class="com.sample.TaskScheduler"/>
robię to prawidłowo? a) Nie uruchamiam jawnie TaskScheduler. Zakładam, że wiosna dba o uruchomienie tej usługi. Wywoływane jest "this.myDbConn.shutdown()". Mimo to dostaję błąd. Używam Spring MVC.
Podoba mi się ta odpowiedź, chociaż poniżej może działać. Odkąd używam AWS SDK z innego słoika, którego wewnętrznych elementów nie znam. –