From c7430306544d1465023b599d37e15dcb7cc48780 Mon Sep 17 00:00:00 2001 From: HzjNeverStop <441627022@qq.com> Date: Thu, 23 May 2024 19:36:03 +0800 Subject: [PATCH] application startup update register order (#1325) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * application startup update register order * application startup update register order --------- Co-authored-by: 致节 --- .../StartupSpringApplicationRunListener.java | 34 +++++---------- .../boot/StartupApplicationStartupTests.java | 43 +++++++++++++++++++ 2 files changed, 54 insertions(+), 23 deletions(-) create mode 100644 sofa-boot-tests/sofa-boot-smoke-tests/sofa-boot-smoke-tests-boot/src/test/java/com/alipay/sofa/smoke/tests/boot/StartupApplicationStartupTests.java diff --git a/sofa-boot-project/sofa-boot/src/main/java/com/alipay/sofa/boot/startup/StartupSpringApplicationRunListener.java b/sofa-boot-project/sofa-boot/src/main/java/com/alipay/sofa/boot/startup/StartupSpringApplicationRunListener.java index 8d0298673..97508485d 100644 --- a/sofa-boot-project/sofa-boot/src/main/java/com/alipay/sofa/boot/startup/StartupSpringApplicationRunListener.java +++ b/sofa-boot-project/sofa-boot/src/main/java/com/alipay/sofa/boot/startup/StartupSpringApplicationRunListener.java @@ -42,29 +42,24 @@ */ public class StartupSpringApplicationRunListener implements SpringApplicationRunListener, Ordered { - private final SpringApplication application; + private final SpringApplication application; - private final String[] args; + private final String[] args; - private final StartupReporter startupReporter; + private final StartupReporter startupReporter; - private final ApplicationStartup userApplicationStartup; + private BaseStat jvmStartingStage; - private BufferingApplicationStartup applicationStartup; + private BaseStat environmentPrepareStage; - private BaseStat jvmStartingStage; + private ChildrenStat applicationContextPrepareStage; - private BaseStat environmentPrepareStage; - - private ChildrenStat applicationContextPrepareStage; - - private BaseStat applicationContextLoadStage; + private BaseStat applicationContextLoadStage; public StartupSpringApplicationRunListener(SpringApplication springApplication, String[] args) { this.application = springApplication; this.args = args; this.startupReporter = new StartupReporter(); - this.userApplicationStartup = springApplication.getApplicationStartup(); } @Override @@ -84,16 +79,12 @@ public void environmentPrepared(ConfigurableBootstrapContext bootstrapContext, environmentPrepareStage.setEndTime(System.currentTimeMillis()); startupReporter.setAppName(environment.getProperty(SofaBootConstants.APP_NAME_KEY)); startupReporter.bindToStartupReporter(environment); + bootstrapContext.register(StartupReporter.class, key -> startupReporter); // create BufferingApplicationStartup if user not custom. + ApplicationStartup userApplicationStartup = application.getApplicationStartup(); if (ApplicationStartup.DEFAULT == userApplicationStartup || userApplicationStartup == null) { - this.applicationStartup = new BufferingApplicationStartup(startupReporter.getBufferSize()); - } else if (userApplicationStartup instanceof BufferingApplicationStartup userApplicationStartup) { - // use user custom BufferingApplicationStartup - this.applicationStartup = userApplicationStartup; - } else { - // disable startup static when user custom other type ApplicationStartup; - this.applicationStartup = null; + application.setApplicationStartup(new BufferingApplicationStartup(startupReporter.getBufferSize())); } } @@ -109,9 +100,6 @@ public void contextPrepared(ConfigurableApplicationContext context) { applicationContextPrepareStage.setChildren(new ArrayList<>(baseStatList)); baseStatList.clear(); } - if (applicationStartup != null) { - context.setApplicationStartup(applicationStartup); - } } @Override @@ -156,7 +144,7 @@ public void started(ConfigurableApplicationContext context, Duration timeTaken) @Override public int getOrder() { - return Ordered.LOWEST_PRECEDENCE; + return Ordered.LOWEST_PRECEDENCE - 10; } private String getStartedMessage(Environment environment, Duration timeTakenToStartup) { diff --git a/sofa-boot-tests/sofa-boot-smoke-tests/sofa-boot-smoke-tests-boot/src/test/java/com/alipay/sofa/smoke/tests/boot/StartupApplicationStartupTests.java b/sofa-boot-tests/sofa-boot-smoke-tests/sofa-boot-smoke-tests-boot/src/test/java/com/alipay/sofa/smoke/tests/boot/StartupApplicationStartupTests.java new file mode 100644 index 000000000..a4bc524cc --- /dev/null +++ b/sofa-boot-tests/sofa-boot-smoke-tests/sofa-boot-smoke-tests-boot/src/test/java/com/alipay/sofa/smoke/tests/boot/StartupApplicationStartupTests.java @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alipay.sofa.smoke.tests.boot; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.core.metrics.ApplicationStartup; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author huzijie + * @version StartupApplicationStartupTests.java, v 0.1 2024年05月23日 17:40 huzijie Exp $ + */ +@SpringBootTest +public class StartupApplicationStartupTests { + + @Autowired + private ConfigurableApplicationContext context; + + @Test + public void checkBufferApplicationStartup() { + ApplicationStartup applicationStartup = context.getApplicationStartup(); + assertThat(applicationStartup).isInstanceOf(BufferingApplicationStartup.class); + } +}