Автор Джош Лонг в блоге Spring.
Этот блог был вдохновлен выступлением Лорана Догуина , адвоката разработчика в Couchbase, и я выступил на Couchbase Connect в прошлом году. Мерси Лоран!
Это демонстрация интеграции Spring Data Couchbase . На странице проекта , Spring Data Couchbase является:
Проект Spring Data Couchbase обеспечивает интеграцию с базой данных Couchbase Server. Ключевые функциональные области Spring Data Couchbase — это POJO-центричная модель для взаимодействия с Couchbase Buckets и простой написания слоя доступа к данным в стиле репозитория.
Что такое Couchbase?
Couchbase — это распределенное хранилище данных с истинным горизонтальным масштабированием. Мне нравится воспринимать это как смесь Redis и MongoDB: вы работаете с документами, доступ к которым осуществляется через их ключи. Существует множество клиентских API для всех языков. Если вы используете Couchbase для своей серверной части и используете JVM, вам понравится Spring Data Couchbase . Пули на домашней странице проекта лучше всего перечисляют его многочисленные особенности:
- Поддержка конфигурации Spring с использованием
@Configuration
классов на основе Java или пространства имен XML для драйвера Couchbase. CouchbaseTemplate
вспомогательный класс, который увеличивает производительность при выполнении обычных операций Couchbase. Включает в себя интегрированное сопоставление объектов между документами и объектами POJO.- Преобразование исключений в иерархию исключений Spring для доступа к данным.
- Многофункциональное сопоставление объектов, интегрированное со службой преобразования Spring.
- Метаданные отображения на основе аннотаций, но расширяемые для поддержки других форматов метаданных.
- Автоматическая реализация интерфейсов репозитория, включая поддержку пользовательских методов поиска (при поддержке Couchbase Views).
- Администрирование и мониторинг JMX
- Прозрачная
@Cacheable
поддержка для кэширования любых объектов, необходимых для высокопроизводительного доступа.
Бег Couchbase
Используйте Vagrant для запуска Couchbase локально
Вам нужно будет установить Couchbase, если вы этого еще не сделали (естественно). Майкл Нитчингер ( @daschl , также руководитель проекта Spring Data Couchbase) рассказал о том, как запустить и запустить простой 4-узловый кластер Vagrant . Я воспроизвел его пример здесь, в vagrant
каталоге. Чтобы использовать его, вам , конечно, нужно установить Virtual Box и Vagrant , но затем просто запустить vagrant up
в vagrant
каталоге. Чтобы получить самую последнюю версию этого скрипта конфигурации, я пошел в проект Michael GitHub vagrants
и обнаружил, что помимо этого примера, есть множество других доступных скриптов Vagrant, У меня есть подмодуль в каталоге проекта этого кода, который указывает на это, но не забудьте проконсультироваться с ним для самых последних. Чтобы все работало на моей машине, я выбрал установку Ubuntu 12 Couchbase 3.0.2 . Вы можете изменить количество запускаемых узлов, настроив VAGRANT_NODES
переменную среды перед запуском:
VAGRANT_NODES=2 vagrant up
Вам нужно будет администрировать и настраивать Couchbase при первоначальной настройке. Направьте ваш браузер на правильный IP для каждого узла. Правила определения этого IP хорошо описаны в README
. Интерфейс администратора, в моем случае, был доступен на 192.168.105.101:8091
и 192.168.105.102:8091
. Для получения дополнительной информации об этом процессе, я рекомендую вам следовать указаниям здесь для деталей.
Вот как я это сделал. Я ударил интерфейс администратора на первом узле и создал новый кластер. Я использовал admin
для имени пользователя и password
для пароля. На всех последующих страницах управления я просто присоединился к существующему кластеру, указав узлы 192.168.105.101
и используя вышеупомянутые admin
учетные данные. Как только вы объединили все узлы, найдите Rebalance
кнопку на панели « Узлы сервера» и запустите перебалансировку кластера.
Если вы закончили работу со своим кластером Vagrant, вы можете использовать vagrant halt
команду для его полного отключения. Также очень удобно vagrant suspend
, что будет сохранять состояние узлов, а не завершать их полностью.
Если вы хотите управлять кластером Couchbase из командной строки, это удобно couchbase-cli
. Вы можете просто использовать vagrant ssh
команду , чтобы попасть в каждый из узлов (их узлов названий: node1
, node2
и т.д ..). Оказавшись там, вы можете запустить команды конфигурации кластера. Например, server-list
команда будет перечислять узлы кластера.
/opt/couchbase/bin/couchbase-cli server-list -c 192.168.56.101-u admin -p password
Легко вызвать ребаланс, используя:
/opt/couchbase/bin/couchbase-cli rebalance -c 192.168.56.101-u admin -p password
Couchbase In the Cloud и Cloud Foundry
Couchbase пригодна для использования в облаке. Он масштабируется по горизонтали (как Gemfire или Cassandra) в том смысле, что нет единой точки отказа. Он не использует ведущий-ведомый или активную / пассивную систему. Есть несколько способов запустить его там, где работают ваши приложения. Если вы используете установку Cloud Foundry, то вы можете установить Cumulogic Service Broker, который позволит вашей установке Cloud Foundry общаться с платформой Cumulogic, которая сама может управлять экземплярами Couchbase. Сервисные брокеры — это фрагмент кода интеграции, который учит Cloud Foundry, как предоставлять, уничтожать и вообще взаимодействовать с управляемым сервисом, таким как Couchbase, в данном случае.
Использование Spring Data Couchbase для хранения мест Facebook
Давайте рассмотрим простой пример, который читает данные (в данном случае из API Facebook Places с использованием API Spring Social Facebook FacebookTemplate
), а затем загружает их на сервер Couchbase.
Получить токен доступа Facebook
Вам также понадобится токен доступа Facebook. Самый простой способ сделать это — зайти на Портал разработчиков Facebook и создать новое приложение, а затем получить идентификатор приложения и секретный ключ приложения. Возьмите эти два значения и объедините их с помощью символа pike ( |
). Таким образом, вы будете иметь что — то в виде: appID|appSecret
. В примере приложения Environment
для разрешения facebook.accessToken
ключа используется механизм Spring . Вы можете указать для него значение в src/main/resources/application.properties
файле или с помощью любого из других поддерживаемых механизмов разрешения свойств Spring Boot. Вы можете даже предоставить значение в качестве -D
аргумента: -Dfacebook.accessToken=...|...
Рассказывая Spring Data Couchbase о нашем кластере
Данные в Couchbase хранятся в контейнерах . Логически это то же самое, что и база данных в СУБД SQL. Обычно он реплицируется между узлами и имеет собственную конфигурацию. Мы будем использовать контейнер по умолчанию , но совсем просто создать больше контейнеров.
Давайте рассмотрим базовую конфигурацию, необходимую для использования Spring Data Couchbase (в данном случае, с точки зрения приложения Spring Boot):
@SpringBootApplication @EnableScheduling @EnableCaching public class Application { @EnableCouchbaseRepositories @Configuration static class CouchbaseConfiguration extends AbstractCouchbaseConfiguration { @Value("${couchbase.cluster.bucket}") private String bucketName; @Value("${couchbase.cluster.password}") private String password; @Value("${couchbase.cluster.ip}") private String ip; @Override protected List<String> bootstrapHosts() { return Arrays.asList(this.ip); } @Override protected String getBucketName() { return this.bucketName; } @Override protected String getBucketPassword() { return this.password; } } // more beans }
Хранилище данных Spring Couchbase
Spring Data предоставляет понятие репозиториев — объектов, которые обрабатывают типичную логику доступа к данным и предоставляют основанные на соглашениях запросы. Их можно использовать для сопоставления POJO с данными в резервном хранилище данных.
В нашем примере просто хранится информация о предприятиях, которую он читает из API Places Facebook. Для этого мы создали простую Place
сущность, которую репозитории Spring Data Couchbase будут знать, как сохранить:
@Document(expiry = 0) class Place { @Id private String id; @Field private Location location; @Field @NotNull private String name; @Field private String affilitation, category, description, about; @Field private Date insertionDate; // .. getters, constructors, toString, etc }
Place
Объект ссылается на другой объект, Location
, который является в основном то же самое.
В случае Spring Data Couchbase методы поиска репозитория отображаются на представления — запросы, написанные на JavaScript — на сервере Couchbase. Вам нужно настроить представления на серверах Couchbase. Перейдите в консоль администратора любого сервера Couchbase и перейдите на экран « Виды» , затем нажмите « Создать представление разработки» и назовите его так place
, как будет выглядеть наша сущность demo.Place
(имя представления разработки по умолчанию адаптируется из имени класса сущности).
Мы создадим два представления: общее all
, которое требуется для любого POJO Spring Data Couchbase, и byName
представление, которое будет использоваться для управления findByName
методом поиска в хранилище . Это отображение является условным, хотя вы можете переопределить, какое представление используется с @View
аннотацией в объявлении метода поиска.
Во- первых, all
:
Теперь byName
:
Когда вы закончите, не забудьте опубликовать каждый вид!
Теперь вы можете использовать репозитории Spring Data так, как вы ожидаете. Единственное, что немного отличается в этих репозиториях, это то, что мы объявляем Query
тип Spring Data Couchbase для аргумента findByName
метода поиска, а не String. Используя @Query
это просто:
Query query = new Query(); query.setKey("Philz Coffee"); Collection<Place> places = placeRepository.findByName(query); places.forEach(System.out::println);
Куда пойти отсюда
Мы только рассмотрели некоторые основы здесь. Spring Data Couchbase поддерживает API проверки Java-бина и может быть настроен на соблюдение ограничений проверки его сущностей. Spring Data Couchbase также предоставляет низкоуровневый доступ к CouchbaseClient
API, если вы этого хотите. Spring Data Couchbase также реализует абстракцию Spring CacheManager
— вы можете использовать @Cacheable
и дружить с данными о методах обслуживания, и они будут прозрачно сохранены в Couchbase для вас.
Код для этого примера находится в моем репозитории Github , совместно с моим приятелем Лораном Догуином ( @ldoguin ) из Couchbase.