关于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

Spring Boot 整合 Apache Ignite的更多相关文章

  1. Spring Boot 整合 Apache Dubbo

    Apache Dubbo是一款高性能.轻量级的开源 Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现. 注意,是 Apache Dubb ...

  2. Spring Boot 整合 Elasticsearch,实现 function score query 权重分查询

    摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 预见未来最好的方式就是亲手创造未来 – <史蒂夫·乔布斯传> 』 运行环境: ...

  3. spring boot整合jsp的那些坑(spring boot 学习笔记之三)

    Spring Boot 整合 Jsp 步骤: 1.新建一个spring boot项目 2.修改pom文件 <dependency>            <groupId>or ...

  4. Spring Kafka和Spring Boot整合实现消息发送与消费简单案例

    本文主要分享下Spring Boot和Spring Kafka如何配置整合,实现发送和接收来自Spring Kafka的消息. 先前我已经分享了Kafka的基本介绍与集群环境搭建方法.关于Kafka的 ...

  5. spring boot整合Hadoop

    最近需要用spring boot + mybatis整合hadoop,其中也有碰到一些坑,记录下来方便后面的人少走些弯路. 背景呢是因为需要在 web 中上传文件到 hdfs ,所以需要在spring ...

  6. (转)Spring Boot (十四): Spring Boot 整合 Shiro-登录认证和权限管理

    http://www.ityouknow.com/springboot/2017/06/26/spring-boot-shiro.html 这篇文章我们来学习如何使用 Spring Boot 集成 A ...

  7. spring boot整合servlet、filter、Listener等组件方式

    创建一个maven项目,然后此项目继承一个父项目:org.springframework.boot 1.创建一个maven项目: 2.点击next后配置父项目及版本号 3.点击finish后就可查看p ...

  8. Spring Boot初识(2)- Spring Boot整合Mybaties

    一.本文介绍 首先读这篇文章之前如果没有接触过Spring Boot可以看一下之前的文章,并且读这篇文章还需要你至少能写基本的sql语句.我在写这篇文章之前也想过到底是选择JPA还是Mybaties作 ...

  9. Spring boot 整合hive-jdbc导致无法启动的问题

    使用Spring boot整合Hive,在启动Spring boot项目时,报出异常: 经过排查,是maven的包冲突引起的,具体做法,排除:jetty-all.hive-shims依赖包.对应的po ...

随机推荐

  1. 《网页布局基础篇》HTML+CSS单列布局--水平居中,垂直居中,水平垂直居中

    https://blog.csdn.net/panlu666_pl/article/details/66480433 一.水平居中 子元素在父元素中水平居中 1.使用 text-align和inlin ...

  2. centos7环境变量配置错误以至于命令不可使用

    2021-07-16 问题: centos7在配置环境变量的时候少打了$,导致很多命令不能使用 解决方法: 在命令行输入: export PATH=/usr/local/sbin:/usr/local ...

  3. Netty ServerBootstrap如何绑定端口

    这篇讲netty服务端ServerBootstrap如何启动 前言 BootStrap在netty的应用程序中负责引导服务器和客户端.netty包含了两种不同类型的引导: 使用服务器的ServerBo ...

  4. kubernetes使用jenkins Pipeline 部署Nginx

    文章原文 环境需求 kubernetes 未安装参考使用kubeadm安装kubernetes 1.21 jenkins github/gitee/gitlab 静态页面 镜像仓库(我使用的 hub. ...

  5. 20210819 Emotional Flutter,Medium Counting,Huge Counting,字符消除2

    考场 T1 一下想到了这题,将白块缩短 \(s\) 后维护类似的区间即可. T2 T3 俩计数,直接跳了. T4 的可行 \(t\) 集合相同相当与从 \(n\) 往前跳 kmp 数组,途径点相同,从 ...

  6. 为老的vueCli项目添加vite支持

    1.前言 接手公司的某个项目已经两年了,现在每次启动项目都接近1分钟,hmr也要好几秒的时间,but vite2发布之后就看到了曙光,但是一直没有动手进行升级,昨天终于忍不住了,升级之后几秒钟就完成了 ...

  7. Devexpress主题/皮肤

    如何在C#中使用DevExpress皮肤管理器.步骤1: 单击 新建项目,然后选择左侧的Visual C#,然后 视窗 ,然后选择 Windows窗体应用程序.将您的项目命名为" SkinD ...

  8. vue+element+echarts饼状图+可折叠列表

    html: <div id="echartsDiv" style="width: 48%; height: 430px; float: left;"> ...

  9. Swagger-初见

    目录 Swagger简介 SpringBoot集成Swagger 配置Swagger 配置扫描接口 配置Swagger开关 配置API分组 实体配置 常用注解 Swagger简介 前后端分离 前端 - ...

  10. Windows 10 之 WSL 2

    Windows Subsystem for Linux(WSL)无疑大大提升了Windows下程序开发的体验. WSL 2向开发者提供的完整的系统调用兼容,使得许多无法在WSL 1中安装的应用,如Do ...