热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Springboot中apollokotlin基本使用(一个客户端使用多个graphql端点)

apollo-kotlin一、新建Springboot项目.├──build.gradle.kts└──src├──main│  ├──graphql│  │  ├──servic

apollo-kotlin


一、新建Springboot项目

.
├── build.gradle.kts
└── src
├── main
│   ├── graphql
│   │   ├── service1
│   │   │   ├── DemoQuery.graphql
│   │   │   └── schema.json
│   │   └── service2
│   │   ├── Demo2Query.graphql
│   │   └── schema.json
│   ├── java
│   ├── kotlin
│   │   └── com
│   │   └── demo
│   │   ├── GraphqlApplication.kt
│   │   ├── config
│   │   │   ├── ApolloClientConfig.kt
│   │   │   └── GraphqlProperties.kt
│   │   └── service
│   │   └── GraphqlApi.kt
│   └── resources
│   └── application.yml
└── test
├── java
├── kotlin
│   └── com
│   └── demo
│   └── XqxGraphqlApplicationTests.kt
└── resources

build.gradle.kts

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
id("com.xqx.java-conventions")
kotlin("jvm") version "1.6.21"
kotlin("plugin.spring") version "1.6.21"
id("com.apollographql.apollo3").version("3.5.0")
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter")
api("org.jetbrains.kotlin:kotlin-reflect")
api("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
api("org.jetbrains.kotlinx:kotlinx-coroutines-jdk8")
api("com.apollographql.apollo3:apollo-runtime:3.5.0")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
apollo {
// 如果一个客户端需要调用不同的graphql端点时可以配置多个服务(这个多服务配置不是必须的)
generateKotlinModels.set(false)
// graphql端点一
service("service1") {
srcDir("src/main/graphql/service1")
packageName.set("com.demo.graphql.service1")
}
// graphql端点一
service("service2") {
srcDir("src/main/graphql/service1")
packageName.set("com.demo.graphql.service1")
}
}

ApolloClientConfig.kt

/**
* graphql 客户端配置
*/
@Configuration
class ApolloClientConfig(@Autowired val graphqlProperties: GraphqlProperties) {
@Bean
fun service1ApolloClient(): ApolloClient {
val apolloClient = ApolloClient.Builder()
.serverUrl("https://your.domain1/graphql/endpoint")
.build()
return apolloClient
}
@Bean
fun service2ApolloClient(): ApolloClient {
val apolloClient = ApolloClient.Builder()
.serverUrl("https://your.domain2/graphql/endpoint")
.build()
return apolloClient
}
}

GraphqlApi.kt

/**
* 调用接口
*/
class GraphqlApi(@Autowired val service1ApolloClient: ApolloClient,
@Autowired val service2ApolloClient: ApolloClient) {
fun fetchService1() {
// 使用service1ApolloClient调用
service1ApolloClient...
}
@Bean
fun fetchService2() {
// 使用service2ApolloClient调用
try {
val respOnse= service2ApolloClient.query(query).execute()
} catch(exception: ApolloException) {
// handle exception here
}
}
}

二、下载schema文件

方式一:使用gradle插件下载

# 端点一
./gradlew downloadApolloSchema \
--endpoint="https://your.domain/graphql/endpoint" \
--schema="src/main/graphql/service1/schema.graphqls"
# 端点二
./gradlew downloadApolloSchema \
--endpoint="https://your.domain/graphql/endpoint" \
--schema="src/main/graphql/service1/schema.graphqls"

方式二:使用apollo-js工具下载

npm install -g apollp
npm install -g graphql
# 端点一
apollo schema:download --endpoint=http://server1/graphql schema.json
# 端点二
apollo schema:download --endpoint=http://server2/graphql schema.json

三、自动生成代码

gradle插件定义了generateApolloSources任务,通过运行generateApolloSources任务会自动生成代码到srcDir下。运行项目build的时候会自动运行generateApolloSources任务。



推荐阅读
  • SpringBoot底层注解用法及原理
    2.1、组件添加1、Configuration基本使用Full模式与Lite模式示例最佳实战配置类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断配置类组 ... [详细]
  • 本文介绍了如何在Spring框架中配置和使用定时任务,包括初始化配置和动态启动定时器的方法。通过示例代码展示了如何利用Spring的TaskScheduler接口来创建和管理定时任务。 ... [详细]
  • 本文介绍了多种Eclipse插件,包括XML Schema Infoset Model (XSD)、Graphical Editing Framework (GEF)、Eclipse Modeling Framework (EMF)等,涵盖了从Web开发到图形界面编辑的多个方面。 ... [详细]
  • 这个报错出现在userDao里面,sessionfactory没有注入。解决办法:spring整合Hibernate使用test测试时要把spring.xml和spring-hib ... [详细]
  • 本文详细介绍如何在Spring Boot项目中集成和使用JPA,涵盖JPA的基本概念、Spring Data JPA的功能以及具体的操作步骤,帮助开发者快速掌握这一强大的持久化技术。 ... [详细]
  • 深入解析Nacos服务自动注册机制
    本文将探讨Nacos服务自动注册的具体实现方法,特别是如何通过Spring事件机制完成服务注册。通过对Nacos源码的详细分析,帮助读者理解其背后的原理。 ... [详细]
  • 深入解析Spring Boot项目的启动机制
    在Java后端开发中,Spring Boot框架以其简洁性和强大的功能受到了广泛欢迎。本文将探讨Spring Boot项目启动的核心——SpringApplication类及其run()方法的工作原理。 ... [详细]
  • 本文档提供了详细的MySQL安装步骤,包括解压安装文件、选择安装类型、配置MySQL服务以及设置管理员密码等关键环节,帮助用户顺利完成MySQL的安装。 ... [详细]
  • 本文详细探讨了 Java 中 com.codahale.metrics.servlets.AdminServlet.() 方法的实现与应用,并提供了多个实际项目中的代码示例,帮助开发者更好地理解和使用这一方法。 ... [详细]
  • Golang与微服务架构:构建高效微服务
    本文探讨了Golang在微服务架构中的应用,包括Golang的基本概念、微服务开发的优势、常用开发工具以及具体实践案例。 ... [详细]
  • 本文详细介绍了Spring AOP注解的基本概念及其实现方式,并通过实例演示了如何在项目中使用这些注解进行面向切面的编程。旨在帮助开发者更好地理解和运用Spring AOP功能。 ... [详细]
  • 本文探讨了一个在Spring项目中常见的问题——当pom.xml文件中引入了servlet依赖但未指定其作用域为provided时导致的应用启动失败。文章详细分析了错误原因,并提供了有效的解决方案。 ... [详细]
  • 本文详细记录了一位Java程序员在Lazada的面试经历,涵盖同步机制、JVM调优、Redis应用、线程池配置、Spring框架特性等多个技术点,以及高级面试中的设计问题和解决方案。 ... [详细]
  • 微服务自动化.dockercompose
    目录一、docker-compose二、docker-compose安装与配置1、修改docker.service2、下载文件3、将刚才下载的docker-compose文 ... [详细]
  • Java高级工程师学习路径及面试准备指南
    本文基于一位朋友的PDF面试经验整理,涵盖了Java高级工程师所需掌握的核心知识点,包括数据结构与算法、计算机网络、数据库、操作系统等多个方面,并提供了详细的参考资料和学习建议。 ... [详细]
author-avatar
pfm4191006
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有