本文有SpringBoot 2.1.X和SpringBoot 1.5.X两种版本的安装指导,想看SpringBoot 1.5.X的直接往下拉
SpringBoot 2.1.X version
SpringBoot版本
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath></relativePath><!-- lookup parent from repository -->
</parent>
在Maven的pom.xml
添加GraphQL依赖
<!--graphQL-->
<dependency>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>graphql-spring-boot-starter</artifactId>
<version>7.0.1</version>
</dependency>
<dependency>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>graphiql-spring-boot-starter</artifactId>
<version>7.0.1</version>
</dependency>
然而,Maven显示官方所说的7.0.1
并找不到,于是只好回到别的帖子试验成功的版本
<!--graphQL-->
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-spring-boot-starter</artifactId>
<version>5.0.2</version>
</dependency>
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-java-tools</artifactId>
<version>5.2.4</version>
</dependency>
<!--graphiQL-->
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphiql-spring-boot-starter</artifactId>
<version>5.0.2</version>
</dependency>
在Project总文件夹右键 -> Maven -> Update Project,刷新项目
在Project总文件夹右键 -> Run As -> Java Appliction,启动server
打开浏览器的http://localhost:8080/graphiql,注意是graphiql,效果如下
![](https://img.haomeiwen.com/i23093184/cd0c912e2b96a020.png)
有时候右侧的运行结果框内会出现404错误
{
"timestamp": 1591338766541,
"status": 404,
"error": "Not Found",
"message": "No message available",
"path": "/graphql"
}
一般原因就是两个:
- GraphQL依赖还没有被更新到项目中
解决方法是多尝试Update Project并等待更新完成 - GraphQL版本不匹配当前环境
解决方法是变化GraphQL资源版本号
多尝试多思考,一定会成功的
SpringBoot 1.5.X version
SpringBoot版本
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
<relativePath></relativePath><!-- lookup parent from repository -->
</parent>
在Maven的pom.xml
添加GraphQL依赖
<!--graphQL-->
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-spring-boot-starter</artifactId>
<version>3.10.0</version>
</dependency>
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-java-tools</artifactId>
<version>4.2.0</version>
</dependency>
<!--graphiQL-->
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphiql-spring-boot-starter</artifactId>
<version>3.10.0</version>
</dependency>
在Project总文件夹右键 -> Maven -> Update Project,刷新项目
在Project总文件夹右键 -> Run As -> Java Appliction,启动server,可能会报Kotlin错误
java.io.FileNotFoundException: /Users/lyudmila/.m2/repository/org/jetbrains/kotlin/kotlin-reflect/1.0.6/kotlin-runtime.jar (No such file or directory)
at java.util.zip.ZipFile.open(Native Method) ~[na:1.8.0_211]
at java.util.zip.ZipFile.<init>(ZipFile.java:225) ~[na:1.8.0_211]
at java.util.zip.ZipFile.<init>(ZipFile.java:155) ~[na:1.8.0_211]
at java.util.jar.JarFile.<init>(JarFile.java:166) ~[na:1.8.0_211]
at java.util.jar.JarFile.<init>(JarFile.java:130) ~[na:1.8.0_211]
at org.apache.tomcat.util.scan.JarFileUrlJar.<init>(JarFileUrlJar.java:60) ~[tomcat-embed-core-8.5.11.jar:8.5.11]
at org.apache.tomcat.util.scan.JarFactory.newInstance(JarFactory.java:48) ~[tomcat-embed-core-8.5.11.jar:8.5.11]
at org.apache.tomcat.util.scan.StandardJarScanner.process(StandardJarScanner.java:338) ~[tomcat-embed-core-8.5.11.jar:8.5.11]
at org.apache.tomcat.util.scan.StandardJarScanner.scan(StandardJarScanner.java:288) ~[tomcat-embed-core-8.5.11.jar:8.5.11]
at org.apache.jasper.servlet.TldScanner.scanJars(TldScanner.java:262) [tomcat-embed-jasper-8.5.11.jar:8.5.11]
at org.apache.jasper.servlet.TldScanner.scan(TldScanner.java:104) [tomcat-embed-jasper-8.5.11.jar:8.5.11]
at org.apache.jasper.servlet.JasperInitializer.onStartup(JasperInitializer.java:101) [tomcat-embed-jasper-8.5.11.jar:8.5.11]
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5178) [tomcat-embed-core-8.5.11.jar:8.5.11]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [tomcat-embed-core-8.5.11.jar:8.5.11]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1419) [tomcat-embed-core-8.5.11.jar:8.5.11]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409) [tomcat-embed-core-8.5.11.jar:8.5.11]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_211]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_211]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_211]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_211]
查看官方的GitHub会有解释
If you're using graphql-java-tools in combination with Spring Boot 2.1.x or below then you need to set the kotlin.version in your Spring Boot project explicitly to version 1.3.70, because Spring Boot Starter parent currently overrides it with a 1.2.* version of Kotlin. graphql-java-tools requires 1.3.* however because of its coroutine support. If you don't override this version you will run into a NoClassDefFoundError.
于是在properties添加Kotlin版本限制
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<kotlin.version>1.3.70</kotlin.version>
</properties>
重启打开浏览器的http://localhost:8080/graphiql,注意是graphiql,效果如下
![](https://img.haomeiwen.com/i23093184/cd0c912e2b96a020.png)
有时候右侧的运行结果框内会出现404错误
{
"timestamp": 1591338766541,
"status": 404,
"error": "Not Found",
"message": "No message available",
"path": "/graphql"
}
一般原因就是两个:
- GraphQL依赖还没有被更新到项目中
解决方法是多尝试Update Project并等待更新完成 - GraphQL版本不匹配当前环境
解决方法是变化GraphQL资源版本号
多尝试多思考,一定会成功的
Reference
hGraphQL简单学习之SpringBoot-1-简介和项目完整例子
GitHub - GraphQL and GraphiQL Spring Framework Boot Starters
Documentation - GraphQL and GraphiQL Spring Framework Boot Starters
网友评论