Рубрики
Без рубрики

Apache воспламеняется с помощью весенних данных

Узнайте, как интегрировать проект Apache Ignite с API Spring Data.

Автор оригинала: baeldung.

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:

IgniteCache cache = 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 .