1.官网下载rope源码 ,本机idea打开。https://gitee.com/starblues/rope/wikis
2.设置淘宝镜像
nodeJS的资源仓库在国内使用过程中,偶尔会遇到各种资源问题,通常设置为淘宝的镜像,网上很多说法是安装淘宝镜像,即
$ npm install -g cnpm --registry=https://registry.npm.taobao.org
然后再用到npm install的时候,使用cnpm install进行安装node_modules。
但是该种方式,在集成到IDE的时候,例如如果想在IDEA中,直接使用node的命令,进行install,就行不通了。这个时候,可以使用第二种方式:
npm config set registry https://registry.npm.taobao.org
更改npm的config的registry 为淘宝镜像,然后再使用npm的时候,就是从淘宝镜像拉取数据了
3.idea打开rope项目。
4.命令行进入到rope-web文件夹,删除node_modules文件夹,然后命令行执行cnpm install重新下载所有依赖。
5.打开web页面,创建流程执行ETL任务。地址:http://127.0.0.1:8080/admin 用户名/密码:admin/12345
创建流程步骤
(1)配置流程相关基本信息
流程存储器指定流程以什么形式存储,是json文件、yml文件还是直接存在内存里,前两个持久化存储,内存不是持久化,关闭rope程序就消失。
是否启动流程 :创建完流程是否启动流程
流程id唯一标识此id;流程名称用来区别不同的流程
流程数存储在rope项目目录下。
(2)配置输入。配置完一个选项,必须点击提交。
输入配置:指定读取者读数据的周期。这个可以自己扩展实现,也可以使用已经实现的Input。
读取者:指定如何读取数据。可以通过实现接口:
com.starblues.rope.core.input.reader.Reader类自定义具体实现。
(3)配置处理者
(4)配置输出和写入者。 此时点击下一步即可保存流程。在流程首页即可操作流程启动、关闭、删除等。
如果选择简单输出到本地文件, 请注意文件路径需要指定到文件名。
自结
流程用来指定数据读取的整个过程,需要指定输入(Input Reader)、输出(Output Writer)、数据处理(Handler)。Reader指定怎么读取数据,Input指定Reader读取的时间周期;Writer指定如何写入数据,Output指定数据如何写出。
如果要定制化Input Reader等,既可以在rope已经有的插件中定义新的Input Reader类,也可以新建插件,然后在插件中定义输入、输出、数据处理等程序。定义好的输入、输出、数据处理等会在构建流程时出现在选项中。
6.流程中使用指定数据库
(1)增加数据库key:rope-databases-plugin模块 ---- resources--databases-plugin.yml增加数据库配置。注意:oracle url最后不是数据库,是sid
下载指定数据库的jar包,放在本地计算机,然后指定具体路径。
注意:每次修改都需要在根目录重新执行mvn命令 mvn clean install -Dmaven.test.skip=true
(2)web页面读取者选择数据库复杂读取者。
上一步配置的key此时在 数据库连接key可以看到,选择此自己配置的数据库key;
填写好查询sql
(3)选择数据处理者。
(4) 选择数据写入者
7.编写插件
参考官网文档编写扩展 https://gitee.com/starblues/rope/wikis/pages?sort_id=1865022&doc_id=507971
新建插件:rope-plugins 模块上右键选择 New ---- Module,新建一个Maven类型的Module。然后按照官网文档要求配置pom、properties文件,来指定插件的基础信息。
插件内新建处理类:插件内可以编写Input、Output、Reader、Writer、Handler等对数据进行ETL处理。都是通过实现指定接口或类的方法即可实现对数据的处理,不需要其他配置。
比如Reader通过读取数据库配置文件获取数据库连接,通过查询语句查询数据,将数据封装到Record类中,传给Handler处理,最后传给Writer处理。
rope使用Jdbi来处理数据库接口,Jdbi3官方教程。Jdbi 3 官网。
Jdbi 3 简单的一些API示例
(1)使用DataSource创建Jdbi对象。DataSource可以通过Druid读取配置文件获取。
DataSource ds = Jdbi jdbi = Jdbi.create(ds);
(2)使用Handle获取查询数据
如果查询返回数据,使用jdbi.withHandle():
List<String> names = jdbi.withHandle(handle -> handle.createQuery("select name from contacts") .mapTo(String.class) .list()); assertThat(names).contains("Alice", "Bob");
如果查询没有返回数据,使用
Jdbi.useHandle(HandleConsumer)
:jdbi.useHandle(handle -> { handle.execute("create table contacts (id int primary key, name varchar(100))"); handle.execute("insert into contacts (id, name) values (?, ?)", 1, "Alice"); handle.execute("insert into contacts (id, name) values (?, ?)", 2, "Bob"); });
8.新增加插件、Input、Output、Reader、Writer、Handler等之后,需要在根目录或者修改代码的模块内重新执行mvn命令打包,此时新增的功能才能实现。
mvn clean install -Dmaven.test.skip=true
注意:修改代码、配置文件等,需要重新执行mvn命令,否则不生效。
9.遇到问题
问题一
Downloading binary from https://cdn.npm.taobao.org/dist/node-sass/v4.9.4/win32-x64-83_binding.node
Cannot download "https://cdn.npm.taobao.org/dist/node-sass/v4.9.4/win32-x64-83_binding.node":
解决方法:https://blog.csdn.net/u014163312/article/details/116175991
问题二
Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.1.10.RELEASE:repackage (repackage) on project rope: Execution repackage of goal org.springframework.boot:spring-boot-maven-plugin:2.1.10.RELEASE:repackage failed:Plugin org.springframework.boot:spring-boot-maven-plugin:2.1.10.RELEASE or one ofits dependencies could not be resolved....... Could not transfer artifact org.apache.maven.shared:maven-shared-utils:jar:3.2.0 from/to central (https
://repo.maven.apache.org/maven2)解决办法:修改maven镜像为阿里云 https://www.jianshu.com/p/dddc8b8c5c74
问题三
Caused by: java.lang.ClassNotFoundException: io.netty.channel.SimpleChannelInboundHandler
启动时需要配置 user classpath of module值为 rope-runner。可以通过idea右上角点击 Edit configuration--spring boot来指定 或者ApplicationRunner右键---Create ‘’来配置。
问题四
org.pf4j.PluginRuntimeException: Cannot find the manifest path
不要将rope-plugins设置为module,删除掉src目录即可
问题五
cannot find class xxx xxx为新建的插件类
命令行进入到插件目录,然后mvn clean install生成target即可
问题六
如果前端没有退出,后端重启,前端报错位置错误
此时 右上角退出系统 重新登录即可
问题七
Project xxx is duplicated in the reactor
解决:查找所有模块的pom文件,XXX模块重复配置了