1

Recently, there is a new requirement to use Apache Ignite. I would like to ask whether Apache Ignite can perform CRUD operations through Spring Data like MySQL. My current thinking is this:

  1. Connect Apache ignite through dbherver database tool to create dimension table and fact table.
  2. Integrate Spring Data in SpringBoot, and create the entity and model corresponding to the table.
  3. SpringData connects to Apache ignite and provides Restful API through Repository API. In practice, I don't know what kind of configuration class SpringData should create:
 (1) Ignite node connection configuration
 (2) Ignite thin client connection configuration

Various errors occurred during the debugging of the configuration class. I wonder if there is a problem with my version selection. The following is my version:

 SpringBoot-----2.7.5
 ignite-verson-----2.15.0
 ignite-spring-data-ext ---2.0.0
 Apache Ignite cluster (node1:47500,node2:47500,node3:47500,node4:47500,node5:47500) 

Seek seniors to give advice! please Below is my pom:

        <!-- Apache Ignite -->
        <dependency>
            <groupId>org.apache.ignite</groupId>
            <artifactId>ignite-core</artifactId>
            <version>${ignite.version}</version>
        </dependency>

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

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

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

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-commons</artifactId>
        </dependency>
        

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>${h2.version}</version>
        </dependency>

Below is my configuration class:

@Configuration
@EnableIgniteRepositories
public class IgniteConfig {

    @Bean
    public Ignite igniteInstance() {
        IgniteConfiguration cfg = new IgniteConfiguration();
        cfg.setClientMode(true);

        TcpDiscoverySpi spi = new TcpDiscoverySpi();
        TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder();
        ipFinder.setAddresses(Collections.singletonList("node1:47500"));
        spi.setIpFinder(ipFinder);
        cfg.setDiscoverySpi(spi);

        return Ignition.start(cfg);
    }
}

Got stuck here once:

2023-06-13 22:07:07.654  INFO 37540 --- [           main] o.a.i.i.p.cluster.ClusterProcessor       : Cluster ID and tag has been read from metastorage: null
2023-06-13 22:07:07.659  INFO 37540 --- [           main] o.a.i.i.cluster.IgniteClusterImpl        : Shutdown policy was updated [oldVal=null, newVal=null]
2023-06-13 22:07:07.662  INFO 37540 --- [           main] .a.i.i.p.q.s.IgniteStatisticsManagerImpl : Statistics usage state was changed from null to null

1 Answers1

0

Here's the pom file from my SpringBoot/SpringData app:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.12</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.gridgain.ps.k8s</groupId>
    <artifactId>ignite-client</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>igniteclient</name>
    <description>Spring Boot Ignite Client</description>
    <properties>
        <java.version>11</java.version>
        <gridgain.version>8.8.30</gridgain.version>
        <ignite-spring-data-ext.version>2.0.0</ignite-spring-data-ext.version>
    </properties>
    <repositories>
         <repository>
             <id>GridGain External Repository</id>
             <url>https://www.gridgainsystems.com/nexus/content/repositories/external</url>
         </repository>
    </repositories>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.ignite</groupId>
            <artifactId>ignite-spring-data-ext</artifactId>
            <version>${ignite-spring-data-ext.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-commons</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.ignite</groupId>
          <artifactId>ignite-spring-boot-thin-client-autoconfigure-ext</artifactId>
          <version>1.0.0</version>
        </dependency>
        <dependency>
             <groupId>org.gridgain</groupId>
             <artifactId>ignite-core</artifactId>
             <version>${gridgain.version}</version>
         </dependency>
        <dependency>
            <groupId>org.gridgain</groupId>
            <artifactId>ignite-kubernetes</artifactId>
            <version>${gridgain.version}</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

You can switch out the references to GridGain to Ignite if you like.

Stephen Darlington
  • 51,577
  • 12
  • 107
  • 152