Skip to content

Commit

Permalink
Remove custom VirtualThreadTaskExecutor
Browse files Browse the repository at this point in the history
Switch to using the VirtualThreadTaskExecutor implementation from Spring, and existing
conditional annotations from Spring Boot.
  • Loading branch information
kilink committed Aug 1, 2024
1 parent 093bb41 commit d43bca7
Show file tree
Hide file tree
Showing 12 changed files with 145 additions and 2,353 deletions.
6 changes: 3 additions & 3 deletions graphql-dgs-example-java/dependencies.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 8 additions & 8 deletions graphql-dgs-spring-boot-micrometer/dependencies.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import com.netflix.graphql.dgs.DgsDataLoaderOptionsProvider
import com.netflix.graphql.dgs.DgsDefaultPreparsedDocumentProvider
import com.netflix.graphql.dgs.DgsFederationResolver
import com.netflix.graphql.dgs.DgsQueryExecutor
import com.netflix.graphql.dgs.conditionals.ConditionalOnJava21
import com.netflix.graphql.dgs.context.DgsCustomContextBuilder
import com.netflix.graphql.dgs.context.DgsCustomContextBuilderWithRequest
import com.netflix.graphql.dgs.context.GraphQLContextContributor
Expand Down Expand Up @@ -59,18 +58,21 @@ import org.springframework.beans.factory.annotation.Qualifier
import org.springframework.boot.autoconfigure.AutoConfiguration
import org.springframework.boot.autoconfigure.ImportAutoConfiguration
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass
import org.springframework.boot.autoconfigure.condition.ConditionalOnJava
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration
import org.springframework.boot.context.properties.EnableConfigurationProperties
import org.springframework.boot.system.JavaVersion
import org.springframework.context.ApplicationContext
import org.springframework.context.annotation.Bean
import org.springframework.core.DefaultParameterNameDiscoverer
import org.springframework.core.PriorityOrdered
import org.springframework.core.annotation.Order
import org.springframework.core.env.Environment
import org.springframework.core.task.AsyncTaskExecutor
import org.springframework.core.task.VirtualThreadTaskExecutor
import org.springframework.http.HttpHeaders
import org.springframework.mock.web.MockHttpServletRequest
import org.springframework.web.context.request.NativeWebRequest
Expand All @@ -84,7 +86,6 @@ import java.util.concurrent.ScheduledExecutorService
* Framework auto configuration based on open source Spring only, without Netflix integrations.
* This does NOT have logging, tracing, metrics and security integration.
*/
@Suppress("SpringJavaInjectionPointsAutowiringInspection")
@AutoConfiguration(afterName = ["org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration"])
@EnableConfigurationProperties(DgsConfigurationProperties::class, DgsDataloaderConfigurationProperties::class)
@ImportAutoConfiguration(classes = [JacksonAutoConfiguration::class, DgsInputArgumentConfiguration::class])
Expand Down Expand Up @@ -364,13 +365,16 @@ open class DgsAutoConfiguration(
*/
@Bean
@Qualifier("dgsAsyncTaskExecutor")
@ConditionalOnJava21
@ConditionalOnJava(JavaVersion.TWENTY_ONE)
@ConditionalOnMissingBean(name = ["dgsAsyncTaskExecutor"])
@ConditionalOnProperty(name = ["dgs.graphql.virtualthreads.enabled"], havingValue = "true", matchIfMissing = false)
open fun virtualThreadsTaskExecutor(contextRegistry: ContextRegistry): AsyncTaskExecutor {
LOG.info("Enabling virtual threads for DGS")
val contextSnapshotFactory = ContextSnapshotFactory.builder().contextRegistry(contextRegistry).build()
return VirtualThreadTaskExecutor(contextSnapshotFactory)
val executor = VirtualThreadTaskExecutor("dgs-virtual-thread-")
return AsyncTaskExecutor { task ->
executor.submit(contextSnapshotFactory.captureAll().wrap(task))
}
}

@Bean
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import org.springframework.boot.context.properties.bind.DefaultValue
* Configuration properties for DGS framework.
*/
@ConfigurationProperties(prefix = DgsConfigurationProperties.PREFIX)
@Suppress("ConfigurationProperties")
data class DgsConfigurationProperties(
/** Location of the GraphQL schema files. */
@DefaultValue(DEFAULT_SCHEMA_LOCATION) val schemaLocations: List<String>,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import java.time.Duration
* Configuration properties for DGS framework.
*/
@ConfigurationProperties(prefix = DgsDataloaderConfigurationProperties.DATALOADER_PREFIX)
@Suppress("ConfigurationProperties")
data class DgsDataloaderConfigurationProperties(
@DefaultValue("false") val tickerModeEnabled: Boolean,
@DefaultValue(DATALOADER_DEFAULT_SCHEDULE_DURATION) val scheduleDuration: Duration
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,18 @@ package com.netflix.graphql.dgs.autoconfig

import com.netflix.graphql.dgs.internal.DefaultInputObjectMapper
import com.netflix.graphql.dgs.internal.InputObjectMapper
import com.netflix.graphql.dgs.internal.method.*
import com.netflix.graphql.dgs.internal.method.ArgumentResolver
import com.netflix.graphql.dgs.internal.method.ContinuationArgumentResolver
import com.netflix.graphql.dgs.internal.method.DataFetchingEnvironmentArgumentResolver
import com.netflix.graphql.dgs.internal.method.FallbackEnvironmentArgumentResolver
import com.netflix.graphql.dgs.internal.method.InputArgumentResolver
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.core.Ordered
import org.springframework.core.annotation.Order

@Configuration
@Configuration(proxyBeanMethods = false)
open class DgsInputArgumentConfiguration {
@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions graphql-dgs-spring-graphql-example-java/dependencies.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 0 additions & 11 deletions graphql-dgs/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
plugins {
id("me.champeau.mrjar")
}

multiRelease {
targetVersions(17, 21)
}

dependencies {

api(project(":graphql-error-types"))
Expand All @@ -34,7 +26,6 @@ dependencies {

implementation("org.springframework:spring-web")
implementation("org.springframework:spring-context")
"java21Implementation"("org.springframework:spring-context")

compileOnly("org.springframework.security:spring-security-core")
compileOnly("io.projectreactor:reactor-core")
Expand All @@ -47,8 +38,6 @@ dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-reactor")
implementation("io.micrometer:context-propagation")
"java21Implementation"("io.micrometer:context-propagation:1.1.1") //Version should come from our BOM, but this doesn't work with the multi release JAR plugin.


testImplementation("org.springframework.security:spring-security-core")
testImplementation("io.projectreactor:reactor-core")
Expand Down
Loading

0 comments on commit d43bca7

Please sign in to comment.