Dataway 是基于 DataQL 服务聚合能力,为应用提供的一个接口配置工具。可以让使用者无需开发任何代码就可以配置一个满足需求的接口。
Dataway 是 Hasor 生态中的一员,因此在 Spring 中使用 Dataway 首先要做的就是打通两个生态。根据官方文档中推荐的方式我们将 Hasor 和 Spring Boot 整合起来。

使用:

1、依赖

  1. <!-- https://mvnrepository.com/artifact/net.hasor/hasor-spring -->
  2. <dependency>
  3. <groupId>net.hasor</groupId>
  4. <artifactId>hasor-spring</artifactId>
  5. <version>4.2.5</version>
  6. </dependency>
  7. <!-- https://mvnrepository.com/artifact/net.hasor/hasor-dataway -->
  8. <dependency>
  9. <groupId>net.hasor</groupId>
  10. <artifactId>hasor-dataway</artifactId>
  11. <version>4.2.5</version>
  12. </dependency>

hasor-spring 负责 Spring 和 Hasor 框架之间的整合。
hasor-dataway 是工作在 Hasor 之上,利用 hasor-spring 我们就可以使用 dataway了。

2、配置

2.1、配置 Dataway

dataway 会提供一个界面让我们配置接口,这一点类似 Swagger 只要jar包集成就可以实现接口配置。找到我们 springboot 项目的配置文件 application.yml

  1. # 是否启用 Dataway 功能(必选:默认false)
  2. HASOR_DATAQL_DATAWAY: true
  3. # 是否开启 Dataway 后台管理界面(必选:默认false)
  4. HASOR_DATAQL_DATAWAY_ADMIN: true
  5. # dataway API工作路径(可选,默认:/api/)
  6. HASOR_DATAQL_DATAWAY_API_URL: /api/
  7. # dataway-ui 的工作路径(可选,默认:/interface-ui/)
  8. HASOR_DATAQL_DATAWAY_UI_URL: /interface-ui/
  9. # SQL执行器方言设置(可选,建议设置)
  10. HASOR_DATAQL_FX_PAGE_DIALECT: mysql

Dataway 一共涉及到 5个可以配置的配置项,但不是所有配置都是必须的。

其中HASOR_DATAQL_DATAWAY、HASOR_DATAQL_DATAWAY_ADMIN 两个配置是必须要打开的,默认情况下 Datawaty 是不启用的。

2.2、初始化数据表

Dataway 需要两个数据表才能工作,下面是这两个数据表的建表语句。下面这个 SQL 可以在 dataway的依赖 jar 包中 “META-INF/hasor-framework/mysql” 目录下面找到,创建数据表的语句是用 mysql 语法写的

  1. drop table interface_info;
  2. CREATE TABLE interface_info (
  3. api_id varchar(64) NOT NULL COMMENT 'ID',
  4. api_method varchar(12) NOT NULL COMMENT 'HttpMethod:GET、PUT、POST',
  5. api_path varchar(512) NOT NULL COMMENT '拦截路径',
  6. api_status varchar(4) NOT NULL COMMENT '状态:-1-删除, 0-草稿,1-发布,2-有变更,3-禁用',
  7. api_comment varchar(255) NOT NULL COMMENT '注释',
  8. api_type varchar(24) NOT NULL COMMENT '脚本类型:SQL、DataQL',
  9. api_script mediumtext NOT NULL COMMENT '查询脚本:xxxxxxx',
  10. api_schema mediumtext NOT NULL COMMENT '接口的请求/响应数据结构',
  11. api_sample mediumtext NOT NULL COMMENT '请求/响应/请求头样本数据',
  12. api_option mediumtext NOT NULL COMMENT '扩展配置信息',
  13. api_create_time varchar(32) NOT NULL COMMENT '创建时间',
  14. api_gmt_time varchar(32) NOT NULL COMMENT '修改时间',
  15. PRIMARY KEY (api_id),
  16. UNIQUE KEY uk_interface_info (api_path)
  17. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Dataway 中的API';
  18. drop table interface_release;
  19. CREATE TABLE interface_release (
  20. pub_id varchar(64) NOT NULL COMMENT 'Publish ID',
  21. pub_api_id varchar(64) NOT NULL COMMENT '所属API ID',
  22. pub_method varchar(12) NOT NULL COMMENT 'HttpMethod:GET、PUT、POST',
  23. pub_path varchar(512) NOT NULL COMMENT '拦截路径',
  24. pub_status varchar(4) NOT NULL COMMENT '状态:-1-删除, 0-草稿,1-发布,2-有变更,3-禁用',
  25. pub_comment varchar(255) NOT NULL COMMENT '注释',
  26. pub_type varchar(24) NOT NULL COMMENT '脚本类型:SQL、DataQL',
  27. pub_script mediumtext NOT NULL COMMENT '查询脚本:xxxxxxx',
  28. pub_script_ori mediumtext NOT NULL COMMENT '原始查询脚本,仅当类型为SQL时不同',
  29. pub_schema mediumtext NOT NULL COMMENT '接口的请求/响应数据结构',
  30. pub_sample mediumtext NOT NULL COMMENT '请求/响应/请求头样本数据',
  31. pub_option mediumtext NOT NULL COMMENT '扩展配置信息',
  32. pub_release_time varchar(32) NOT NULL COMMENT '发布时间(下线不更新)',
  33. PRIMARY KEY (pub_id),
  34. KEY idx_interface_release_api (pub_api_id),
  35. KEY idx_interface_release_path (pub_path)
  36. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Dataway API 发布历史。';
  37. drop index idx_interface_release on interface_release;
  38. create index idx_interface_release on interface_release (pub_api_id);

3、配置数据源

作为 Spring Boot 项目有着自己完善的数据库方面工具支持。我们这次采用 druid + mysql + spring-boot-starter-jdbc 的方式。

3.1、依赖

  1. <dependency>
  2. <groupId>mysql</groupId>
  3. <artifactId>mysql-connector-java</artifactId>
  4. <version>5.1.49</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.alibaba</groupId>
  8. <artifactId>druid</artifactId>
  9. <version>1.1.23</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.springframework.boot</groupId>
  13. <artifactId>spring-boot-starter-jdbc</artifactId>
  14. </dependency>
  15. <dependency>
  16. <groupId>com.alibaba</groupId>
  17. <artifactId>druid-spring-boot-starter</artifactId>
  18. <version>1.1.10</version>
  19. </dependency>

3.2、配置

  1. spring:
  2. datasource:
  3. driver-class-name: com.mysql.jdbc.Driver
  4. type: com.alibaba.druid.pool.DruidDataSource
  5. url: jdbc:mysql://localhost:3306/dataway-demo?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true
  6. username: root
  7. password: 123456
  8. druid:
  9. filter:
  10. stat:
  11. log-slow-sql: true
  12. slow-sql-millis: 1
  13. initial-size: 3
  14. max-active: 10
  15. max-wait: 60000
  16. min-idle: 3
  17. stat-view-servlet:
  18. login-password: admin
  19. login-username: admin

4、把数据源设置到 Hasor 容器中

Spring Boot Hasor 本是两个独立的容器框架,我们做整合之后为了使用 Dataway 的能力需要把 Spring 中的数据源设置到 Hasor 中。

首先新建一个 Hasor 的 模块,并且将其交给 Spring 管理。然后把数据源通过 Spring 注入进来。

  1. @DimModule
  2. @Component
  3. public class ExampleModule implements SpringModule {
  4. @Autowired
  5. private DataSource dataSource = null;
  6. @Override
  7. public void loadModule(ApiBinder apiBinder) throws Throwable {
  8. //DataSource form Spring boot into Hasor
  9. apiBinder.installModule(new JdbcModule(Level.Full, this.dataSource));
  10. }
  11. }

Hasor 启动的时候会调用 loadModule 方法,在这里再把 DataSource 设置到 Hasor 中。

5、在SprintBoot 中启用 Hasor

  1. @EnableHasor
  2. @EnableHasorWeb
  3. @SpringBootApplication(scanBasePackages = {"com.zukxu.dataway"})
  4. public class DataWayApplication {
  5. public static void main(String[] args) {
  6. SpringApplication.run(DataWayApplication.class);
  7. }
  8. }

6、启动

启动应用,并输入地址进行访问
根据配置的地址【/interface-ui/】进行访问

7、新建接口

Dataway 提供了两种语言模式,我们可以使用强大的 DataQL 查询语言,也可以直接使用 SQL 语言(在 Dataway 内部 SQL 语言也会被转换为 DataQL 的形式执行。)
image.png
发布完毕
image.png
浏览器直接请求接口地址就能得到返回值

Dataway只适合做简单的查询语句和删除语句

附录: