美文网首页程序员
SpringBoot配置使用GraphQL

SpringBoot配置使用GraphQL

作者: Lyudmilalala | 来源:发表于2020-06-06 16:32 被阅读0次

本文有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,效果如下

我的server port是自己改的6050
有时候右侧的运行结果框内会出现404错误
{
  "timestamp": 1591338766541,
  "status": 404,
  "error": "Not Found",
  "message": "No message available",
  "path": "/graphql"
}

一般原因就是两个:

  1. GraphQL依赖还没有被更新到项目中
    解决方法是多尝试Update Project并等待更新完成
  2. 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,效果如下

我的server port是自己改的6050
有时候右侧的运行结果框内会出现404错误
{
  "timestamp": 1591338766541,
  "status": 404,
  "error": "Not Found",
  "message": "No message available",
  "path": "/graphql"
}

一般原因就是两个:

  1. GraphQL依赖还没有被更新到项目中
    解决方法是多尝试Update Project并等待更新完成
  2. GraphQL版本不匹配当前环境
    解决方法是变化GraphQL资源版本号

多尝试多思考,一定会成功的

Reference

hGraphQL简单学习之SpringBoot-1-简介和项目完整例子
GitHub - GraphQL and GraphiQL Spring Framework Boot Starters
Documentation - GraphQL and GraphiQL Spring Framework Boot Starters

相关文章

网友评论

    本文标题:SpringBoot配置使用GraphQL

    本文链接:https://www.haomeiwen.com/subject/lbeazhtx.html