1. Обзор
В этом кратком руководстве мы сосредоточимся на том, как интегрировать API Spring Data с платформой Apache Ignite.
Чтобы узнать больше об Apache Ignite, ознакомьтесь с нашим предыдущим руководством .
2. Настройка Maven
В дополнение к существующим зависимостям мы должны включить поддержку данных Spring:
org.apache.ignite ignite-spring-data ${ignite.version}
Артефакт ignite-spring-data можно загрузить из Maven Central .
3. Модель и репозиторий
Чтобы продемонстрировать интеграцию, мы создадим приложение, которое хранит employees в кэше Ignite с помощью API Spring Data.
POJO Сотрудников В будет выглядеть следующим образом:
public class EmployeeDTO implements Serializable { @QuerySqlField(index = true) private Integer id; @QuerySqlField(index = true) private String name; @QuerySqlField(index = true) private boolean isEmployed; // getters, setters }
Здесь аннотация @QuerySqlField позволяет запрашивать поля с помощью SQL.
Затем мы создадим репозиторий для сохранения объектов Employee :
@RepositoryConfig(cacheName = "baeldungCache") public interface EmployeeRepository extends IgniteRepository{ EmployeeDTO getEmployeeDTOById(Integer id); }
Apache Ignite использует свой собственный репозиторий Ignite , который простирается от CrudRepository Spring Data . Он также обеспечивает доступ к сетке SQL из данных Spring.
Это поддерживает стандартные методы CRUD, за исключением нескольких, которые не требуют идентификатора. Мы рассмотрим почему более подробно в нашем разделе тестирования.
@RepositoryConfig аннотации отображают Работодатель чтобы Зажечь тайник баельдунга .
4. Конфигурация Пружины
Теперь давайте создадим наш класс конфигурации Spring.
Мы воспользуемся @EnableIgniteRepositories аннотация для добавления поддержки репозиториев Ignite:
@Configuration @EnableIgniteRepositories public class SpringDataConfig { @Bean public Ignite igniteInstance() { IgniteConfiguration config = new IgniteConfiguration(); CacheConfiguration cache = new CacheConfiguration("baeldungCache"); cache.setIndexedTypes(Integer.class, EmployeeDTO.class); config.setCacheConfiguration(cache); return Ignition.start(config); } }
Здесь метод ignite Instance() создает и передает экземпляр Ignite в Ignite RepositoryFactoryBean , чтобы получить доступ к кластеру Apache Ignite.
Мы также определили и установили конфигурацию baeldungCache . Метод setIndexedTypes() задает схему SQL для кэша.
5. Тестирование репозитория
Чтобы протестировать приложение, давайте зарегистрируем конфигурацию Spring Data в applicationcontext и получим из нее EmployeeRepository :
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); context.register(SpringDataConfig.class); context.refresh(); EmployeeRepository repository = context.getBean(EmployeeRepository.class);
Затем мы хотим создать экземпляр Employees TO и сохранить его в кэше:
EmployeeDTO employeeDTO = new EmployeeDTO(); employeeDTO.setId(1); employeeDTO.setName("John"); employeeDTO.setEmployed(true); repository.save(employeeDTO.getId(), employeeDTO);
Здесь мы использовали метод save (ключ, значение) репозитория Ignite|/. Причина этого заключается в том, что стандартные операции CrudRepository save(entity), save(entities), delete(entity) еще не поддерживаются .
Проблема заключается в том, что идентификаторы, созданные методом CrudRepository.save () , не являются уникальными в кластере.
Вместо этого мы должны использовать методы save (key, value), save(Map Entity> values), deleteAll(Iterable ids) . Entity> values), deleteAll(Iterable ids)
После этого мы можем получить объект employee из кэша с помощью метода Spring Data getEmployeeDTOById() :
EmployeeDTO employee = repository.getEmployeeDTOById(employeeDTO.getId()); System.out.println(employee);
Вывод показывает, что мы успешно извлекли исходный объект:
EmployeeDTO{id=1, name='John', isEmployed=true}
В качестве альтернативы мы можем получить тот же объект с помощью Ignite Cache API:
IgniteCachecache = ignite.cache("baeldungCache"); EmployeeDTO employeeDTO = cache.get(employeeId);
Или с помощью стандартного SQL:
SqlFieldsQuery sql = new SqlFieldsQuery( "select * from EmployeeDTO where isEmployed = 'true'");
6. Резюме
В этом кратком руководстве показано, как интегрировать Spring Data Framework с проектом Apache Ignite. С помощью практического примера мы научились работать с кэшем Apache Ignite с помощью API Spring Data.
Как обычно, полный код этой статьи доступен в проекте GitHub .