@Override
    public void setProperties(Properties properties) {
        String property = properties.getProperty(SPLIT_EXPRESSION_PROPERTY);
        if (property != null) {
            splitter = new RegexpSplitter(property);
        }
        property = properties.getProperty(DELIMITER_PROPERTY);
        if (property != null) {
            splitter = new DelimiterSplitter(property);
        }
        skipEmptyStatements = getBooleanProperty(properties, SKIP_EMPTY_STATEMENTS_PROPERTY, skipEmptyStatements);
        retainExecuteOrder = getBooleanProperty(properties, RETAIN_EXECUTE_ORDER_PROPERTY, retainExecuteOrder);
        reusePreparedStatements = getBooleanProperty(properties, REUSE_PREPARED_STATEMENTS_PROPERTY, reusePreparedStatements);
        reuseBetweenFlushes = getBooleanProperty(properties, REUSE_BETWEEN_FLUSHES_PROPERTY, reuseBetweenFlushes);
        if (reusePreparedStatements) {
            try {
                executorConfiguration = BaseExecutor.class.getDeclaredField("configuration");
                executorConfiguration.setAccessible(true);
            } catch (Exception e) {
                throw new ExecutorException(MSG_ERROR_ACCESSING_CONFIGURATION, e);
            }
            try {
                cachingExecutorDelegate = CachingExecutor.class.getDeclaredField("delegate");
                cachingExecutorDelegate.setAccessible(true);
            } catch (Exception e) {
                throw new ExecutorException(MSG_ERROR_ACCESSING_DELEGATE, e);
            }
        }
    }