@Override
    public final void stop() {
        Boolean running = this.running.get();
        if (null == running) {
            this.running.set(false);
            return;
        }
        if (!running) {
            return;
        }
        LocalDateTime startTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(startTimeMillis), ZoneId.systemDefault());
        log.info("stop lifecycle executor {}, startTime={}, cost {} ms", this, startTime.format(DateTimeFormatterFactory.getStandardFormatter()), System.currentTimeMillis() - startTimeMillis);
        try {
            doStop();
            // CHECKSTYLE:OFF
        } catch (final SQLException | RuntimeException ex) {
            // CHECKSTYLE:ON
            log.warn("doStop failed", ex);
        }
        this.running.set(false);
    }
@Test
    void assertNoStopBeforeStarting() {
        FixturePipelineLifecycleRunnable executor = new FixturePipelineLifecycleRunnable();
        executor.stop();
        executor.stop();
        assertThat(executor.doStopCount.get(), is(0));
    }