Skip to content
Draft
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
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ The Spring Data OpenSearch follows the release model of the Spring Data Elastics

| Spring Data Release Train | Spring Data OpenSearch | Spring Data Elasticsearch | OpenSearch Server | OpenSearch Client | Spring Framework | Spring Boot | JDK |
|---------------------------|------------------------|----------------------------|-------------------|---------------------|------------------|----------------|-----------------------|
| 2025.1 | 3.0.x | 6.0.x | 2.x / 3.x | 3.0.x and above | 7.0.x | 4.0.x | 21+ |
| 2025.0 | 2.0.x | 5.5.x | 2.x / 3.x | 3.0.x and above | 6.2.x | 3.5.x | 21+ |
| 2025.0 | 1.8.x | 5.5.x | 1.x / 2.x / 3.x | 2.10.x and above | 6.2.x | 3.5.x | 17+ |
| 2025.0 | 1.7.x | 5.5.x | 1.x / 2.x / 3.x | 2.10.x and above | 6.2.x | 3.5.x | 17+ |
Expand Down
24 changes: 16 additions & 8 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,17 @@ rootProject.name = "spring-data-opensearch-parent"
dependencyResolutionManagement {
versionCatalogs {
create("libs") {
version("jupiter", "6.0.0")
version("launcher", "6.0.0")
version("jupiter", "6.0.1")
library("jupiter", "org.junit.jupiter", "junit-jupiter").versionRef("jupiter")
library("jupiter-params", "org.junit.jupiter", "junit-jupiter-params").versionRef("jupiter")
library("junit-platform-launcher", "org.junit.platform", "junit-platform-launcher").versionRef("launcher")
library("junit-platform-launcher", "org.junit.platform", "junit-platform-launcher").versionRef("jupiter")
}

create("springLibs") {
version("spring", "6.2.12")
version("spring-boot", "3.5.6")
library("data-commons", "org.springframework.data:spring-data-commons:3.5.5")
library("data-elasticsearch", "org.springframework.data:spring-data-elasticsearch:5.5.5")
version("spring", "7.0.0-RC3")
version("spring-boot", "4.0.0-RC1")
library("data-commons", "org.springframework.data:spring-data-commons:4.0.0-RC2")
library("data-elasticsearch", "org.springframework.data:spring-data-elasticsearch:6.0.0-RC2")
library("web", "org.springframework", "spring-web").versionRef("spring")
library("webflux", "org.springframework", "spring-webflux").versionRef("spring")
library("context", "org.springframework", "spring-context").versionRef("spring")
Expand All @@ -29,10 +28,13 @@ dependencyResolutionManagement {
library("boot-webflux", "org.springframework.boot", "spring-boot-starter-webflux").versionRef("spring-boot")
library("boot-autoconfigure", "org.springframework.boot", "spring-boot-autoconfigure").versionRef("spring-boot")
library("boot-docker-compose", "org.springframework.boot", "spring-boot-docker-compose").versionRef("spring-boot")
library("boot-elasticsearch", "org.springframework.boot", "spring-boot-elasticsearch").versionRef("spring-boot")
library("boot-data-elasticsearch", "org.springframework.boot", "spring-boot-data-elasticsearch").versionRef("spring-boot")
library("boot-test", "org.springframework.boot", "spring-boot-test").versionRef("spring-boot")
library("boot-test-autoconfigure", "org.springframework.boot", "spring-boot-test-autoconfigure").versionRef("spring-boot")
library("boot-test-cache", "org.springframework.boot", "spring-boot-cache-test").versionRef("spring-boot")
library("boot-testcontainers", "org.springframework.boot", "spring-boot-testcontainers").versionRef("spring-boot")
library("projectreactor", "io.projectreactor:reactor-test:3.7.12")
library("projectreactor", "io.projectreactor:reactor-test:3.8.0-RC1")
plugin("spring-boot", "org.springframework.boot").versionRef("spring-boot")
}

Expand Down Expand Up @@ -77,12 +79,18 @@ pluginManagement {
maven {
url = uri("https://repo.spring.io/release/")
}
maven {
url = uri("https://repo.spring.io/milestone/")
}
}
}

dependencyResolutionManagement {
repositories {
mavenCentral()
maven {
url = uri("https://repo.spring.io/milestone/")
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration;
import org.springframework.boot.data.elasticsearch.autoconfigure.DataElasticsearchAutoConfiguration;

@SpringBootApplication(exclude = ElasticsearchDataAutoConfiguration.class)
@SpringBootApplication(exclude = DataElasticsearchAutoConfiguration.class)
public class MarketplaceApplication {
public static void main(String[] args) {
SpringApplication.run(MarketplaceConfiguration.class, args);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration;
import org.springframework.boot.data.elasticsearch.autoconfigure.DataElasticsearchAutoConfiguration;

@SpringBootApplication(exclude = ElasticsearchDataAutoConfiguration.class)
@SpringBootApplication(exclude = DataElasticsearchAutoConfiguration.class)
public class MarketplaceApplication {
public static void main(String[] args) {
SpringApplication.run(MarketplaceConfiguration.class, args);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration;
import org.springframework.boot.data.elasticsearch.autoconfigure.DataElasticsearchAutoConfiguration;

@SpringBootApplication(exclude = ElasticsearchDataAutoConfiguration.class)
@SpringBootApplication(exclude = DataElasticsearchAutoConfiguration.class)
public class MarketplaceApplication {
public static void main(String[] args) {
SpringApplication.run(MarketplaceConfiguration.class, args);
Expand Down
2 changes: 2 additions & 0 deletions spring-data-opensearch-starter/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ buildscript {
dependencies {
api(springLibs.boot.autoconfigure)
api(project(":spring-data-opensearch"))
api(springLibs.boot.data.elasticsearch)
api(springLibs.boot.elasticsearch)
implementation(opensearchLibs.client) {
exclude("commons-logging", "commons-logging")
exclude("org.slf4j", "slf4j-api")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration;
import org.springframework.context.annotation.Import;

/**
* {@link EnableAutoConfiguration Auto-configuration} for OpenSearch's Java client.
*/
@AutoConfiguration(after = { JsonbAutoConfiguration.class, OpenSearchRestClientAutoConfiguration.class })
@AutoConfiguration(after = { OpenSearchRestClientAutoConfiguration.class },
afterName = { "org.springframework.boot.jsonb.autoconfigure.JsonbAutoConfiguration" })
@ConditionalOnBean(RestClient.class)
@ConditionalOnClass(OpenSearchClient.class)
@Import({ JsonpMapperConfiguration.class, OpenSearchTransportConfiguration.class, OpenSearchClientConfiguration.class })
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchProperties.Restclient;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.elasticsearch.autoconfigure.ElasticsearchProperties.Restclient;

/**
* OpenSearch client configuration properties.
*
* Adaptation of the {@link org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchProperties} to
* Adaptation of the {@link org.springframework.boot.elasticsearch.autoconfigure.ElasticsearchProperties} to
* the needs of OpenSearch.
*/
@ConfigurationProperties("opensearch")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
/**
* {@link EnableAutoConfiguration Auto-configuration} for OpenSearch REST clients.
*
* Adaptation of the {@link org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration} to
* Adaptation of the {@link org.springframework.boot.elasticsearch.autoconfigure.ElasticsearchRestClientAutoConfiguration} to
* the needs of OpenSearch.
*/
@AutoConfiguration
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import java.net.URI;
import java.net.URISyntaxException;
import java.time.Duration;
import java.util.Objects;
import javax.net.ssl.SSLContext;
import org.apache.hc.client5.http.auth.AuthScope;
import org.apache.hc.client5.http.auth.Credentials;
Expand Down Expand Up @@ -56,7 +57,7 @@ static class RestClientBuilderConfiguration {
}

@Bean
RestClientBuilderCustomizer defaultRestClientBuilderCustomizer(OpenSearchProperties properties, ObjectProvider<SslBundles> sslBundles) {
RestClientBuilderCustomizer defaultOpensearchRestClientBuilderCustomizer(OpenSearchProperties properties, ObjectProvider<SslBundles> sslBundles) {
return new DefaultRestClientBuilderCustomizer(properties, this.connectionDetails, sslBundles);
}

Expand Down Expand Up @@ -132,7 +133,7 @@ static class RestClientSnifferConfiguration {
@ConditionalOnMissingBean
Sniffer opensearchSniffer(RestClient client, OpenSearchProperties properties) {
SnifferBuilder builder = Sniffer.builder(client);
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
PropertyMapper map = PropertyMapper.get();
Duration interval = properties.getRestclient().getSniffer().getInterval();
map.from(interval).asInt(Duration::toMillis).to(builder::setSniffIntervalMillis);
Duration delayAfterFailure = properties.getRestclient().getSniffer().getDelayAfterFailure();
Expand Down Expand Up @@ -176,12 +177,12 @@ public void customize(HttpAsyncClientBuilder builder) {
@Override
public void customize(RequestConfig.Builder builder) {
map.from(this.properties::getConnectionTimeout)
.whenNonNull()
.whenNot(Objects::isNull)
.asInt(Duration::toMillis)
.as(Timeout::ofMilliseconds)
.to(builder::setConnectTimeout);
map.from(this.properties::getConnectionTimeout)
.whenNonNull()
.whenNot(Objects::isNull)
.asInt(Duration::toMillis)
.as(Timeout::ofMilliseconds)
.to(builder::setConnectionRequestTimeout);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
* {@link org.opensearch.client.RestClient} via a {@link RestClientBuilder} whilst
* retaining default auto-configuration.
*
* Adaptation of the {@link org.springframework.boot.autoconfigure.elasticsearch.RestClientBuilderCustomizer} to
* Adaptation of the {@link org.springframework.boot.elasticsearch.autoconfigure.Rest5ClientBuilderCustomizer} to
* the needs of OpenSearch.
*/
@FunctionalInterface
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
/**
* {@link EnableAutoConfiguration Auto-configuration} for Spring Data's OpenSearch support.
*
* Adaptation of the {@link org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration} to
* Adaptation of the {@link org.springframework.boot.data.elasticsearch.autoconfigure.DataElasticsearchAutoConfiguration} to
* the needs of OpenSearch.
*/
@AutoConfiguration(after = {OpenSearchClientAutoConfiguration.class, OpenSearchRestClientAutoConfiguration.class})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.domain.EntityScanner;
import org.springframework.boot.persistence.autoconfigure.EntityScanner;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@
import org.opensearch.client.sniff.Sniffer;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration;
import org.springframework.boot.autoconfigure.ssl.SslAutoConfiguration;
import org.springframework.boot.elasticsearch.autoconfigure.ElasticsearchRestClientAutoConfiguration;
import org.springframework.boot.test.context.FilteredClassLoader;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.context.annotation.Bean;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.boot.autoconfigure.AutoConfigurationPackages;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration;
import org.springframework.boot.data.elasticsearch.autoconfigure.DataElasticsearchRepositoriesAutoConfiguration;
import org.springframework.boot.test.context.FilteredClassLoader;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.context.annotation.Configuration;
Expand Down Expand Up @@ -56,7 +56,7 @@ class OpenSearchDataAutoConfigurationIntegrationTests extends AbstractOpenSearch
void defaultRepositoryConfiguration() {
this.contextRunner
.withUserConfiguration(TestConfiguration.class)
.withConfiguration(AutoConfigurations.of(ElasticsearchRepositoriesAutoConfiguration.class))
.withConfiguration(AutoConfigurations.of(DataElasticsearchRepositoriesAutoConfiguration.class))
.run((context) -> assertThat(context)
.doesNotHaveBean(OpenSearchTemplate.class)
.hasSingleBean(ProductOpenSearchRepository.class)
Expand All @@ -68,7 +68,7 @@ void javaClientRepositoryConfiguration() {
this.contextRunner
.withClassLoader(new FilteredClassLoader(RestHighLevelClient.class))
.withUserConfiguration(TestConfiguration.class)
.withConfiguration(AutoConfigurations.of(OpenSearchClientAutoConfiguration.class, ElasticsearchRepositoriesAutoConfiguration.class))
.withConfiguration(AutoConfigurations.of(OpenSearchClientAutoConfiguration.class, DataElasticsearchRepositoriesAutoConfiguration.class))
.run((context) -> assertThat(context)
.hasSingleBean(OpenSearchTemplate.class)
.hasSingleBean(ProductOpenSearchRepository.class));
Expand All @@ -94,15 +94,15 @@ void noRepositoryConfiguration() {
.withInitializer(context -> AutoConfigurationPackages.register(
(BeanDefinitionRegistry) context.getBeanFactory(),
"org.opensearch.spring.boot.autoconfigure.data.empty"))
.withConfiguration(AutoConfigurations.of(ElasticsearchRepositoriesAutoConfiguration.class))
.withConfiguration(AutoConfigurations.of(DataElasticsearchRepositoriesAutoConfiguration.class))
.run((context) -> assertThat(context).hasSingleBean(OpenSearchRestTemplate.class));
}

@Test
void doesNotTriggerDefaultRepositoryDetectionIfCustomized() {
this.contextRunner
.withUserConfiguration(CustomizedConfiguration.class)
.withConfiguration(AutoConfigurations.of(ElasticsearchRepositoriesAutoConfiguration.class))
.withConfiguration(AutoConfigurations.of(DataElasticsearchRepositoriesAutoConfiguration.class))
.run((context) -> assertThat(context)
.hasSingleBean(ProductRepository.class));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ dependencies {
implementation(project(":spring-data-opensearch-starter"))
implementation(libs.jupiter)
implementation(springLibs.boot.test.autoconfigure)
implementation(springLibs.boot.test.cache)
implementation(springLibs.test)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration;
import org.springframework.boot.data.elasticsearch.autoconfigure.DataElasticsearchAutoConfiguration;

/**
* {@link ImportAutoConfiguration Auto-configuration imports} for typical Data OpenSearch tests.
Expand All @@ -23,5 +23,5 @@
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@ImportAutoConfiguration(exclude = ElasticsearchDataAutoConfiguration.class)
@ImportAutoConfiguration(exclude = DataElasticsearchAutoConfiguration.class)
public @interface AutoConfigureDataOpenSearch {}
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.cache.test.autoconfigure.AutoConfigureCache;
import org.springframework.boot.test.autoconfigure.OverrideAutoConfiguration;
import org.springframework.boot.test.autoconfigure.core.AutoConfigureCache;
import org.springframework.boot.test.autoconfigure.filter.TypeExcludeFilters;
import org.springframework.boot.test.context.filter.annotation.TypeExcludeFilters;
import org.springframework.test.context.BootstrapWith;
import org.springframework.test.context.junit.jupiter.SpringExtension;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
package org.opensearch.spring.boot.autoconfigure.test;

import org.springframework.boot.context.TypeExcludeFilter;
import org.springframework.boot.test.autoconfigure.filter.StandardAnnotationCustomizableTypeExcludeFilter;
import org.springframework.boot.test.context.filter.annotation.StandardAnnotationCustomizableTypeExcludeFilter;

/**
* {@link TypeExcludeFilter} for {@link DataElasticsearchTest}.
Expand Down
Loading
Loading