ApacheがSpring Dataに点火する

データ]** リンク:/category/persistence/spring-persistence/[Spring Persistence]

1概要

このクイックガイドでは、Spring Data APIをApache Igniteプラットフォームと統合する方法に焦点を当てます。

Apache Igniteについて学ぶためには、リンクをチェックしてください:/apache-ignite[前のガイド]。

2 Mavenのセットアップ

既存の依存関係に加えて、Spring Dataサポートを有効にする必要があります。

<dependency>
    <groupId>org.apache.ignite</groupId>
    <artifactId>ignite-spring-data</artifactId>
    <version>${ignite.version}</version>
</dependency>

ignite-spring-data 成果物はhttps://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22org.apache.ignite%22%20AND%20a%3A%22ignite-からダウンロードできます。春のデータ%22[Maven Central]。

3モデルとリポジトリ

統合を実証するために、Spring Data APIを使用して、 従業員 をIgniteのキャッシュに格納するアプリケーションを作成します。

EmployeeDTO の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, Integer> {
    EmployeeDTO getEmployeeDTOById(Integer id);
}
  • Apache Igniteは、Spring Dataの CrudRepository から拡張された独自の IgniteRepository を使用しています。

これは標準のCRUDメソッドをサポートしますが、IDを必要としないものはいくつかあります。その理由については、テストのセクションで詳しく説明します。

  • RepositoryConfig アノテーションは、 EmployeeRepository をIgniteの baeldungCache にマッピングします。

4スプリング構成

それでは、Spring構成クラスを作成しましょう。

  • Igniteリポジトリのサポートを追加するために @ EnableIgniteRepositories アノテーションを使用します。**

@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);
    }
}

ここで、 igniteInstance()メソッドは、Apache Igniteクラスターにアクセスするために、 Ignite インスタンスを作成して IgniteRepositoryFactoryBean__に渡します。

baeldungCache 設定も定義して設定しました。

setIndexedTypes() メソッドは、キャッシュのSQLスキーマを設定します。

5リポジトリのテスト

アプリケーションをテストするには、 SpringDataConfiguration をアプリケーションコンテキストに登録し、そこから EmployeeRepository を取得します。

AnnotationConfigApplicationContext context
 = new AnnotationConfigApplicationContext();
context.register(SpringDataConfig.class);
context.refresh();

EmployeeRepository repository = context.getBean(EmployeeRepository.class);

次に、 EmployeeDTO インスタンスを作成してキャッシュに保存します。

EmployeeDTO employeeDTO = new EmployeeDTO();
employeeDTO.setId(1);
employeeDTO.setName("John");
employeeDTO.setEmployed(true);

repository.save(employeeDTO.getId(), employeeDTO);

ここでは IgniteRepository save(key、value) メソッドを使いました。これは、標準の CrudRepository保存(エンティティ)、保存(エンティティ)、削除(エンティティ) 操作がまだサポートされていないためです。

この背景にある問題は、 CrudRepository.save() メソッドによって生成されたIDがクラスタ内で一意ではないということです。

代わりに、__save(key、value)、save(Map <ID、Entity> values)、deleteAll(Iterable <ID> ids)メソッドを使用する必要があります。

その後、Spring Dataの getEmployeeDTOById() メソッドを使用して、キャッシュから従業員オブジェクトを取得できます。

EmployeeDTO employee = repository.getEmployeeDTOById(employeeDTO.getId());
System.out.println(employee);

出力は初期オブジェクトの取得に成功したことを示しています。

EmployeeDTO{id=1, name='John', isEmployed=true}

あるいは、 IgniteCache APIを使用して同じオブジェクトを取得することもできます。

IgniteCache<Integer, EmployeeDTO> 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プロジェクトと統合する方法を説明します。実例を使って、Spring Data APIを使ってApache Igniteキャッシュを扱うことを学びました。

いつものように、この記事の完全なコードはhttps://github.com/eugenp/tutorials/tree/master/libraries-data/[GitHub project]にあります。