diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 439ab84..3831a2e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -22,7 +22,7 @@ jobs: # See: https://github.com/actions/cache/blob/master/examples.md#java---maven - name: Maven cache and restore deps - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index f52ccbc..4f462e6 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -11,6 +11,6 @@ jobs: update_release_draft: runs-on: ubuntu-latest steps: - - uses: release-drafter/release-drafter@v5 + - uses: release-drafter/release-drafter@v6 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/README.adoc b/README.adoc index 74bea0f..873b08a 100644 --- a/README.adoc +++ b/README.adoc @@ -9,6 +9,11 @@ image:https://github.com/aerospike-community/spring-data-aerospike-starters/work |=== |`spring-data-aerospike-starters` |`spring-data-aerospike` |`aerospike-client` |`aerospike-reactor-client` +|0.14.x +|4.7.x +|7.2.x +|7.1.x + |0.13.x |4.6.x |7.2.x diff --git a/pom.xml b/pom.xml index 0d2cd8a..5190c97 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.springframework.boot spring-boot-dependencies - 3.2.0 + 3.2.3 com.aerospike @@ -31,20 +31,21 @@ - 0.13.0 + 0.14.0 17 ${java.version} ${java.version} UTF-8 UTF-8 1.6 - 1.5.0 + 1.6.0 - 4.6.0 + 4.7.1 7.1.0 - 7.2.0 + 7.2.1 + 3.1.5 - 4.1.0 + 4.1.1 diff --git a/spring-boot-autoconfigure-data-aerospike/src/main/java/org/springframework/boot/autoconfigure/aerospike/AerospikeProperties.java b/spring-boot-autoconfigure-data-aerospike/src/main/java/org/springframework/boot/autoconfigure/aerospike/AerospikeProperties.java index 10ff6c1..8759629 100644 --- a/spring-boot-autoconfigure-data-aerospike/src/main/java/org/springframework/boot/autoconfigure/aerospike/AerospikeProperties.java +++ b/spring-boot-autoconfigure-data-aerospike/src/main/java/org/springframework/boot/autoconfigure/aerospike/AerospikeProperties.java @@ -19,6 +19,7 @@ import com.aerospike.client.policy.AuthMode; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.data.aerospike.config.AerospikeDataSettings; import java.time.Duration; @@ -36,14 +37,22 @@ public class AerospikeProperties { * Potential hosts to seed the cluster from string format: hostname1:port1,hostname2:port2 ... . *

* See {@link com.aerospike.client.Host#parseHosts} documentation for more details. + * + * @deprecated since 0.14.0, {@link AerospikeDataSettings} with the prefix "spring-data-aerospike.connection". + * will be used instead to read from application.properties */ + @Deprecated(since = "0.14.0", forRemoval = true) private String hosts; /** * Port is used if no port specified in AerospikeProperties#hosts. *

* See {@link com.aerospike.client.Host#parseHosts} documentation for more details. + * + * @deprecated since 0.14.0, {@link AerospikeDataSettings} with the prefix "spring-data-aerospike.connection". + * will be used instead to read from application.properties */ + @Deprecated(since = "0.14.0", forRemoval = true) private int defaultPort = 3000; /** diff --git a/spring-boot-autoconfigure-data-aerospike/src/main/java/org/springframework/boot/autoconfigure/data/aerospike/AerospikeCommonDataConfiguration.java b/spring-boot-autoconfigure-data-aerospike/src/main/java/org/springframework/boot/autoconfigure/data/aerospike/AerospikeCommonDataConfiguration.java index dedd01a..d7b0994 100644 --- a/spring-boot-autoconfigure-data-aerospike/src/main/java/org/springframework/boot/autoconfigure/data/aerospike/AerospikeCommonDataConfiguration.java +++ b/spring-boot-autoconfigure-data-aerospike/src/main/java/org/springframework/boot/autoconfigure/data/aerospike/AerospikeCommonDataConfiguration.java @@ -7,6 +7,7 @@ import org.springframework.boot.autoconfigure.domain.EntityScanner; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; +import org.springframework.data.aerospike.config.AerospikeConnectionSettings; import org.springframework.data.aerospike.config.AerospikeDataSettings; import org.springframework.data.aerospike.convert.AerospikeCustomConversions; import org.springframework.data.aerospike.convert.AerospikeTypeAliasAccessor; @@ -58,9 +59,10 @@ public IndexesCacheHolder aerospikeIndexCache() { public MappingAerospikeConverter mappingAerospikeConverter(AerospikeMappingContext aerospikeMappingContext, AerospikeTypeAliasAccessor aerospikeTypeAliasAccessor, AerospikeCustomConversions aerospikeCustomConversions, - AerospikeDataProperties aerospikeDataProperties) { + AerospikeDataProperties aerospikeDataProperties, + AerospikeDataSettings dataSettings) { return new MappingAerospikeConverter(aerospikeMappingContext, aerospikeCustomConversions, - aerospikeTypeAliasAccessor, aerospikeDataSettings(aerospikeDataProperties)); + aerospikeTypeAliasAccessor, aerospikeDataSettings(aerospikeDataProperties, dataSettings)); } @Bean(name = "aerospikeTypeAliasAccessor") @@ -98,16 +100,25 @@ public AerospikeExceptionTranslator aerospikeExceptionTranslator() { return new DefaultAerospikeExceptionTranslator(); } - private AerospikeDataSettings aerospikeDataSettings(AerospikeDataProperties aerospikeDataProperties) { - AerospikeDataSettings.AerospikeDataSettingsBuilder builder = AerospikeDataSettings.builder(); - configureDataSettings(builder, aerospikeDataProperties); - return builder.build(); + @Bean + public AerospikeDataSettings readAerospikeDataSettings() { + return new AerospikeDataSettings(); } - private void configureDataSettings(AerospikeDataSettings.AerospikeDataSettingsBuilder builder, - AerospikeDataProperties aerospikeDataProperties) { - builder.scansEnabled(aerospikeDataProperties.isScansEnabled()); - builder.sendKey(aerospikeDataProperties.isSendKey()); - builder.createIndexesOnStartup(aerospikeDataProperties.isCreateIndexesOnStartup()); + @Bean + public AerospikeConnectionSettings readAerospikeSettings() { + return new AerospikeConnectionSettings(); + } + + private AerospikeDataSettings aerospikeDataSettings(AerospikeDataProperties aerospikeDataProperties, + AerospikeDataSettings dataSettings) { + return configureDataSettings(dataSettings, aerospikeDataProperties); + } + + private AerospikeDataSettings configureDataSettings(AerospikeDataSettings dataSettings, + AerospikeDataProperties aerospikeDataProperties) { + dataSettings.setScansEnabled(aerospikeDataProperties.isScansEnabled()); + dataSettings.setCreateIndexesOnStartup(aerospikeDataProperties.isCreateIndexesOnStartup()); + return dataSettings; } } diff --git a/spring-boot-autoconfigure-data-aerospike/src/main/java/org/springframework/boot/autoconfigure/data/aerospike/AerospikeDataConfiguration.java b/spring-boot-autoconfigure-data-aerospike/src/main/java/org/springframework/boot/autoconfigure/data/aerospike/AerospikeDataConfiguration.java index 3bcafbe..9bbe468 100644 --- a/spring-boot-autoconfigure-data-aerospike/src/main/java/org/springframework/boot/autoconfigure/data/aerospike/AerospikeDataConfiguration.java +++ b/spring-boot-autoconfigure-data-aerospike/src/main/java/org/springframework/boot/autoconfigure/data/aerospike/AerospikeDataConfiguration.java @@ -82,11 +82,12 @@ public QueryEngine aerospikeQueryEngine(IAerospikeClient aerospikeClient, @ConditionalOnMissingBean(name = "aerospikeIndexRefresher") public IndexRefresher indexRefresher(IAerospikeClient aerospikeClient, IndexesCacheUpdater indexesCacheUpdater, ServerVersionSupport serverVersionSupport, - AerospikeDataProperties aerospikeDataProperties) { + AerospikeDataProperties aerospikeDataProperties, + AerospikeDataSettings dataSettings) { IndexRefresher refresher = new IndexRefresher(aerospikeClient, aerospikeClient.getInfoPolicyDefault(), new InternalIndexOperations(new IndexInfoParser()), indexesCacheUpdater, serverVersionSupport); refresher.refreshIndexes(); - int refreshFrequency = aerospikeDataSettings(aerospikeDataProperties).getIndexCacheRefreshSeconds(); + int refreshFrequency = aerospikeDataSettings(aerospikeDataProperties, dataSettings).getIndexCacheRefreshSeconds(); processCacheRefreshFrequency(refreshFrequency, refresher); return refresher; } @@ -111,16 +112,15 @@ public AerospikePersistenceEntityIndexCreator aerospikePersistenceEntityIndexCre aerospikeDataProperties.isCreateIndexesOnStartup(), aerospikeIndexResolver, template); } - private AerospikeDataSettings aerospikeDataSettings(AerospikeDataProperties aerospikeDataProperties) { - AerospikeDataSettings.AerospikeDataSettingsBuilder builder = AerospikeDataSettings.builder(); - configureDataSettings(builder, aerospikeDataProperties); - return builder.build(); + private AerospikeDataSettings aerospikeDataSettings(AerospikeDataProperties aerospikeDataProperties, + AerospikeDataSettings dataSettings) { + return configureDataSettings(dataSettings, aerospikeDataProperties); } - private void configureDataSettings(AerospikeDataSettings.AerospikeDataSettingsBuilder builder, - AerospikeDataProperties aerospikeDataProperties) { - builder.scansEnabled(aerospikeDataProperties.isScansEnabled()); - builder.sendKey(aerospikeDataProperties.isSendKey()); - builder.createIndexesOnStartup(aerospikeDataProperties.isCreateIndexesOnStartup()); + private AerospikeDataSettings configureDataSettings(AerospikeDataSettings dataSettings, + AerospikeDataProperties aerospikeDataProperties) { + dataSettings.setScansEnabled(aerospikeDataProperties.isScansEnabled()); + dataSettings.setCreateIndexesOnStartup(aerospikeDataProperties.isCreateIndexesOnStartup()); + return dataSettings; } } diff --git a/spring-boot-autoconfigure-data-aerospike/src/main/java/org/springframework/boot/autoconfigure/data/aerospike/AerospikeDataProperties.java b/spring-boot-autoconfigure-data-aerospike/src/main/java/org/springframework/boot/autoconfigure/data/aerospike/AerospikeDataProperties.java index 5beb847..7a7d2bf 100644 --- a/spring-boot-autoconfigure-data-aerospike/src/main/java/org/springframework/boot/autoconfigure/data/aerospike/AerospikeDataProperties.java +++ b/spring-boot-autoconfigure-data-aerospike/src/main/java/org/springframework/boot/autoconfigure/data/aerospike/AerospikeDataProperties.java @@ -23,7 +23,8 @@ /** * Configuration properties for Spring Data Aerospike. - * @deprecated since 0.14.0, {@link AerospikeDataSettings} will be used instead. + * @deprecated since 0.14.0, {@link AerospikeDataSettings} with the prefix "spring-data-aerospike.data". + * will be used instead to read from application.properties. * * @author Igor Ermolenko * @author Anastasiia Smirnova diff --git a/spring-boot-autoconfigure-data-aerospike/src/test/java/org/springframework/boot/autoconfigure/data/aerospike/AerospikeDataAutoConfigurationTest.java b/spring-boot-autoconfigure-data-aerospike/src/test/java/org/springframework/boot/autoconfigure/data/aerospike/AerospikeDataAutoConfigurationTest.java index abf9d50..9e392b1 100644 --- a/spring-boot-autoconfigure-data-aerospike/src/test/java/org/springframework/boot/autoconfigure/data/aerospike/AerospikeDataAutoConfigurationTest.java +++ b/spring-boot-autoconfigure-data-aerospike/src/test/java/org/springframework/boot/autoconfigure/data/aerospike/AerospikeDataAutoConfigurationTest.java @@ -27,6 +27,7 @@ import org.springframework.boot.autoconfigure.data.aerospike.city.City; import org.springframework.boot.test.context.FilteredClassLoader; import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.data.aerospike.convert.AerospikeConverter; import org.springframework.data.aerospike.convert.AerospikeTypeAliasAccessor; import org.springframework.data.aerospike.convert.MappingAerospikeConverter; import org.springframework.data.aerospike.core.AerospikeTemplate; @@ -76,7 +77,7 @@ public void entityScanShouldSetInitialEntitySet() { } @Test - public void typeKeyDefault() { + public void classKeyDefault() { contextRunner .withPropertyValues("spring.aerospike.hosts=localhost:3000") .withPropertyValues("spring.data.aerospike.namespace=TEST") @@ -84,10 +85,9 @@ public void typeKeyDefault() { AerospikeServerVersionSupportMockConfiguration.class) .run(context -> { AerospikeTypeAliasAccessor aliasAccessor = context.getBean(AerospikeTypeAliasAccessor.class); - String typeKey = getField(aliasAccessor, "typeKey"); - String defaultTypeKey = getField(aliasAccessor, "TYPE_KEY"); + String classKey = getField(aliasAccessor, "classKey"); - assertThat(typeKey).isEqualTo(defaultTypeKey); + assertThat(classKey).isEqualTo(AerospikeConverter.CLASS_KEY); }); } @@ -101,7 +101,7 @@ public void typeKeyCanBeCustomized() { .withPropertyValues("spring.data.aerospike.type-key=++amazing++") .run((context) -> { AerospikeTypeAliasAccessor aliasAccessor = context.getBean(AerospikeTypeAliasAccessor.class); - String typeKey = getField(aliasAccessor, "typeKey"); + String typeKey = getField(aliasAccessor, "classKey"); assertThat(typeKey).isEqualTo("++amazing++"); }); @@ -117,7 +117,7 @@ public void typeKeyCanBeNull() { .withPropertyValues("spring.data.aerospike.type-key=") .run((context) -> { AerospikeTypeAliasAccessor aliasAccessor = context.getBean(AerospikeTypeAliasAccessor.class); - String typeKey = getField(aliasAccessor, "typeKey"); + String typeKey = getField(aliasAccessor, "classKey"); assertThat(typeKey).isNull(); }); diff --git a/spring-boot-autoconfigure-data-aerospike/src/test/java/org/springframework/boot/autoconfigure/data/aerospike/AerospikeReactiveDataAutoConfigurationTest.java b/spring-boot-autoconfigure-data-aerospike/src/test/java/org/springframework/boot/autoconfigure/data/aerospike/AerospikeReactiveDataAutoConfigurationTest.java index 0be59b4..10fdcc6 100644 --- a/spring-boot-autoconfigure-data-aerospike/src/test/java/org/springframework/boot/autoconfigure/data/aerospike/AerospikeReactiveDataAutoConfigurationTest.java +++ b/spring-boot-autoconfigure-data-aerospike/src/test/java/org/springframework/boot/autoconfigure/data/aerospike/AerospikeReactiveDataAutoConfigurationTest.java @@ -26,6 +26,7 @@ import org.springframework.boot.autoconfigure.data.aerospike.AerospikeTestConfigurations.MockReactiveIndexRefresher; import org.springframework.boot.autoconfigure.data.aerospike.city.City; import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.data.aerospike.convert.AerospikeConverter; import org.springframework.data.aerospike.convert.AerospikeTypeAliasAccessor; import org.springframework.data.aerospike.convert.MappingAerospikeConverter; import org.springframework.data.aerospike.core.AerospikeTemplate; @@ -74,7 +75,7 @@ public void entityScanShouldSetInitialEntitySet() { } @Test - public void typeKeyDefault() { + public void classKeyDefault() { contextRunner .withPropertyValues("spring.aerospike.hosts=localhost:3000") .withPropertyValues("spring.data.aerospike.namespace=TEST") @@ -82,10 +83,9 @@ public void typeKeyDefault() { AerospikeServerVersionSupportMockConfiguration.class) .run(context -> { AerospikeTypeAliasAccessor aliasAccessor = context.getBean(AerospikeTypeAliasAccessor.class); - String typeKey = getField(aliasAccessor, "typeKey"); - String defaultTypeKey = getField(aliasAccessor, "TYPE_KEY"); + String typeKey = getField(aliasAccessor, "classKey"); - assertThat(typeKey).isEqualTo(defaultTypeKey); + assertThat(typeKey).isEqualTo(AerospikeConverter.CLASS_KEY); }); } @@ -99,7 +99,7 @@ public void typeKeyCanBeCustomized() { .withPropertyValues("spring.data.aerospike.type-key=++amazing++") .run((context) -> { AerospikeTypeAliasAccessor aliasAccessor = context.getBean(AerospikeTypeAliasAccessor.class); - String typeKey = getField(aliasAccessor, "typeKey"); + String typeKey = getField(aliasAccessor, "classKey"); assertThat(typeKey).isEqualTo("++amazing++"); }); diff --git a/spring-boot-autoconfigure-data-aerospike/src/test/java/org/springframework/boot/autoconfigure/data/aerospike/TestUtils.java b/spring-boot-autoconfigure-data-aerospike/src/test/java/org/springframework/boot/autoconfigure/data/aerospike/TestUtils.java index 1fb1e65..7b1e4fb 100644 --- a/spring-boot-autoconfigure-data-aerospike/src/test/java/org/springframework/boot/autoconfigure/data/aerospike/TestUtils.java +++ b/spring-boot-autoconfigure-data-aerospike/src/test/java/org/springframework/boot/autoconfigure/data/aerospike/TestUtils.java @@ -1,15 +1,14 @@ package org.springframework.boot.autoconfigure.data.aerospike; -import org.springframework.data.aerospike.convert.AerospikeTypeAliasAccessor; import org.springframework.util.ReflectionUtils; import java.lang.reflect.Field; public class TestUtils { - public static T getField(AerospikeTypeAliasAccessor aliasAccessor, String fieldName) { - Field typeKeyField = ReflectionUtils.findField(AerospikeTypeAliasAccessor.class, fieldName); + public static T getField(Object object, String fieldName) { + Field typeKeyField = ReflectionUtils.findField(object.getClass(), fieldName); typeKeyField.setAccessible(true); - return (T) ReflectionUtils.getField(typeKeyField, aliasAccessor); + return (T) ReflectionUtils.getField(typeKeyField, object); } } diff --git a/spring-boot-starter-data-aerospike-example/pom.xml b/spring-boot-starter-data-aerospike-example/pom.xml index 24dd73e..aeed54c 100644 --- a/spring-boot-starter-data-aerospike-example/pom.xml +++ b/spring-boot-starter-data-aerospike-example/pom.xml @@ -15,10 +15,6 @@ spring-boot-starter-data-aerospike-example Example for using Spring Boot Data Aerospike Starter - - 3.1.1 - - reactive sync