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
| Feature | Kickstart | Spring GraphQL |
|---|---|---|
| Schema | Annotation-based | Schema-first (.graphqls) |
| Resolvers | Interface-based | Annotation-based |
| Integration | Manual config | Auto-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:
- Apollo Studio — Schema validation and testing
- DigitalOcean — $4/mo droplet for staging environment
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%.
