背景:基于上篇springboot集成jooq继续
GraphQL Playgroundhttps://github.com/prisma-labs/graphql-playground/releases
一、pom.xml文件引入相关依赖
<dependency>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>graphql-spring-boot-starter</artifactId>
<version>5.10.0</version>
</dependency>
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-java</artifactId>
<version>2019-10-31T04-37-48-0919e71</version>
</dependency>
<!-- 图形化界面graphiql-spring-boot-starter -->
<dependency>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>graphiql-spring-boot-starter</artifactId>
<version>5.10.0</version>
</dependency>
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-java-spring-boot-starter-webmvc</artifactId>
<version>2019-06-24T11-47-27-31ab4f9</version>
</dependency>
二、配置文件修改
1. application.yml增加服务配置
server:
port: 8088
#指定项目服务路径
servlet:
context-path: /api/v1
2. 在资源文件夹src/main/resources目录下添加文件company.graphqls
schema {
query: CompanyQuery
}
type CompanyQuery {
companyById(id: ID): Company
}
type Company {
id: ID
name: String
age: Int
address: String
salary: Float
joinDate: String
}
三配置GraphQLProvider,注册GraphQL
package com.zsx.graphql;
import com.google.common.base.Charsets;
import com.google.common.io.Resources;
import graphql.GraphQL;
import graphql.schema.GraphQLSchema;
import graphql.schema.idl.RuntimeWiring;
import graphql.schema.idl.SchemaGenerator;
import graphql.schema.idl.SchemaParser;
import graphql.schema.idl.TypeDefinitionRegistry;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.io.IOException;
import java.net.URL;
import static graphql.schema.idl.TypeRuntimeWiring.newTypeWiring;
@Component
public class CompanyGraphQLProvider {
private GraphQL graphQL;
@Autowired
private CompanyGraphQLDataFetchers graphQLDataFetchers;
@Bean
public GraphQL graphQL() {
return graphQL;
}
@PostConstruct
public void init() throws IOException {
URL url = Resources.getResource("company.graphqls");
String sdl = Resources.toString(url, Charsets.UTF_8);
GraphQLSchema graphQLSchema = buildSchema(sdl);
this.graphQL = GraphQL.newGraphQL(graphQLSchema).build();
}
private GraphQLSchema buildSchema(String sdl) {
// TODO: we will create the schema here later
TypeDefinitionRegistry typeRegistry = new SchemaParser().parse(sdl);
RuntimeWiring runtimeWiring = buildWiring();
SchemaGenerator schemaGenerator = new SchemaGenerator();
return schemaGenerator.makeExecutableSchema(typeRegistry, runtimeWiring);
}
private RuntimeWiring buildWiring() {
return RuntimeWiring.newRuntimeWiring()
.type(newTypeWiring("CompanyQuery")
.dataFetcher("companyById", graphQLDataFetchers.getCompanyByIdDataFetcher()))
.build();
}
}
四、配置GraphQLDataFetchers
package com.zsx.graphql;
import com.zsx.entity.Company;
import com.zsx.service.CompanyService;
import graphql.schema.DataFetcher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class CompanyGraphQLDataFetchers {
@Autowired
private CompanyService companyService;
public DataFetcher getCompanyByIdDataFetcher() {
List<Company> companies = companyService.getCompanies();
return dataFetchingEnvironment -> {
Long companyId = Long.valueOf(dataFetchingEnvironment.getArgument("id"));
return companies
.stream()
.filter(company -> company.getId().equals(companyId))
.findFirst()
.orElse(null);
};
}
}
五、编写业务接口
pac