Skip to content
This repository was archived by the owner on Dec 19, 2023. It is now read-only.

Commit aba616d

Browse files
authored
Merge pull request #259 from Blemicek/master
Allowed auto configuration with custom schema provider (fixes #192)
2 parents 5500517 + a4d92c4 commit aba616d

File tree

4 files changed

+44
-5
lines changed

4 files changed

+44
-5
lines changed

graphql-spring-boot-autoconfigure/src/main/java/com/oembedler/moon/graphql/boot/GraphQLWebAutoConfiguration.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@
5151
import org.springframework.beans.factory.ObjectProvider;
5252
import org.springframework.beans.factory.annotation.Autowired;
5353
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
54-
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
5554
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
5655
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
5756
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -60,6 +59,7 @@
6059
import org.springframework.boot.context.properties.EnableConfigurationProperties;
6160
import org.springframework.boot.web.servlet.ServletRegistrationBean;
6261
import org.springframework.context.annotation.Bean;
62+
import org.springframework.context.annotation.Conditional;
6363
import org.springframework.context.annotation.Configuration;
6464
import org.springframework.web.cors.CorsConfiguration;
6565
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
@@ -83,7 +83,7 @@
8383
@Configuration
8484
@ConditionalOnWebApplication
8585
@ConditionalOnClass(DispatcherServlet.class)
86-
@ConditionalOnBean({GraphQLSchema.class})
86+
@Conditional(OnSchemaOrSchemaProviderBean.class)
8787
@ConditionalOnProperty(value = "graphql.servlet.enabled", havingValue = "true", matchIfMissing = true)
8888
@AutoConfigureAfter({GraphQLJavaToolsAutoConfiguration.class, JacksonAutoConfiguration.class})
8989
@EnableConfigurationProperties({GraphQLServletProperties.class})

graphql-spring-boot-autoconfigure/src/main/java/com/oembedler/moon/graphql/boot/GraphQLWebsocketAutoConfiguration.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.oembedler.moon.graphql.boot;
22

3-
import graphql.schema.GraphQLSchema;
43
import graphql.servlet.ApolloSubscriptionConnectionListener;
54
import graphql.servlet.GraphQLInvocationInputFactory;
65
import graphql.servlet.GraphQLObjectMapper;
@@ -13,6 +12,7 @@
1312
import org.springframework.boot.autoconfigure.condition.*;
1413
import org.springframework.boot.context.properties.EnableConfigurationProperties;
1514
import org.springframework.context.annotation.Bean;
15+
import org.springframework.context.annotation.Conditional;
1616
import org.springframework.context.annotation.Configuration;
1717
import org.springframework.web.servlet.DispatcherServlet;
1818
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
@@ -26,7 +26,7 @@
2626
@Configuration
2727
@ConditionalOnWebApplication
2828
@ConditionalOnClass(DispatcherServlet.class)
29-
@ConditionalOnBean({GraphQLSchema.class})
29+
@Conditional(OnSchemaOrSchemaProviderBean.class)
3030
@ConditionalOnProperty(value = "graphql.servlet.websocket.enabled", havingValue = "true", matchIfMissing = true)
3131
@AutoConfigureAfter({GraphQLJavaToolsAutoConfiguration.class})
3232
@EnableConfigurationProperties(GraphQLSubscriptionApolloProperties.class)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.oembedler.moon.graphql.boot;
2+
3+
import graphql.schema.GraphQLSchema;
4+
import graphql.servlet.GraphQLSchemaProvider;
5+
import org.springframework.boot.autoconfigure.condition.AnyNestedCondition;
6+
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
7+
8+
class OnSchemaOrSchemaProviderBean extends AnyNestedCondition {
9+
public OnSchemaOrSchemaProviderBean() {
10+
super(ConfigurationPhase.REGISTER_BEAN);
11+
}
12+
13+
@ConditionalOnBean(GraphQLSchema.class)
14+
static class OnSchema {
15+
}
16+
17+
@ConditionalOnBean(GraphQLSchemaProvider.class)
18+
static class OnSchemaProvider {
19+
}
20+
}

graphql-spring-boot-autoconfigure/src/test/java/com/oembedler/moon/graphql/boot/test/web/GraphQLWebAutoConfigurationTest.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import graphql.schema.GraphQLObjectType;
1111
import graphql.schema.GraphQLSchema;
1212
import graphql.servlet.AbstractGraphQLHttpServlet;
13+
import graphql.servlet.DefaultGraphQLSchemaProvider;
14+
import graphql.servlet.GraphQLSchemaProvider;
1315
import org.junit.Assert;
1416
import org.junit.Test;
1517
import org.springframework.context.annotation.Bean;
@@ -25,12 +27,14 @@ public GraphQLWebAutoConfigurationTest() {
2527
super(AnnotationConfigWebApplicationContext.class, GraphQLWebAutoConfiguration.class);
2628
}
2729

30+
private static final GraphQLSchema SCHEMA = GraphQLSchema.newSchema().query(GraphQLObjectType.newObject().name("Query").build()).build();
31+
2832
@Configuration
2933
static class SimpleConfiguration {
3034

3135
@Bean
3236
GraphQLSchema schema() {
33-
return GraphQLSchema.newSchema().query(GraphQLObjectType.newObject().name("Query").build()).build();
37+
return SCHEMA;
3438
}
3539

3640
}
@@ -143,4 +147,19 @@ public void appContextLoadsWithMultipleInstrumentations() {
143147

144148
Assert.assertNotNull(this.getContext().getBean(AbstractGraphQLHttpServlet.class));
145149
}
150+
151+
@Configuration
152+
static class SchemaProviderConfiguration {
153+
@Bean
154+
GraphQLSchemaProvider schemaProvider() {
155+
return new DefaultGraphQLSchemaProvider(SCHEMA);
156+
}
157+
}
158+
159+
@Test
160+
public void appContextLoadsWithCustomSchemaProvider() {
161+
load(SchemaProviderConfiguration.class);
162+
163+
Assert.assertNotNull(this.getContext().getBean(AbstractGraphQLHttpServlet.class));
164+
}
146165
}

0 commit comments

Comments
 (0)