自定义校验器
ezasse
只提供了一些基础的校验规则与校验关键字,如果这些校验关键字你不喜欢,或者觉得校验规则与现有的功能不匹配,你可以自行实现校验器,实现方式和方法也很简单
修改关键字
如果只是修改关键字,可以继承具体的校验器的实现,或者直接修改配置文件,下面演示修改默认执行器的关键字EXEC
修改为IF
- 创建一个类
EzasseDefaultChecker.java
- 继承
DefaultKeyWordEzasseChecker
并复写getId
方法
package cn.com.pism.ezasse.demo.singledb.config;
import cn.com.pism.ezasse.checker.DefaultKeyWordEzasseChecker;
import cn.com.pism.ezasse.model.EzasseConfig;
import org.springframework.stereotype.Component;
/**
* @author PerccyKing
*/
@Component
public class EzasseDefaultChecker extends DefaultKeyWordEzasseChecker {
@Override
public String getId(EzasseConfig config) {
return "IF";
}
}
- 修改后的语句将变为
-- IF(select 0)
完全定制
以下教程,将实现一个自定义校验器,校验关键字为 HAVE_TABLE
,作用为当数据库中存在某一张表的时候,执行脚本
- 创建一个类
EzasseHaveTableChecker.java
- 继承
EzasseChecker
,复写所有的方法,以下是具体实现
package cn.com.pism.ezasse.demo.singledb.config;
import cn.com.pism.ezasse.checker.EzasseChecker;
import cn.com.pism.ezasse.executor.EzasseExecutor;
import cn.com.pism.ezasse.model.EzasseConfig;
import cn.com.pism.ezasse.model.EzasseTableInfo;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.sql.DataSource;
import java.util.List;
/**
* 校验行语法:{@code -- HAVE_TABLE(table_name)}<br/>
* 校验规则:当数据库中存在定义的表时,执行SQL
*
* @author PerccyKing
*/
@Component
public class EzasseHaveTableChecker extends EzasseChecker {
@Override
public boolean needToExecute(DataSource checkDataSource, String checkContent, EzasseExecutor executor) {
//可以使用 publicCheck,当执行器与校验器不为空的时候,再执行校验逻辑,否则执行跳过校验行
return publicCheck(checkContent, executor, () -> {
//获取表的基本信息,如果响应结果不为空,表示可以执行SQL脚本
List<EzasseTableInfo> tableInfo = executor.getTableInfo(checkContent);
return !CollectionUtils.isEmpty(tableInfo);
});
}
@Override
public String getId(EzasseConfig config) {
return "HAVE_TABLE";
}
}
WARNING
关键字的定义需要遵循以下规则
- 关键字不宜过长,如果关键字定义与现存的关键字一样,则会覆盖现有的关键字
- 关键字中不能包含符号【.】
- 使用测试,在SQL脚本中添加以下脚本进行测试
-- 当表t_user存在时,清空表数据
-- HAVE_TABLE(t_user)
truncate table t_user;