Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,12 @@
[libraries.spring-boot-starter-test.version]
ref = 'spring-boot'

[libraries.spring-boot-configuration-processor]
module = 'org.springframework.boot:spring-boot-configuration-processor'

[libraries.spring-boot-configuration-processor.version]
ref = 'spring-boot'

[libraries.vertx-core]
module = 'io.vertx:vertx-core'

Expand Down Expand Up @@ -237,6 +243,6 @@
protobuf = '4.29.3'
restate = '2.6.0-SNAPSHOT'
schema-kenerator = '2.1.2'
spring-boot = '3.4.9'
spring-boot = '3.5.10'
vertx = '4.5.22'
victools-json-schema = '4.38.0'
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ package dev.restate.sdk.springboot.kotlin

import com.fasterxml.jackson.databind.ObjectMapper
import dev.restate.sdk.core.generated.manifest.EndpointManifestSchema
import dev.restate.sdk.springboot.RestateEndpointConfiguration
import dev.restate.sdk.springboot.RestateHttpConfiguration
import dev.restate.sdk.springboot.RestateHttpEndpointBean
import java.io.IOException
import java.net.URI
Expand All @@ -22,7 +24,8 @@ import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest

@SpringBootTest(
classes = [RestateHttpEndpointBean::class, Greeter::class],
classes =
[RestateEndpointConfiguration::class, RestateHttpConfiguration::class, Greeter::class],
properties = ["restate.sdk.http.port=0"],
)
class RestateHttpEndpointBeanTest {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,31 @@

import com.fasterxml.jackson.databind.ObjectMapper;
import dev.restate.sdk.core.generated.manifest.EndpointManifestSchema;
import dev.restate.sdk.springboot.RestateEndpointConfiguration;
import dev.restate.sdk.springboot.RestateHttpConfiguration;
import dev.restate.sdk.springboot.RestateHttpEndpointBean;
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest(
classes = {RestateHttpEndpointBean.class, Greeter.class, Configuration.class},
properties = {"restate.sdk.http.port=0"})
classes = {
RestateEndpointConfiguration.class,
RestateHttpConfiguration.class,
Greeter.class,
ServicesConfiguration.class
},
properties = {
"restate.sdk.http.port=0",
"restate.components.greeter.journal-retention=PT48H",
"greetingPrefix=Hello "
})
public class RestateHttpEndpointBeanTest {

@Autowired private RestateHttpEndpointBean restateHttpEndpointBean;
Expand Down Expand Up @@ -56,7 +68,8 @@ public void httpEndpointShouldBeRunning() throws IOException, InterruptedExcepti
assertThat(endpointManifest.getServices())
.extracting(
dev.restate.sdk.core.generated.manifest.Service::getName,
dev.restate.sdk.core.generated.manifest.Service::getDocumentation)
.containsOnly(tuple("greeter", "blabla"));
dev.restate.sdk.core.generated.manifest.Service::getDocumentation,
dev.restate.sdk.core.generated.manifest.Service::getJournalRetention)
.containsOnly(tuple("greeter", "blabla", Duration.ofDays(2).toMillis()));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,17 @@
// https://github.com/restatedev/sdk-java/blob/main/LICENSE
package dev.restate.sdk.springboot.java;

import dev.restate.sdk.springboot.RestateServiceConfigurator;
import dev.restate.sdk.springboot.RestateComponentProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ServicesConfiguration {

public class Configuration {
@Bean
public RestateServiceConfigurator greeterConfiguration() {
return configurator -> configurator.documentation("blabla");
public RestateComponentProperties greeterConfiguration() {
var properties = new RestateComponentProperties();
properties.setDocumentation("blabla");
return properties;
}
}
3 changes: 3 additions & 0 deletions sdk-spring-boot/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ description = "Restate SDK Spring Boot integration"
dependencies {
compileOnly(libs.jspecify)

// This generates the metadata needed for the configuration properties
annotationProcessor(libs.spring.boot.configuration.processor)

val excludeJackson =
fun ProjectDependency.() {
// Let spring bring jackson in
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,9 @@
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import({RestateHttpEndpointBean.class, RestateClientAutoConfiguration.class})
@Import({
RestateEndpointConfiguration.class,
RestateHttpConfiguration.class,
RestateClientAutoConfiguration.class
})
public @interface EnableRestate {}
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,9 @@
@Component
public @interface RestateComponent {
/**
* Bean name to use to configure this component. The bean MUST be an instance of {@link
* RestateServiceConfigurator}.
* Bean name to use to configure this component.
*
* <p>The bean MUST be an instance of {@link RestateComponentProperties}.
*/
String configuration() default "";
}
Loading