Внедрение ключевого значения данных 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());
}
}