本文有SpringBoot 2.1.X和SpringBoot 1.5.X兩種版本的安裝指導(dǎo)随常,想看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顯示官方所說(shuō)的7.0.1
并找不到垮抗,于是只好回到別的帖子試驗(yàn)成功的版本
<!--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匾效,刷新項(xiàng)目
在Project總文件夾右鍵 -> Run As -> Java Appliction,啟動(dòng)server
打開瀏覽器的http://localhost:8080/graphiql普筹,注意是graphiql败明,效果如下
有時(shí)候右側(cè)的運(yùn)行結(jié)果框內(nèi)會(huì)出現(xiàn)404錯(cuò)誤
{
"timestamp": 1591338766541,
"status": 404,
"error": "Not Found",
"message": "No message available",
"path": "/graphql"
}
一般原因就是兩個(gè):
- GraphQL依賴還沒(méi)有被更新到項(xiàng)目中
解決方法是多嘗試Update Project并等待更新完成 - GraphQL版本不匹配當(dāng)前環(huán)境
解決方法是變化GraphQL資源版本號(hào)
多嘗試多思考,一定會(huì)成功的
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太防,刷新項(xiàng)目
在Project總文件夾右鍵 -> Run As -> Java Appliction妻顶,啟動(dòng)server,可能會(huì)報(bào)Kotlin錯(cuò)誤
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會(huì)有解釋
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盈包,效果如下
有時(shí)候右側(cè)的運(yùn)行結(jié)果框內(nèi)會(huì)出現(xiàn)404錯(cuò)誤
{
"timestamp": 1591338766541,
"status": 404,
"error": "Not Found",
"message": "No message available",
"path": "/graphql"
}
一般原因就是兩個(gè):
- GraphQL依賴還沒(méi)有被更新到項(xiàng)目中
解決方法是多嘗試Update Project并等待更新完成 - GraphQL版本不匹配當(dāng)前環(huán)境
解決方法是變化GraphQL資源版本號(hào)
多嘗試多思考,一定會(huì)成功的
Reference
hGraphQL簡(jiǎn)單學(xué)習(xí)之SpringBoot-1-簡(jiǎn)介和項(xiàng)目完整例子
GitHub - GraphQL and GraphiQL Spring Framework Boot Starters
Documentation - GraphQL and GraphiQL Spring Framework Boot Starters