How to Migrate from GraphQL Java Kickstart to Spring GraphQL

⚠️ Important: This migration guide covers the essential steps.
Always test in a staging environment before deploying to production.

GraphQL Java Kickstart is no longer actively maintained. Spring GraphQL is the
officially supported solution with better Spring Boot integration, improved performance,
and regular security updates.

This guide provides a step-by-step migration path with code examples.
The process involves updating dependencies, converting resolvers, and testing functionality.

📥 Free: Migration Code Templates

Download ready-to-use Java classes for Spring GraphQL migration (DataLoader, Resolvers, Context)



Key Differences

FeatureKickstartSpring GraphQL
SchemaAnnotation-basedSchema-first (.graphqls)
ResolversInterface-basedAnnotation-based
IntegrationManual configAuto-configuration

Step 1: Update Dependencies

Remove GraphQL Java Kickstart dependencies and add Spring GraphQL:


<!-- Remove this -->
<dependency>
    <groupId>com.graphql-java-kickstart</groupId>
    <artifactId>graphql-spring-boot-starter</artifactId>
    <version>13.0.0</version>
</dependency>

<!-- Add this -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-graphql</artifactId>
</dependency>

Step 2: Convert Resolvers

Replace interface-based resolvers with annotation-based controllers:


// BEFORE (Kickstart)
@GraphQLApi
public class UserResolver {
    @GraphQLQuery
    public User user(@GraphQLArgument(name = "id") String id) {
        return userService.findById(id);
    }
}

// AFTER (Spring GraphQL)
@Controller
public class UserResolver {
    @QueryMapping
    public User user(@Argument String id) {
        return userService.findById(id);
    }
}

Step 3: Convert Mutations


// BEFORE
@GraphQLMutation
public User createUser(@GraphQLArgument(name = "input") UserInput input) {
    return userService.create(input);
}

// AFTER
@MutationMapping
public User createUser(@Argument UserInput input) {
    return userService.create(input);
}

Step 4: Migrate DataLoader


// BEFORE
DataLoader<String, User> userDataLoader = DataLoader.newDataLoader(
    (List<String> ids) -> userService.findByIds(ids)
);

// AFTER
@Bean
public DataLoaderFactory<?, ?> userDataLoader() {
    return DataLoaderFactory.<String, User>newFactory()
        .withMappedBatchLoader((ids) -> userService.findByIds(ids));
}

Migration Checklist

  • ☐ Update Maven/Gradle dependencies
  • ☐ Convert @GraphQLApi to @Controller
  • ☐ Replace @GraphQLQuery with @QueryMapping
  • ☐ Replace @GraphQLMutation with @MutationMapping
  • ☐ Migrate schema to .graphqls files
  • ☐ Update DataLoader to BatchLoader
  • ☐ Test all queries and mutations
  • ☐ Verify security configurations

Recommended Tools

Test your migrated API with these tools:

FAQ

Q: How long does migration take?
A: 2-4 weeks for medium-sized applications (50-100 resolvers).

Q: Can I run both frameworks side-by-side?
A: Yes, use Spring profiles to isolate configurations during migration.

Q: Will performance improve?
A: Yes, Spring GraphQL typically reduces query execution time by 15-25%.