Dependency hygiene required by Spring Boot (#376)

This commit is contained in:
Chris Bono
2023-03-23 12:54:20 -05:00
committed by GitHub
parent 29cfd301c6
commit f282a9a6d9
7 changed files with 33 additions and 6 deletions

View File

@@ -6,15 +6,23 @@ description = 'Spring Pulsar Reactive Support'
dependencies {
api project (':spring-pulsar')
api 'org.apache.pulsar:pulsar-client-reactive-adapter'
api ('org.apache.pulsar:pulsar-client-reactive-adapter') {
// remove when reactive client updates to 2.11
exclude group: 'org.apache.pulsar', module: 'pulsar-client'
}
implementation 'com.fasterxml.jackson.core:jackson-core'
implementation 'com.fasterxml.jackson.core:jackson-databind'
implementation 'com.google.code.findbugs:jsr305'
optional 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8'
optional 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'
optional 'com.fasterxml.jackson.datatype:jackson-datatype-joda'
optional 'com.google.protobuf:protobuf-java'
optional 'com.jayway.jsonpath:json-path'
optional 'io.projectreactor:reactor-core'
optional ('org.apache.pulsar:pulsar-client-reactive-producer-cache-caffeine') {
// remove when reactive client updates to 2.11
exclude group: 'org.apache.pulsar', module: 'pulsar-client-reactive-adapter'
}
testImplementation project(':spring-pulsar-test')
testRuntimeOnly 'ch.qos.logback:logback-classic'

View File

@@ -12,6 +12,7 @@ dependencies {
optional project (':spring-pulsar')
optional project (':spring-pulsar-reactive')
optional 'com.github.ben-manes.caffeine:caffeine'
optional 'org.apache.pulsar:pulsar-client-reactive-producer-cache-caffeine'
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'com.google.code.findbugs:jsr305'

View File

@@ -51,6 +51,7 @@ import org.springframework.pulsar.function.PulsarSink;
import org.springframework.pulsar.function.PulsarSource;
import org.springframework.pulsar.observation.PulsarTemplateObservationConvention;
import com.github.benmanes.caffeine.cache.Caffeine;
import io.micrometer.observation.ObservationRegistry;
/**
@@ -88,6 +89,7 @@ public class PulsarAutoConfiguration {
@Bean
@ConditionalOnMissingBean
@ConditionalOnClass(Caffeine.class)
@ConditionalOnProperty(name = "spring.pulsar.producer.cache.enabled", havingValue = "true", matchIfMissing = true)
public PulsarProducerFactory<?> cachingPulsarProducerFactory(PulsarClient pulsarClient,
TopicResolver topicResolver) {

View File

@@ -35,6 +35,7 @@ import org.assertj.core.api.InstanceOfAssertFactories;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.test.context.FilteredClassLoader;
import org.springframework.boot.test.context.assertj.AssertableApplicationContext;
@@ -68,6 +69,7 @@ import org.springframework.pulsar.listener.PulsarContainerProperties;
import org.springframework.pulsar.observation.PulsarListenerObservationConvention;
import org.springframework.pulsar.observation.PulsarTemplateObservationConvention;
import com.github.benmanes.caffeine.cache.Caffeine;
import io.micrometer.observation.ObservationRegistry;
/**
@@ -498,6 +500,17 @@ class PulsarAutoConfigurationTests {
.run((context -> assertHasProducerFactoryOfType(CachingPulsarProducerFactory.class, context)));
}
@Test
void cachingEnabledButCaffeineNotOnClasspath() {
contextRunner.withClassLoader(new FilteredClassLoader(Caffeine.class))
.withPropertyValues("spring.pulsar.producer.cache.enabled=true")
.run((context -> assertThat(context).hasFailed().getFailure().cause()
.isInstanceOf(NoSuchBeanDefinitionException.class)
.asInstanceOf(InstanceOfAssertFactories.type(NoSuchBeanDefinitionException.class))
.extracting(NoSuchBeanDefinitionException::getBeanType)
.isEqualTo(PulsarProducerFactory.class)));
}
@Test
void cachingProducerFactoryCanBeConfigured() {
contextRunner

View File

@@ -7,5 +7,6 @@ description = 'Spring Pulsar Spring Boot Starter'
dependencies {
api project (':spring-pulsar')
api project (':spring-pulsar-spring-boot-autoconfigure')
api 'com.github.ben-manes.caffeine:caffeine'
api 'org.springframework.boot:spring-boot-starter'
}

View File

@@ -5,11 +5,11 @@ plugins {
description = 'Spring Pulsar Support'
dependencies {
api 'com.github.ben-manes.caffeine:caffeine'
api 'com.google.protobuf:protobuf-java'
api 'io.micrometer:micrometer-observation'
api ('org.apache.pulsar:pulsar-client-all') {
exclude group: 'org.apache.logging.log4j'
exclude group: 'com.sun.activation', module: 'javax.activation'
exclude group: 'javax.validation', module: 'validation-api'
}
api 'org.springframework:spring-context'
api 'org.springframework:spring-messaging'
@@ -23,6 +23,8 @@ dependencies {
optional 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8'
optional 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'
optional 'com.fasterxml.jackson.datatype:jackson-datatype-joda'
optional 'com.github.ben-manes.caffeine:caffeine'
optional 'com.google.protobuf:protobuf-java'
optional 'com.jayway.jsonpath:json-path'
testImplementation project(':spring-pulsar-test')

View File

@@ -42,8 +42,6 @@ import org.springframework.core.ResolvableType;
import org.springframework.core.log.LogAccessor;
import org.springframework.lang.Nullable;
import com.google.protobuf.GeneratedMessageV3;
/**
* Default schema resolver capable of handling basic message types.
*
@@ -178,8 +176,10 @@ public class DefaultSchemaResolver implements SchemaResolver {
case JSON -> JSONSchema.of(requireNonNullMessageType(schemaType, messageType));
case AVRO -> AvroSchema.of(requireNonNullMessageType(schemaType, messageType));
case PROTOBUF -> {
// WARN! Leave GeneratedMessageV3 fully-qualified as the dependency is
// optional
Class<?> messageClass = requireNonNullMessageType(schemaType, messageType);
yield ProtobufSchema.of((Class<? extends GeneratedMessageV3>) messageClass);
yield ProtobufSchema.of((Class<? extends com.google.protobuf.GeneratedMessageV3>) messageClass);
}
case KEY_VALUE -> {
requireNonNullMessageType(schemaType, messageType);