Внедрение ключевого значения данных Spring для Oracle KV

Я хотел бы использовать базу данных Oracle NoSQL вместе с данными Spring. Цель состоит в том, чтобы получить доступ к данным через репозитории данных пружин и даже использовать их поверх остальных. Поэтому я думаю, что проект spring-data-keyvalue поможет мне реализовать адаптер для Oracle NoSQL KV.

Я пытался понять документацию по spring-data-keyvalue ( http://docs.spring.io/spring-data/keyvalue/docs/current/reference/html/), но не сделал этого не понимаю Пример / руководство о том, как реализовать адаптер с нуля, было бы очень полезно.

У меня есть этот класс конфигурации, где я предоставляю пользовательский KeyValueAdapter. Теперь, если я использую методы CrudRepository, он использует мой пользовательский адаптер.

@Configuration
@EnableMapRepositories
public class KeyValueConfig {

     @Bean
     public KeyValueOperations keyValueTemplate() {
         return new KeyValueTemplate(new OracleKeyValueAdapter());
    }
}

OracleKeyValueAdapter является реализацией KeyValueAdapter. Я получил это из проекта spring-data-keyvalue-redis ( https://github.com/christophstrobl/spring-data-keyvalue-redis/blob/master/src/main/java/org/springframework/data/keyvalue/redis/RedisKeyValueAdapter.java)

public class OracleKeyValueAdapter extends AbstractKeyValueAdapter {

private KVStore store;

public OracleKeyValueAdapter() {
    String storeName = "kvstore";
    String hostName = "localhost";
    String hostPort = "5000";

    store = KVStoreFactory.getStore
            (new KVStoreConfig(storeName, hostName + ":" + hostPort));
}

//Custom implementations: 

@Override
public Object put(Serializable serializable, Object o, Serializable 
serializable1) {
    return null;
}

@Override
public boolean contains(Serializable serializable, Serializable 
serializable1) {
    return false;
}

.
.
.

Сейчас я пытаюсь реализовать этот OracleKeyValueAdapter, но я не знаю, имеет ли это смысл.

Вы можете мне помочь?

3 ответа

Возможно, вы захотите начать с того, как spring-data-keyvalue реализована в Redis, ссылка здесь должна быть хорошей отправной точкой - http://docs.spring.io/spring-data/data-keyvalue/docs/1.0.0.BUILD-SNAPSHOT/reference/redis.html

Дайте мне знать, как это происходит, мне интересно, чего вы пытаетесь достичь.

Следующая конфигурация должна работать (проверено на v2.4.3)

      @Configuration
@EnableMapRepositories
public class Configuration {
    @Bean
    public KeyValueOperations mapKeyValueTemplate() {
        return new KeyValueTemplate(keyValueAdapter());
    }
    @Bean
    public KeyValueAdapter keyValueAdapter() {
        return new YourKeyValueAdapter();
    }
}

Имя ( mapKeyValueTemplate ) KeyValueOperations bean здесь важен, но его также можно изменить следующим образом:

      @Configuration
@EnableMapRepositories(keyValueTemplateRef = "foo")
public class Configuration {
    @Bean
    public KeyValueOperations foo() {
        return new KeyValueTemplate(keyValueAdapter());
    }
    @Bean
    public KeyValueAdapter keyValueAdapter() {
        return new YourKeyValueAdapter();
    }
}

Я видел источники Spring KeyValue Repository:https://github.com/spring-projects/spring-data-keyvalue

Рекомендую разобраться, как внутри работает Spring Repository.

Если вы хотите реализовать собственный репозиторий (CustomKeyValueRepository), вы должны создать не менее 6 классов :

  • EnableCustomKeyValueRepositories - аннотация для включения типа репозитория в вашем проекте.
  • CustomKeyValueRepositoriesRegistrar - регистратор данной аннотации.
  • CustomKeyValueRepository - репозиторий
  • CustomKeyValueRepositoryConfigurationExtension - реализация Spring ConfigurationExtension.
  • CustomKeyValueAdapter - реализация кастомного адаптера для вашего хранилища данных.
  • CustomKeyValueConfiguration - конфигурация адаптера и шаблона beans.

Я кодирую репозиторий Infinispan KeyValue следующим образом:https://github.com/OsokinAlexander/infinispan-spring-repository

Я тоже пишу об этом статью:https://habr.com/ru/post/535218/ В Chrome вы можете перевести это на свой язык.

Самый простой способ - попробовать реализовать только CustomKeyValueAdapter и Configuration. В Configuration вы должны переопределить bean-компонент Spring KeyValueAdapter и KeyValueTemplate (очень важно, чтобы имя bean-компонента было строчной буквой , это единственный способ, которым это сработало для меня):

      @Configuration
public class CustomKeyValueConfiguration extends CachingConfigurerSupport {

  @Autowired
  private ApplicationContext applicationContext;

  @Bean
  public CustomKeyValueAdapter getKeyValueAdapter() {
    return new CustomKeyValueAdapter();
  }

  @Bean("keyValueTemplate")
  public KeyValueTemplate getKeyValueTemplate() {
    return new KeyValueTemplate(getKeyValueAdapter());
  }
}
Другие вопросы по тегам