ClassCastException: with unnamed module of loader 'app': Spring Data Redis – Spring

by
Ali Hasan
classcastexception cucumber-java spring spring-boot spring-data-redis

Quick Fix: Remove the spring-devtools module. This issue is caused by a classloader conflict between spring-devtools and spring-data-redis. By removing spring-devtools, the classloader conflict is resolved and the ClassCastException error is no longer encountered.

The Problem:

Getting ClassCastException with unnamed module of loader ‘app’ while trying to retrieve data from Redis in a Spring Boot application. The error is encountered when calling GET endpoints to fetch all products or a product by ID. The underlying issue is related to the serialization of objects stored in Redis, specifically the casting of retrieved data to the expected class type. The stack trace indicates a mismatch between the classloaders used to serialize and deserialize the objects.

The Solutions:

Solution 1: Remove spring-devtools module

The ClassCastException is caused by a classloader issue involving the `spring-devtools` module. To resolve this, remove the `spring-devtools` module from your project dependencies.

Solution 2: Disable DevTools restart

To resolve the ClassCastException, disable Spring Boot’s DevTools restart feature by setting the spring.devtools.restart.enabled property to false in the application properties file or using the System.setProperty("spring.devtools.restart.enabled", "false"); before starting the application. This ensures that changes to the code are not automatically detected and the application is not restarted, preventing the class loader from changing and causing the ClassCastException.

public static void main(String[] args) {
    System.setProperty("spring.devtools.restart.enabled", "false");
    SpringApplication.run(MyApp.class, args);
}

Solution 3: Disable Spring Devtools

Disabling Spring Devtools can resolve the ClassCastException issue in this scenario. Spring Devtools is used for hot reloading of application code during development. However, it can sometimes interfere with the serialization and deserialization of objects when using Redis and Spring Boot.

By setting the property spring.devtools.restart.enabled to false in the application.properties file, you can disable Spring Devtools and potentially resolve the issue.

Q&A

How to solve ClassCastException: with unnamed module of loader ‘app’: Spring Data Redis problem?

Try to remove spring-devtools module.

How to disable spring devtools?

Set System property before calling SpringApplication.run(…​). -Dspring.devtools.restart.enabled=false

What is the alternative for disabling spring-devtools?

You can use Disabled devtools.

Video Explanation:

The following video, titled "Fixing ClassCastException - YouTube", provides additional insights and in-depth exploration related to the topics discussed in this post.

Play video

A ClassCastException occurs when you attempt to cast an object to a variable type that does not represent it. In this video, we show what a ...