class SQLXmlELParser extends ClassXmlFlowELParser {

    private static SQLParserVO sqlParserVO;

    private static final String ERROR_MSG_PATTERN = "rule-source-ext-data {} is blank";

    private static final String ERROR_COMMON_MSG = "rule-source-ext-data is empty";

    /**
     * 构造函数
     */
    public SQLXmlELParser() {
        LiteflowConfig liteflowConfig = LiteflowConfigGetter.get();

        try {
            if (MapUtil.isNotEmpty((liteflowConfig.getRuleSourceExtDataMap()))) {
                sqlParserVO = BeanUtil.toBean(liteflowConfig.getRuleSourceExtDataMap(), SQLParserVO.class,
                        CopyOptions.create());
            } else if (StrUtil.isNotBlank(liteflowConfig.getRuleSourceExtData())) {
                sqlParserVO = JsonUtil.parseObject(liteflowConfig.getRuleSourceExtData(), SQLParserVO.class);
            }
            if (Objects.isNull(sqlParserVO)) {
                throw new ELSQLException(ERROR_COMMON_MSG);
            }

            // 检查配置文件
            checkParserVO(sqlParserVO);

            // 初始化 JDBCHelper
            JDBCHelper.init(sqlParserVO);

            // 初始化 SqlReadFactory
            SqlReadFactory.registerRead(sqlParserVO);

            // 注册轮询任务
            SqlReadFactory.registerSqlReadPollTask(ReadType.CHAIN);
            SqlReadFactory.registerSqlReadPollTask(ReadType.SCRIPT);
        } catch (ELSQLException elsqlException) {
            throw elsqlException;
        } catch (Exception ex) {
            throw new ELSQLException(ex.getMessage());
        }

    }

    @Override
    public String parseCustom() {<FILL_FUNCTION_BODY>}

    /**
     * 检查配置文件并设置默认值
     *
     * @param sqlParserVO sqlParserVO
     */
    private void checkParserVO(SQLParserVO sqlParserVO) {
        if (sqlParserVO.isDefaultDataSource()) {
            return;
        }
        if (StrUtil.isEmpty(sqlParserVO.getUrl())) {
            throw new ELSQLException(StrFormatter.format(ERROR_MSG_PATTERN, "url"));
        }
        if (StrUtil.isEmpty(sqlParserVO.getDriverClassName())) {
            throw new ELSQLException(StrFormatter.format(ERROR_MSG_PATTERN, "driverClassName"));
        }
        if (Objects.isNull(sqlParserVO.getUsername())) {
            throw new ELSQLException(StrFormatter.format(ERROR_MSG_PATTERN, "username"));
        }
        if (Objects.isNull(sqlParserVO.getPassword())) {
            throw new ELSQLException(StrFormatter.format(ERROR_MSG_PATTERN, "password"));
        }
    }

}

        try {
            JDBCHelper jdbcHelper = JDBCHelper.getInstance();
            String content = jdbcHelper.getContent();
            if (sqlParserVO.getPollingEnabled()) {
                FlowInitHook.addHook(() -> {
                    jdbcHelper.listenSQL();
                    return true;
                });
            }
            return content;
        } catch (Exception ex) {
            throw new ELSQLException(ex.getMessage());
        }
    
<methods>public non-sealed void <init>() ,public abstract java.lang.String parseCustom() ,public void parseMain(List<java.lang.String>) throws java.lang.Exception<variables>