The issue was caused by the @Transactional annotation on my custom @CustomService annotation. Since @Transactional proxies the class to handle transaction management, it interfered with the retry mechanism when combined with @Service. The retry logic was being applied to the transactional proxy, which was likely causing the method invocation to bypass the retry logic after the first call.