乐趣区

关于java:绝了Dataway-让-Spring-Boot-不再需要-ControllerServiceDAOMapper

作者:哈库纳 \
起源:my.oschina.net/ta8210/blog/3234639

Dataway 介绍

Dataway 是基于 DataQL 服务聚合能力,为利用提供的一个接口配置工具。使得使用者无需开发任何代码就配置一个满足需要的接口。整个接口配置、测试、冒烟、公布。一站式都通过 Dataway 提供的 UI 界面实现。UI 会以 Jar 包形式提供并集成到利用中并和利用共享同一个 http 端口,利用无需独自为 Dataway 开拓新的治理端口。

这种内嵌集成形式模式的长处是,能够使得大部分老我的项目都能够在无侵入的状况下间接利用 Dataway。进而改良老我的项目的迭代效率,大大减少企业我的项目研发老本。

Dataway 工具化的提供 DataQL 配置能力。这种研发模式的改革使得,相当多的需要开发场景只须要配置即可实现交付。从而防止了从数据存取到前端接口之间的一系列开发工作,例如:Mapper、BO、VO、DO、DAO、Service、Controller 通通不在须要。

Dataway 是 Hasor 生态中的一员,因而在 Spring 中应用 Dataway 首先要做的就是买通两个生态。

依据官网文档中举荐的形式咱们将 Hasor 和 Spring Boot 整合起来。

第一步:引入相干依赖

<dependency>
    <groupId>net.hasor</groupId>
    <artifactId>hasor-spring</artifactId>
    <version>4.1.6</version>
</dependency>
<dependency>
    <groupId>net.hasor</groupId>
    <artifactId>hasor-dataway</artifactId>
    <version>4.1.6</version>
</dependency>

hasor-spring 负责 Spring 和 Hasor 框架之间的整合。

hasor-dataway 是工作在 Hasor 之上,利用 hasor-spring 咱们就能够应用 dataway 了。

第二步:配置 Dataway,并初始化数据表

dataway 会提供一个界面让咱们配置接口,这一点相似 Swagger 只有 jar 包集成就能够实现接口配置。

找到咱们 springboot 我的项目的配置文件 application.properties

Spring Boot 根底就不介绍了,举荐看这个:https://github.com/javastacks…

# 是否启用 Dataway 性能(必选:默认 false)HASOR_DATAQL_DATAWAY=true

# 是否开启 Dataway 后盾治理界面(必选:默认 false)HASOR_DATAQL_DATAWAY_ADMIN=true

# dataway  API 工作门路(可选,默认:/api/)HASOR_DATAQL_DATAWAY_API_URL=/api/

# dataway-ui 的工作门路(可选,默认:/interface-ui/)HASOR_DATAQL_DATAWAY_UI_URL=/interface-ui/

# SQL 执行器方言设置(可选,倡议设置)HASOR_DATAQL_FX_PAGE_DIALECT=mysql

Dataway 一共波及到 5 个能够配置的配置项,但不是所有配置都是必须的。

其中 HASOR_DATAQL_DATAWAYHASOR_DATAQL_DATAWAY_ADMIN 两个配置是必须要关上的,默认状况下 Datawaty 是不启用的。

Dataway 须要两个数据表能力工作,上面是这两个数据表的简表语句。上面这个 SQL 能够在 dataway 的依赖 jar 包中“META-INF/hasor-framework/mysql”目录上面找到,建表语句是用 mysql 语法写的。

其它数据库的建表语句请参看官网阐明手册:https://www.hasor.net/web/dataway/for_boot.html#mysql

CREATE TABLE `interface_info` (`api_id`          int(11)      NOT NULL AUTO_INCREMENT   COMMENT 'ID',
    `api_method`      varchar(12)  NOT NULL                  COMMENT 'HttpMethod:GET、PUT、POST',
    `api_path`        varchar(512) NOT NULL                  COMMENT '拦挡门路',
    `api_status`      int(2)       NOT NULL                  COMMENT '状态:0 草稿,1 公布,2 有变更,3 禁用',
    `api_comment`     varchar(255)     NULL                  COMMENT '正文',
    `api_type`        varchar(24)  NOT NULL                  COMMENT '脚本类型:SQL、DataQL',
    `api_script`      mediumtext   NOT NULL                  COMMENT '查问脚本:xxxxxxx',
    `api_schema`      mediumtext       NULL                  COMMENT '接口的申请 / 响应数据结构',
    `api_sample`      mediumtext       NULL                  COMMENT '申请 / 响应 / 申请头样本数据',
    `api_option`      mediumtext       NULL                  COMMENT '扩大配置信息',
    `api_create_time` datetime     DEFAULT CURRENT_TIMESTAMP COMMENT '创立工夫',
    `api_gmt_time`    datetime     DEFAULT CURRENT_TIMESTAMP COMMENT '批改工夫',
    PRIMARY KEY (`api_id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COMMENT='Dataway 中的 API';

CREATE TABLE `interface_release` (`pub_id`          int(11)      NOT NULL AUTO_INCREMENT   COMMENT 'Publish ID',
    `pub_api_id`      int(11)      NOT NULL                  COMMENT '所属 API ID',
    `pub_method`      varchar(12)  NOT NULL                  COMMENT 'HttpMethod:GET、PUT、POST',
    `pub_path`        varchar(512) NOT NULL                  COMMENT '拦挡门路',
    `pub_status`      int(2)       NOT NULL                  COMMENT '状态:0 无效,1 有效(可能被下线)',
    `pub_type`        varchar(24)  NOT NULL                  COMMENT '脚本类型:SQL、DataQL',
    `pub_script`      mediumtext   NOT NULL                  COMMENT '查问脚本:xxxxxxx',
    `pub_script_ori`  mediumtext   NOT NULL                  COMMENT '原始查问脚本,仅当类型为 SQL 时不同',
    `pub_schema`      mediumtext       NULL                  COMMENT '接口的申请 / 响应数据结构',
    `pub_sample`      mediumtext       NULL                  COMMENT '申请 / 响应 / 申请头样本数据',
    `pub_option`      mediumtext       NULL                  COMMENT '扩大配置信息',
    `pub_release_time`datetime     DEFAULT CURRENT_TIMESTAMP COMMENT '公布工夫(下线不更新)',
    PRIMARY KEY (`pub_id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COMMENT='Dataway API 公布历史。';

create index idx_interface_release on interface_release (pub_api_id);

第三步:配置数据源

作为 Spring Boot 我的项目有着本人欠缺的数据库方面工具反对。咱们这次采纳 druid + mysql + spring-boot-starter-jdbc 的形式。

首先引入依赖

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.30</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.21</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.10</version>
</dependency>

而后减少数据源的配置

# db
spring.datasource.url=jdbc:mysql://xxxxxxx:3306/example
spring.datasource.username=xxxxx
spring.datasource.password=xxxxx
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type:com.alibaba.druid.pool.DruidDataSource
# druid
spring.datasource.druid.initial-size=3
spring.datasource.druid.min-idle=3
spring.datasource.druid.max-active=10
spring.datasource.druid.max-wait=60000
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=admin
spring.datasource.druid.filter.stat.log-slow-sql=true
spring.datasource.druid.filter.stat.slow-sql-millis=1

如果我的项目曾经集成了本人的数据源,那么能够疏忽第三步。

第四步:把数据源设置到 Hasor 容器中

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

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

@DimModule
@Component
public class ExampleModule implements SpringModule {
    @Autowired
    private DataSource dataSource = null;

    @Override
    public void loadModule(ApiBinder apiBinder) throws Throwable {
        // .DataSource form Spring boot into Hasor
        apiBinder.installModule(new JdbcModule(Level.Full, this.dataSource));
    }
}

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

第五步:在 SprintBoot 中启用 Hasor

@EnableHasor()
@EnableHasorWeb()
@SpringBootApplication(scanBasePackages = { "net.example.hasor"})
public class ExampleApplication {public static void main(String[] args) {SpringApplication.run(ExampleApplication.class, args);
    }
}

这一步非常简单,只须要在 Spring 启动类上减少两个注解即可。

第六步:启动利用

利用在启动过程中会看到 Hasor Boot 的欢送信息

 _    _                        ____              _
| |  | |                      |  _             | |
| |__| | __ _ ___  ___  _ __  | |_) | ___   ___ | |_
|  __  |/ _` / __|/ _ | '__| |  _ < / _  / _ | __|
| |  | | (_| __  (_) | |    | |_) | (_) | (_) | |_
|_|  |_|__,_|___/___/|_|    |____/ ___/ ___/ __|

在前面的日志中还能够看到相似上面这些日志。

2020-04-14 13:52:59.696 [main] INFO  n.h.core.context.TemplateAppContext - loadModule class net.hasor.dataway.config.DatawayModule
2020-04-14 13:52:59.697 [main] INFO  n.hasor.dataway.config.DatawayModule - dataway api workAt /api/
2020-04-14 13:52:59.697 [main] INFO  n.h.c.e.AbstractEnvironment - var -> HASOR_DATAQL_DATAWAY_API_URL = /api/.
2020-04-14 13:52:59.704 [main] INFO  n.hasor.dataway.config.DatawayModule - dataway admin workAt /interface-ui/
2020-04-14 13:52:59.716 [main] INFO  net.hasor.core.binder.ApiBinderWrap - mapingTo[901d38f22faa419a8593bb349905ed0e] -> bindType‘class net.hasor.dataway.web.ApiDetailController’mappingTo:‘[/interface-ui/api/api-detail]’.
2020-04-14 13:52:59.716 [main] INFO  net.hasor.core.binder.ApiBinderWrap - mapingTo[c6eb9f3b3d4c4c8d8a4f807435538172] -> bindType‘class net.hasor.dataway.web.ApiHistoryListController’mappingTo:‘[/interface-ui/api/api-history]’.
2020-04-14 13:52:59.717 [main] INFO  net.hasor.core.binder.ApiBinderWrap - mapingTo[eb841dc72ad54023957233ef602c4327] -> bindType‘class net.hasor.dataway.web.ApiInfoController’mappingTo:‘[/interface-ui/api/api-info]’.
2020-04-14 13:52:59.717 [main] INFO  net.hasor.core.binder.ApiBinderWrap - mapingTo[96aebb46265245459ae21d558e530921] -> bindType‘class net.hasor.dataway.web.ApiListController’mappingTo:‘[/interface-ui/api/api-list]’.
2020-04-14 13:52:59.718 [main] INFO  net.hasor.core.binder.ApiBinderWrap - mapingTo[7467c07f160244df8f228321f6262d3d] -> bindType‘class net.hasor.dataway.web.ApiHistoryGetController’mappingTo:‘[/interface-ui/api/get-history]’.
2020-04-14 13:52:59.719 [main] INFO  net.hasor.core.binder.ApiBinderWrap - mapingTo[97d8da5363c741ba99d87c073a344412] -> bindType‘class net.hasor.dataway.web.DisableController’mappingTo:‘[/interface-ui/api/disable]’.
2020-04-14 13:52:59.720 [main] INFO  net.hasor.core.binder.ApiBinderWrap - mapingTo[8ddc3316ef2642dfa4395ca8ac0fff04] -> bindType‘class net.hasor.dataway.web.SmokeController’mappingTo:‘[/interface-ui/api/smoke]’.
2020-04-14 13:52:59.720 [main] INFO  net.hasor.core.binder.ApiBinderWrap - mapingTo[cc06c5fb343b471aacedc58fb2fe7bf8] -> bindType‘class net.hasor.dataway.web.SaveApiController’mappingTo:‘[/interface-ui/api/save-api]’.
2020-04-14 13:52:59.720 [main] INFO  net.hasor.core.binder.ApiBinderWrap - mapingTo[7915b2b1f89a4e73891edab0264c9bd4] -> bindType‘class net.hasor.dataway.web.PublishController’mappingTo:‘[/interface-ui/api/publish]’.
2020-04-14 13:52:59.721 [main] INFO  net.hasor.core.binder.ApiBinderWrap - mapingTo[0cfa34586455414591bdc389bff23ccb] -> bindType‘class net.hasor.dataway.web.PerformController’mappingTo:‘[/interface-ui/api/perform]’.
2020-04-14 13:52:59.721 [main] INFO  net.hasor.core.binder.ApiBinderWrap - mapingTo[37fe4af3e2994acb8deb72d21f02217c] -> bindType‘class net.hasor.dataway.web.DeleteController’mappingTo:‘[/interface-ui/api/delete]’.

当看到“dataway api workAt /api/”、dataway admin workAt /interface-ui/ 信息时,就能够确定 Dataway 的配置曾经失效了。

第七步:拜访接口治理页面进行接口配置

在浏览器中输出“http://127.0.0.1:8080/interfa… 就能够看到期待已久的界面了。

第八步:新建一个接口

Dataway 提供了 2 中语言模式,咱们能够应用弱小的 DataQL 查询语言,也能够间接应用 SQL 语言(在 Dataway 外部 SQL 语言也会被转换为 DataQL 的模式执行。)

首先咱们在 SQL 模式下尝试执行一条 select 查问,立即就能够看到这条 SQL 的查问后果。

同样的形式咱们应用 DataQL 的形式须要这样写:

var query = @@sql()<%
    select * from interface_info
%>
return query()

其中 var query = @@sql()<% … %> 是用来定义 SQL 内部代码块,并将这个定义存入 query 变量名中。<% %> 两头的就是 SQL 语句。

最初在 DataQL 中调用这个代码块,并返回查问后果。

当接口写好之后就能够保留公布了,为了测试不便,我选用 GET 形式。

接口公布之后咱们间接申请:http://127.0.0.1:8080/api/dem…

最初总结

通过下面的几个步骤咱们介绍了如何基于 Spring Boot 我的项目应用 Dataway 来简略的配置接口。

Dataway 的形式的确给人耳目一新,一个接口居然能够如此简略的配置进去无需开发任何一行代码,也不须要做任何 Mapping 实体映射绑定。

最初放几个有用的连贯:

  • Dataway 官网手册:https://www.hasor.net/web/dat…
  • Dataway 在 OSC 上的我的项目地址,欢送珍藏:https://www.oschina.net/p/dat…
  • DataQL 手册地址:https://www.hasor.net/web/dat…
  • Hasor 我的项目的首页:https://www.hasor.net/web/ind…

作者:哈库纳 \
起源:my.oschina.net/ta8210/blog/3234639
近期热文举荐:

1.600+ 道 Java 面试题及答案整顿 (2021 最新版)

2. 终于靠开源我的项目弄到 IntelliJ IDEA 激活码了,真香!

3. 阿里 Mock 工具正式开源,干掉市面上所有 Mock 工具!

4.Spring Cloud 2020.0.0 正式公布,全新颠覆性版本!

5.《Java 开发手册(嵩山版)》最新公布,速速下载!

感觉不错,别忘了顺手点赞 + 转发哦!

退出移动版