The ThreadPoolTaskExecutor only works with Runnable objects, thus it has no concept of objects that are serializable that happen to be processed in a runnable.
If you need to persist the objects, you will need to do this before you execute, and then have a service that resubmits them after a restart. If you want to mark the execution completed, either your runnable can remove the persistence at the end of it's process, or you can use the submit method on the ThreadPoolTaskExecutor and monitor the Future.
It would also be possible to write an advisor that you can place on the TaskExecutor (since it is likely a spring managed bean in your case), and implement the persisting logic there as well.