内容简介:Dataway介绍 Dataway 是基于 DataQL 服务聚合能力,为应用提供的一个接口配置工具。使得使用者无需开发任何代码就配置一个满足需求的接口。 整个接口配置、测试、冒烟、发布。一站式都通过 Dataway 提供的 UI 界面...
Dataway介绍
Dataway 是基于 DataQL 服务聚合能力,为应用提供的一个接口配置工具。使得使用者无需开发任何代码就配置一个满足需求的接口。 整个接口配置、测试、冒烟、发布。一站式都通过 Dataway 提供的 UI 界面完成。UI 会以 Jar 包方式提供并集成到应用中并和应用共享同一个 http 端口,应用无需单独为 Dataway 开辟新的管理端口。
这种内嵌集成方式模式的优点是,可以使得大部分老项目都可以在无侵入的情况下直接应用 Dataway。进而改进老项目的迭代效率,大大减少企业项目研发成本。
Dataway 工具化的提供 DataQL 配置能力。这种研发模式的变革使得,相当多的需求开发场景只需要配置即可完成交付。 从而避免了从数据存取到前端接口之间的一系列开发任务,例如:Mapper、BO、VO、DO、DAO、Service、Controller 统统不在需要。
Hasor v4.1.4 (2020-04-30)
新增
-
接口可以跨域访问。
-
Dataway 增加 CompilerSpiListener 扩展点,可以自定义 DataQL 编译过程。
-
Dataway 增加 PreExecuteChainSpi 扩展点,可以在 DataQL 执行之前进行干预。配合 ResultProcessChainSpi 可以实现缓存和权限。
-
Dataway 增加 ResultProcessChainSpi 扩展点,可以对DataQL执行的结果进行二次处理。
-
hasor-spring 做整合的时,Hasor-web可以工作在 Filter模式下也可以工作在 SpringWebMVC 拦截器模式下
-
Dataway 新增 DatawayService 界面配置的接口可以在本地应用上用代码发起调用了。
-
issue Dataway 支持配置多个数据源。但一个 DataQL 查询中目前依然只能使用一种数据源。
-
issue Dataway 新增 Oracle 的支持。
-
新增 FRAGMENT_SQL_COLUMN_CASE 选项,可以决定 SQL 执行器的返回结果 key 策略,是全部大写还是全部小写或者满足驼峰。
-
新增 mapKeyToLowerCase、mapKeyToUpperCase、mapKeyToHumpCase 三个函数,对 Map 的 Key 做转换
优化
-
issue 改进 Dataway 在处理 GET 请求时,多个同名参数获取的问题。之前只能拿到数组形态,在于 POST 模式进行对比的时容易产生奇异造成认为是 Bug 的假象。
-
issue hasor-dataql-fx 项目中 ognl 内嵌到 jar包中,减少两个外部依赖 jar。
-
SpiInterceptor 机制有些说不清,改为 SpiJudge(仲裁机制:SPI 仲裁:当同一个 SPI bind 了多个监听器时,仲裁可以决定哪些 SPI 会被调用)
-
hasor-web 支持路径中出现多个连续 / ,例如:
http://127.0.0.1:8080/app/////interface-ui/#/new
。连续的 / 会被折叠成一个。 -
Dataway UI 界面中模式切换会因为 // 但行注释问题产生一些不友好的用户体验。现改成 /**/ 多行注释方式。
修复
-
issue Dateway 4.1.3 版本资源文件缺失问题。
-
issue Dataway 修复 spring boot context_path 不支持的问题。
-
Dataway 当关闭 UI 功能之后接口调用报 NPE 问题。Bug 原因是 Dataway 内置 DataQL 的环境是一个隔离环境,隔离环境的初始化是在 UI 之后。
-
修复 SqlFragment 单行注释判断不识别的问题。
本次更新说一点新鲜的
本次更新带来的众多新特性,例如可以通过 Api前置拦截器做权限判断:
apiBinder.bindSpiListener(PreExecuteChainSpi.class, (apiInfo, future) -> {
String apiPath = apiInfo.getApiPath();
String apiMethod = apiInfo.getMethod()
if (...) {
// (方式1)通过 future 设置异常信息
future.failed(new StatusMessageException(401, "not power"));
// (方式2)或者直接 throw 一个异常
throw new StatusMessageException(401, "not power");
}
});
// Result
// {
// "success": false,
// "message": "not power",
// "code": 401,
// "lifeCycleTime": 42,
// "executionTime": -1,
// "value": "not power"
// }
或者实现接口的缓存
public class ApiCacheSpi implements PreExecuteChainSpi, ResultProcessChainSpi {
private Map<String,Object> cacheMap = ... // for example
public void preExecute(ApiInfo apiInfo, BasicFuture<Object> future) {
String cacheKey = ...
if (this.cacheMap.containsKey(cacheKey)) {
Object cacheValue = cacheMap.get(cacheKey);
future.completed(cacheValue);
return;
}
}
public Object callAfter(boolean formPre, ApiInfo apiInfo, Object result) {
// formPre 为 true,表示 preExecute 已经处理过。
// apiInfo.isPerform() 为 true 表示,API 调用是从 UI 界面发起的。
if (formPre || apiInfo.isPerform()) {
return result;
}
//
String cacheKey = ...
this.cacheMap.put(cacheKey, result);
return result;
}
}
千呼万唤的多数据源支持也在其中
SQL执行器在 4.1.4 版本之后提供了可以通过 hint 来切换数据源的能力。在没有指定数据源 hint 的情况下数据源采用的是默认数据源,配置多个数据源的方式如下:
public class MyModule implements Module {
public void loadModule(ApiBinder apiBinder) throws Throwable {
DataSource defaultDs = ...;
DataSource dsA = ...;
DataSource dsB = ...;
apiBinder.installModule(new JdbcModule(Level.Full, defaultDs)); // 默认数据源
apiBinder.installModule(new JdbcModule(Level.Full, "ds_A", dsA)); // 数据源A
apiBinder.installModule(new JdbcModule(Level.Full, "ds_B", dsB)); // 数据源B
}
}
在DataQL中选择数据源:
// 如果不设置 FRAGMENT_SQL_DATA_SOURCE 使用的是 defaultDs 数据源。
// - 设置值为 "ds_A" ,使用的是 dsA 数据源。
// - 设置值为 "ds_B" ,使用的是 dsB 数据源。
hint FRAGMENT_SQL_DATA_SOURCE = "ds_A"
// 声明一个 SQL
var dataSet = @@sql() <% select * from category limit 10; %>
// 使用 特定数据源来执行SQL。
return dataSet();
以上所述就是小编给大家介绍的《Dataway 4.1.4 发布,无需开发配置接口,新增支持 Oracle/多数据源》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 搞定 Spring Boot 多数据源(二):动态数据源
- 数据源管理 | 基于JDBC模式,适配和管理动态数据源
- 苞米豆-多数据源 3.4.0 发布:本地多数据源事务优化
- 苞米豆-多数据源 3.3.0 重磅更新:本地多数据源事务方案
- 苞米豆-多数据源 2.3.2 发布:支持 spel 从参数获取数据源
- Spring项目中使用两种方法动态切换数据源,多数据源切换
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。