返回顶部
首页 > 资讯 > 后端开发 > Python >SpringBoot整合Apache Ignite的实现
  • 687
分享到

SpringBoot整合Apache Ignite的实现

2024-04-02 19:04:59 687人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

关于Ignite的介绍,这边推荐三个链接进行学习了解。 https://ignite.apache.org/,首选还是官网,不过是英文版,如果阅读比较吃力可以选择下方两个链接。 Ht

关于Ignite的介绍,这边推荐三个链接进行学习了解。

https://ignite.apache.org/,首选还是官网,不过是英文版,如果阅读比较吃力可以选择下方两个链接。

Https://www.oschina.net/p/apache-ignite?hmsr=aladdin1e1,开源中国上对Ignite的介绍,包含特性、架构等内容,比较详细。

https://www.infoq.cn/article/apache-ignite-explorer,这个链接中将Ignite与Redis、Hazelcast等同类型产品做了比较。

 接下来我们开始实践,首先需要在本地搭建一套Ignite服务,从官网上可以进行下载,https://ignite.apache.org/docs/latest/installation/installing-using-zip:

这里需要注意的是,我们要下载的是安装包,别下载了源码。下载完毕后解压,去到apache-ignite-2.8.1\bin目录双击ignite.bat即可启动服务:

打印上图中框出内容即为启动成功,接下来我们创建一个Spring Boot项目用于整合Ignite的相关验证,目录结构如下:

父工程的pom:


<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.22.RELEASE</version>
    <relativePath/>
</parent>

<properties>
    <h2.version>1.4.197</h2.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-WEB</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

Spring Boot的版本推荐为1.5.X这类较为稳定的版本,从2.0.0开始的版本和Ignite会发生冲突,编译时抛出如下错误:

Error:(8, 8) java: 名称冲突: org.apache.ignite.springdata.repository.IgniteRepository中的deleteAll(java.lang.Iterable<ID>)和org.springframework.data.repository.CrudRepository中的deleteAll(java.lang.Iterable<? extends T>)具有相同疑符, 但两者均不覆盖对方

这里还需要注意一点,如果不指定h2的版本为1.4.197,启动应用时会抛出如下异常:

org.apache.ignite.internal.processors.query.IgnitesqlException: Failed to initialize system DB connection: jdbc:h2:mem:b9189e84-4966-4b03-8500-429a958cee4f;LOCK_MODE=3;MULTI_THREADED=1;DB_CLOSE_ON_EXIT=FALSE;DEFAULT_LOCK_TIMEOUT=10000;FUNCTIONS_IN_SCHEMA=true;OPTIMIZE_REUSE_RESULTS=0;QUERY_CACHE_SIZE=0;MAX_OPERATION_MEMORY=0;BATCH_JOINS=1;ROW_FACTORY="org.apache.ignite.internal.processors.query.h2.opt.H2PlainRowFactory";DEFAULT_TABLE_ENGINE=org.apache.ignite.internal.processors.query.h2.opt.GridH2DefaultTableEngine
 at org.apache.ignite.internal.processors.query.h2.ConnectionManager.connectionNoCache(ConnectionManager.java:213) ~[ignite-indexing-2.8.1.jar:2.8.1]
 at org.apache.ignite.internal.processors.query.h2.ConnectionManager.<init>(ConnectionManager.java:152) ~[ignite-indexing-2.8.1.jar:2.8.1]
 at org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.start(IgniteH2Indexing.java:2114) ~[ignite-indexing-2.8.1.jar:2.8.1]
 at org.apache.ignite.internal.processors.query.GridQueryProcessor.start(GridQueryProcessor.java:256) ~[ignite-core-2.8.1.jar:2.8.1]
 at org.apache.ignite.internal.IgniteKernal.startProcessor(IgniteKernal.java:1978) ~[ignite-core-2.8.1.jar:2.8.1]
 at org.apache.ignite.internal.IgniteKernal.start(IgniteKernal.java:1212) ~[ignite-core-2.8.1.jar:2.8.1]

子模块spring-boot-test-ignite中需要添加Ignite的依赖,版本需要与本地搭建的Ignite服务保持一致:


<dependency>
    <groupId>org.apache.ignite</groupId>
    <artifactId>ignite-spring-data</artifactId>
    <version>2.8.1</version>
</dependency>

接下来贴出Ignite的配置类IgniteConfig,通过动态IP发现绑定到本地的Ignite服务,同时创建实例与缓存供本地访问:


@Configuration
class IgniteConfig {

    @Bean
    public Ignite igniteInstance() {

        tcpDiscoverySpi spi = new TcpDiscoverySpi();
        TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder();
        ipFinder.setAddresses(Arrays.asList("127.0.0.1:47500"));
        spi.setIpFinder(ipFinder);

        IgniteConfiguration igniteConfig = new IgniteConfiguration();
        igniteConfig.setIgniteInstanceName("TestInstance");
        igniteConfig.setDiscoverySpi(spi);
        igniteConfig.setClientMode(true);

        CacheConfiguration cacheConfig = new CacheConfiguration("TestCache");
        cacheConfig.setIndexedTypes(Long.class, TestObject.class);
        igniteConfig.setCacheConfiguration(cacheConfig);
        return Ignition.start(igniteConfig);
    }
}

用于数据交互的测试类TestObject,注解@QuerySqlField的作用时告诉Ignite后续可以通过id字段发起查询,如果没有此注解也不影响数据的插入,但是查询时会抛出Column not found的异常:


public class TestObject {

    @QuerySqlField(index = true)
    long id;
    String name;

    public TestObject(long id, String name) {

        this.id = id;
        this.name = name;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

通过实现IgniteRepository来创建查询方式:


@RepositoryConfig(cacheName = "TestCache")
public interface TestRepository extends IgniteRepository<TestObject, Long> {

    TestObject findById(long id);
}

再下来是用于测试的接口及其对应实现:


public interface TestService {

    TestObject save(TestObject testObject);

    TestObject findTestObjectById(long id);
}

@Service
public class TestServiceImpl implements TestService {

    @Autowired TestRepository testRepository;

    public TestObject save(TestObject testObject) {

        return testRepository.save(testObject.getId(), testObject);
    }

    public TestObject findTestObjectById(long id) {

        return testRepository.findById(id);
    }
}

倒数第二步是编写用于测试的controller层:


@RestController
public class TestController {

    @Autowired
    TestService testService;

    @RequestMapping("/test")
    public TestObject savePerson(@RequestParam(value = "id") long id, @RequestParam(value = "name") String name) {

        return testService.save(new TestObject(id, name));
    }

    @RequestMapping("/find")
    public TestObject findByCode(@RequestParam(value = "id") long id) {

        return testService.findTestObjectById(id);
    }
}

启动类中需要注意添加注解@EnableIgniteRepositories,否则应用是无法识别通过@RepositoryConfig修饰的Bean:


@SpringBootApplication
@EnableIgniteRepositories
public class IgniteApplication {

    public static void main(String[] args) {

        SpringApplication.run(IgniteApplication.class, args);
    }
}

启动应用后通过postman进行测试验证,首先创建一个TestObject的实例并塞入Ignite:

接下来通过id=12032进行查询:

成功返回!

整个实践过程中踩了不少坑,也是希望这篇随笔能为后面学习这块内容的同学节省一些时间吧。

参考资料:

https://ignite.apache.org/

https://www.oschina.net/p/apache-ignite?hmsr=aladdin1e1

https://www.infoq.cn/article/apache-ignite-explorer

https://blog.csdn.net/ltl112358/article/details/79399026

https://blog.csdn.net/qq_35051298/article/details/81452550

https://stackoverflow.com/questions/52652162/ignite-wont-start-with-spring-boot-2-0-5-h2-property-nested-joins-doesnt-exi

http://cn.voidcc.com/question/p-ofvlepsc-dr.html

到此这篇关于SpringBoot整合Apache Ignite的实现的文章就介绍到这了,更多相关SpringBoot整合Apache Ignite内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: SpringBoot整合Apache Ignite的实现

本文链接: https://lsjlt.com/news/154645.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SpringBoot整合Apache Ignite的实现
    关于Ignite的介绍,这边推荐三个链接进行学习了解。 https://ignite.apache.org/,首选还是官网,不过是英文版,如果阅读比较吃力可以选择下方两个链接。 ht...
    99+
    2024-04-02
  • SpringBoot怎么整合Apache Pulsar
    这篇文章主要介绍了SpringBoot怎么整合Apache Pulsar的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot怎么整合Apache Pulsar文章都会有所收获,...
    99+
    2023-07-05
  • SpringBoot整合Apache Pulsar教程示例
    目录正文准备工作创建 SpringBoot 项目添加 Maven 依赖编写消息生产者编写消息消费者测试总结正文 推荐一个基于SpringBoot开发的全平台数据(数据库管理工具)功...
    99+
    2023-03-10
    SpringBoot整合Apache Pulsar SpringBoot 整合
  • SpringBoot整合Activiti7的实现代码
    Activiti7发布正式版之后,它与SpringBoot2.x已经完全支持整合开发。我们可以将Activiti7与SpringBoot整合开发的坐标引入到工程中,从而达到SpringBoot支持Activti7整合。 ...
    99+
    2022-06-04
    SpringBoot整合Activiti7 SpringBoot Activiti7
  • SpringBoot整合log4j2日志的实现
    目录关于日志级别 为什么选用log4j2排除 spring-boot 自带的 logback 依赖 添加 log4j2 依赖 配置文件节点解析 根节点Configuration Ap...
    99+
    2024-04-02
  • SpringBoot整合Drools的实现步骤
    目录Drools有什么用 SpringBoot整合Drools初步实战 1.导入Maven依赖2.编写配置类3.resources目录新建rules目录 4.新建实体5.编写规则文件...
    99+
    2024-04-02
  • SpringBoot整合MongoDB的实现代码
    目录一、添加Maven依赖二、application.yml配置三、代码中使用Mongo1.Mongo适用场景2.以我最近博客开发的一个联系我为例(这里我使用Mongo)MongoD...
    99+
    2024-04-02
  • SpringBoot整合MongoDB的实现步骤
    目录一、技术介绍 1.MongoDB是什么? 二、使用步骤 1.引入maven库 2.具体使用示例 3.配置文件 4.单元测试 总结 一、技术介绍 1.MongoDB是什么? M...
    99+
    2024-04-02
  • Springboot整合FreeMarker的实现示例
    目录一、项目搭建1、新建模块2、导入依赖 :将不相关的依赖删掉3、新建软件包,放入student实体类4、新建StudentMapper接口5、Springboot04Applica...
    99+
    2024-04-02
  • springboot 整合 clickhouse的实现示例
    目录前言前置准备使用jdbc方式操作clickhouse与springboot的整合代码完整整合步骤前言 了解了clickhouse的基础概念和相关的理论之后,本篇将通过实例代码演示...
    99+
    2024-04-02
  • SpringBoot整合Redis的实现示例
    目录1.需求说明2.整合实现2.1.创建Springboot工程2.2.redis配置3.编写测试类4.注意事项和细节1.需求说明 在 springboot 中 , 整合 redis...
    99+
    2023-01-28
    SpringBoot整合Redis SpringBoot Redis整合
  • SpringBoot整合WebService的实现示例
    目录SpringBoot搭建WebService程序一、定义规范接口二、搭建WebService服务端三、搭建WebService客户端WebService是一种传统的SOA技术架构...
    99+
    2024-04-02
  • SpringBoot 整合mapstruct的实现步骤
    目录前言mapstruct 使用来干什么的?mapstruct 相对于BeanUtils的优势在哪?编码引入依赖创建 DTO、VO运行测试用例怎么解决mapstruct 失效呢?ma...
    99+
    2024-04-02
  • SpringBoot整合Pulsar的实现示例
    目录一、添加pom.xml依赖二、Pulsar 参数类三、Pulsar 配置类四、不同消费数据类型的监听器五、Pulsar的核心服务类六、Pulsar整合Spring Cloud一、...
    99+
    2024-04-02
  • SpringBoot整合Ehcache3的实现步骤
    目录前言缓存配置maven引用个性化配置代码注入配置缓存操作缓存预热更新操作查询操作缓存与数据库数据一致性前言 公司部门老项目要迁移升级java版本,需要进行缓存相关操作,原框架未支...
    99+
    2024-04-02
  • SpringBoot整合JWT的实现示例
    目录一. JWT简介二. Java实现JWT(SpringBoot方式整合)JWT总结一. JWT简介 1. 什么是JWT? JWT(JSON Web Token)是为了在...
    99+
    2024-04-02
  • IDEA整合Dubbo+Zookeeper+SpringBoot实现
    目录1. 提出需求2. 环境准备3. 业务接口整合4. 服务提供者5. 服务消费者6. 测试7. 最后附上另外两种配置文件整合方式7.1 XML整合配置文件7.2 配置类整合本文主要...
    99+
    2024-04-02
  • springboot 整合 dubbo 的实现组聚合详情
    目录消费者自定义聚合策略如何自定义 dubbo 聚合策略?提供者接口及其实现表结构及数据消费者 yml 文件配置: dubbo: application: name: d...
    99+
    2024-04-02
  • springboot整合spring-retry的实现示例
    目录1、背景2、解决方案2.1 pom文件2.2 applicat启动类2.3 controller类2.4 service测试类(重点)2.5 项目启动2.6 使用swagger进...
    99+
    2024-04-02
  • SpringBoot整合OpenApi的实践
    目录SpringBoot整合OpenApiOpenAPI依赖编写配置类改造优化OpenAPI常用注解介绍实体类controller类演示网上经常可以看到OpenAPI和Swagger...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作