boot版war包放到tomcat中 子容器启动失败

Blade 未结 1 883
13102131533
13102131533 2024-03-26 16:46

一、该问题的重现步骤是什么?


1. 


org.springblade

BladeX-Boot

war

3.4.0.RELEASE

2. 


    org.springframework.boot

    spring-boot-starter-tomcat

    provided

3.


    org.springblade

    blade-core-boot

   

       

            org.springblade

            blade-core-cloud

       

       

            org.springframework.boot

            spring-boot-starter-undertow

       

   

4.


    org.apache.maven.plugins

    maven-war-plugin

   

       

        false

   

5.


#服务器配置

server:

  port: 8080

spring:

  application:

    name: blade-api

  profiles:

    active: dev

  main:

    allow-bean-definition-overriding: true

6.


@EnableScheduling

@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})

public class Application extends SpringBootServletInitializer {


   public static void main(String[] args) {

      BladeApplication.run(CommonConstant.APPLICATION_NAME, Application.class, args);

   }


   @Override

   protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {

      return BladeApplication.createSpringApplicationBuilder(CommonConstant.APPLICATION_NAME,Application.class).sources(Application.class);

   }


}

二、你期待的结果是什么?实际看到的又是什么?


26-Mar-2024 11:40:15.335 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server.服务器版本: Apache Tomcat/9.0.87


26-Mar-2024 11:40:15.339 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 服务器构建:        Mar 11 2024 10:12:34 UTC


26-Mar-2024 11:40:15.339 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 服务器版本号:      9.0.87.0


26-Mar-2024 11:40:15.339 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 操作系统名称:      Windows 10


26-Mar-2024 11:40:15.339 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log OS.版本:           10.0


26-Mar-2024 11:40:15.339 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 架构:              amd64


26-Mar-2024 11:40:15.340 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Java 环境变量:     E:\jdk1.8\jre


26-Mar-2024 11:40:15.340 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Java虚拟机版本:    1.8.0_131-b11


26-Mar-2024 11:40:15.340 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log JVM.供应商:        Oracle Corporation


26-Mar-2024 11:40:15.340 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:     E:\apache-tomcat-9.0.87


26-Mar-2024 11:40:15.340 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:     E:\apache-tomcat-9.0.87


26-Mar-2024 11:40:15.341 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:       -Djava.util.logging.config.file=E:\apache-tomcat-9.0.87\conf\logging.properties


26-Mar-2024 11:40:15.341 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:       -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager


26-Mar-2024 11:40:15.341 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:       -Djdk.tls.ephemeralDHKeySize=2048


26-Mar-2024 11:40:15.341 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:       -Djava.protocol.handler.pkgs=org.apache.catalina.webresources


26-Mar-2024 11:40:15.342 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:       -Dignore.endorsed.dirs=


26-Mar-2024 11:40:15.342 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:       -Dcatalina.base=E:\apache-tomcat-9.0.87


26-Mar-2024 11:40:15.343 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:       -Dcatalina.home=E:\apache-tomcat-9.0.87


26-Mar-2024 11:40:15.343 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:       -Djava.io.tmpdir=E:\apache-tomcat-9.0.87\temp


26-Mar-2024 11:40:15.371 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent 在java.library.path:[E:\jdk1.8\bin;C:\windows\Sun\Java\bin;C:\windows\system32;C:\windows;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;C:\windows\System32\OpenSSH\;E:\jdk1.8\bin;E:\nodejs14;E:\apache-maven-3.5.0\bin;E:\Git\cmd;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps;;.]上找不到基于APR的Apache Tomcat本机库,该库允许在生产环境中获得最佳性能


26-Mar-2024 11:40:15.673 信息 [main] org.apache.coyote.AbstractProtocol.init 初始化协议处理器 ["http-nio-8080"]


26-Mar-2024 11:40:15.700 信息 [main] org.apache.catalina.startup.Catalina.load 服务器在[539]毫秒内初始化


26-Mar-2024 11:40:15.732 信息 [main] org.apache.catalina.core.StandardService.startInternal 正在启动服务[Catalina]


26-Mar-2024 11:40:15.732 信息 [main] org.apache.catalina.core.StandardEngine.startInternal 正在启动 Servlet 引擎:[Apache Tomcat/9.0.87]


26-Mar-2024 11:40:15.754 信息 [main] org.apache.catalina.startup.HostConfig.deployWAR 正在部署web应用程序存档文件[E:\apache-tomcat-9.0.87\webapps\blade-api.war]


26-Mar-2024 11:40:15.775 信息 [main] org.apache.catalina.startup.ExpandWar.expand 发现一个展开的目录[E:\apache-tomcat-9.0.87\webapps\blade-api],它的最后修改时间与关联的WAR不一致.它将被删除.


26-Mar-2024 11:41:01.170 信息 [main] org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描用于TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可以缩短启动时间 和JSP编译时间。


----启动中,读取到的环境变量:[dev],jar地址:[/E:/apache-tomcat-9.0.87/webapps/blade-api/WEB-INF/classes/]----


2024-03-26 11:41:04.255  INFO 8384 --- [kground-preinit] o.h.validator.internal.util.Version      : HV000001: Hibernate Validator 6.2.5.Final


                   ______  _             _       ___   ___


                   | ___ \| |           | |      \  \ /  /


                   | |_/ /| |  __ _   __| |  ___  \  V  /


                   | ___ \| | / _` | / _` | / _ \   > <


                   | |_/ /| || (_| || (_| ||  __/ /  .  \


                   \____/ |_| \__,_| \__,_| \___|/__/ \__\




:: BladeX 3.4.0.RELEASE :: blade-api:dev :: Running SpringBoot 2.7.18 ::




2024-03-26 11:41:06.470  INFO 8384 --- [           main] org.apache.catalina.startup.Bootstrap    : The following 1 profile is active: "dev"


2024-03-26 11:41:09.868  INFO 8384 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode


2024-03-26 11:41:09.881  INFO 8384 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.


2024-03-26 11:41:10.127  INFO 8384 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 207 ms. Found 0 Redis repository interfaces.


2024-03-26 11:41:10.737  WARN 8384 --- [           main] o.m.s.mapper.ClassPathMapperScanner      : No MyBatis mapper was found in '[org.springblade]' package. Please check your configuration.


2024-03-26 11:41:11.007  INFO 8384 --- [           main] o.s.cloud.context.scope.GenericScope     : BeanFactory id=3acd4e0b-c798-3372-87d7-626e70fe5383


2024-03-26 11:41:11.016  INFO 8384 --- [           main] s.c.l.p.BladePropertySourcePostProcessor : BladePropertySourcePostProcessor init.


2024-03-26 11:41:11.121  INFO 8384 --- [           main] s.c.l.p.BladePropertySourcePostProcessor : BladePropertySourcePostProcessor process @BladePropertySource bean.


26-Mar-2024 11:41:13.513 警告 [main] org.apache.tomcat.util.modeler.Registry.disableRegistry 无法禁用MBean注册表,因为它已初始化


2024-03-26 11:41:14.021  INFO 8384 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)


26-Mar-2024 11:41:14.023 信息 [main] org.apache.coyote.AbstractProtocol.init 初始化协议处理器 ["http-nio-8080"]


26-Mar-2024 11:41:14.023 信息 [main] org.apache.catalina.core.StandardService.startInternal 正在启动服务[Tomcat]


26-Mar-2024 11:41:14.023 信息 [main] org.apache.catalina.core.StandardEngine.startInternal 正在启动 Servlet 引擎:[Apache Tomcat/9.0.87]


26-Mar-2024 11:41:14.221 严重 [main] org.apache.catalina.core.ContainerBase.startInternal 子容器启动失败


        java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: 启动加载程序时出错


                at java.util.concurrent.FutureTask.report(FutureTask.java:122)


                at java.util.concurrent.FutureTask.get(FutureTask.java:192)


                at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:873)


                at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:794)


                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)


                at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332)


                at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322)


                at java.util.concurrent.FutureTask.run(FutureTask.java:266)


                at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)


                at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)


                at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866)


                at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:248)


                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)


                at org.apache.catalina.core.StandardService.startInternal(StandardService.java:433)


                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)


                at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:925)


                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)


                at org.apache.catalina.startup.Tomcat.start(Tomcat.java:438)


                at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:123)


                at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.(TomcatWebServer.java:104)


                at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:481)


                at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:211)


                at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:184)


                at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:162)


                at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:585)


                at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147)


                at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732)


                at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:409)


                at org.springframework.boot.SpringApplication.run(SpringApplication.java:308)


                at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:175)


                at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:155)


                at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:97)


                at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:174)


                at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4904)


                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)


                at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:683)


                at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:658)


                at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:661)


                at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1014)


                at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1866)


                at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)


                at java.util.concurrent.FutureTask.run(FutureTask.java:266)


                at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)


                at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112)


                at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:816)


                at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:468)


                at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1584)


                at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)


                at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:114)


                at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402)


                at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:345)


                at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:893)


                at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:794)


                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)


                at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332)


                at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322)


                at java.util.concurrent.FutureTask.run(FutureTask.java:266)


                at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)


                at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)


                at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866)


                at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:248)


                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)


                at org.apache.catalina.core.StandardService.startInternal(StandardService.java:433)


                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)


                at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:925)


                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)


                at org.apache.catalina.startup.Catalina.start(Catalina.java:735)


                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)


                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)


                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)


                at java.lang.reflect.Method.invoke(Method.java:498)


                at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)


                at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473)


        Caused by: org.apache.catalina.LifecycleException: 启动加载程序时出错


                at org.apache.catalina.loader.WebappLoader.startInternal(WebappLoader.java:412)


                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)


                at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4769)


                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)


                at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332)


                at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322)


                at java.util.concurrent.FutureTask.run(FutureTask.java:266)


                at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)


                at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)


                at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866)


                ... 70 more


        Caused by: java.lang.ClassNotFoundException: org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader


                at java.net.URLClassLoader.findClass(URLClassLoader.java:381)


                at java.lang.ClassLoader.loadClass(ClassLoader.java:424)


                at java.lang.ClassLoader.loadClass(ClassLoader.java:357)


                at java.lang.Class.forName0(Native Method)


                at java.lang.Class.forName(Class.java:264)


                at org.apache.catalina.loader.WebappLoader.createClassLoader(WebappLoader.java:515)


                at org.apache.catalina.loader.WebappLoader.startInternal(WebappLoader.java:389)


                ... 79 more


26-Mar-2024 11:41:14.226 严重 [main] org.apache.catalina.core.ContainerBase.startInternal 子容器启动失败


        java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: 子容器启动失败


                at java.util.concurrent.FutureTask.report(FutureTask.java:122)


                at java.util.concurrent.FutureTask.get(FutureTask.java:192)


                at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:873)


                at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:248)


                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)


                at org.apache.catalina.core.StandardService.startInternal(StandardService.java:433)


                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)


                at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:925)


                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)


                at org.apache.catalina.startup.Tomcat.start(Tomcat.java:438)


                at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:123)


                at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.(TomcatWebServer.java:104)


                at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:481)


                at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:211)

1条回答
  •  admin
    admin (楼主)
    2024-03-26 16:49

    打war包的时候,如果使用的springboot 2.7.x 则需要做额外的一步操作。针对BladeApplication二次开发一下。

    比如创建一个BladeXApplication到业务工程,然后拷贝如下代码,之后把启动类的BladeApplication改成BladeXApplication即可:

    package org.springblade.core.launch;    
    import org.springblade.core.launch.constant.AppConstant;    
    import org.springblade.core.launch.constant.NacosConstant;    
    import org.springblade.core.launch.service.LauncherService;    
    import org.springframework.boot.builder.SpringApplicationBuilder;    
    import org.springframework.context.ConfigurableApplicationContext;    
    import org.springframework.core.env.*;    
    import org.springframework.util.Assert;    
    import org.springframework.util.StringUtils;    
    import java.nio.charset.StandardCharsets;    
    import java.util.*;    
    import java.util.function.Function;    
    import java.util.stream.Collectors;    
    /**    
    * 项目启动器,搞定环境变量问题    
    *    
    * @author Chill    
    */    
    public class BladeXApplication {    
    /**    
    * Create an application context    
    * java -jar app.jar --spring.profiles.active=prod --server.port=2333    
    *    
    * @param appName application name    
    * @param source  The sources    
    * @return an application context created from the current state    
    */    
    public static ConfigurableApplicationContext run(String appName, Class source, String... args) {    
    SpringApplicationBuilder builder = createSpringApplicationBuilder(appName, source, args);    
    return builder.run(args);    
    }    

    public static SpringApplicationBuilder createSpringApplicationBuilder(String appName, Class source, String... args) {
    return createSpringApplicationBuilder(null,appName, source, args);
    }


    public static SpringApplicationBuilder createSpringApplicationBuilder(SpringApplicationBuilder builder, String appName, Class source, String... args) {    
    Assert.hasText(appName, "[appName]服务名不能为空");    
    // 读取环境变量,使用spring boot的规则    
    ConfigurableEnvironment environment = new StandardEnvironment();    
    MutablePropertySources propertySources = environment.getPropertySources();    
    propertySources.addFirst(new SimpleCommandLinePropertySource(args));    
    propertySources.addLast(new MapPropertySource(StandardEnvironment.SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME, environment.getSystemProperties()));    
    propertySources.addLast(new SystemEnvironmentPropertySource(StandardEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME, environment.getSystemEnvironment()));    
    // 获取配置的环境变量    
    String[] activeProfiles = environment.getActiveProfiles();    
    // 判断环境:dev、test、prod    
    List profiles = Arrays.asList(activeProfiles);    
    // 预设的环境    
    List presetProfiles = new ArrayList<>(Arrays.asList(AppConstant.DEV_CODE, AppConstant.TEST_CODE, AppConstant.PROD_CODE));    
    // 交集    
    presetProfiles.retainAll(profiles);    
    // 当前使用    
    List activeProfileList = new ArrayList<>(profiles);    
    Function joinFun = StringUtils::arrayToCommaDelimitedString;    

    if(builder==null){
        // 如果builder为空 创建 此操作将启动内嵌web容器 以jar模式启动
        builder = new SpringApplicationBuilder(source);
    }
       
    String profile;    
    if (activeProfileList.isEmpty()) {    
    // 默认dev开发    
    profile = AppConstant.DEV_CODE;    
    activeProfileList.add(profile);    
    builder.profiles(profile);    
    } else if (activeProfileList.size() == 1) {    
    profile = activeProfileList.get(0);    
    } else {    
    // 同时存在dev、test、prod环境时    
    throw new RuntimeException("同时存在环境变量:[" + StringUtils.arrayToCommaDelimitedString(activeProfiles) + "]");    
    }    
    String startJarPath = BladeApplication.class.getResource("/").getPath().split("!")[0];    
    String activePros = joinFun.apply(activeProfileList.toArray());    
    System.out.printf("----启动中,读取到的环境变量:[%s],jar地址:[%s]----%n", activePros, startJarPath);    
    Properties props = System.getProperties();    
    props.setProperty("spring.application.name", appName);    
    props.setProperty("spring.profiles.active", profile);    
    props.setProperty("info.version", AppConstant.APPLICATION_VERSION);    
    props.setProperty("info.desc", appName);    
    props.setProperty("file.encoding", StandardCharsets.UTF_8.name());    
    props.setProperty("blade.env", profile);    
    props.setProperty("blade.name", appName);    
    props.setProperty("blade.is-local", String.valueOf(isLocalDev()));    
    props.setProperty("blade.dev-mode", profile.equals(AppConstant.PROD_CODE) ? "false" : "true");    
    props.setProperty("blade.service.version", AppConstant.APPLICATION_VERSION);    
    props.setProperty("loadbalancer.client.name", appName);    
    Properties defaultProperties = new Properties();    
    defaultProperties.setProperty("nacos.logging.default.config.enabled", "false");    
    defaultProperties.setProperty("spring.main.allow-bean-definition-overriding", "true");    
    defaultProperties.setProperty("spring.sleuth.sampler.percentage", "1.0");    
    defaultProperties.setProperty("spring.cloud.alibaba.seata.tx-service-group", appName.concat(NacosConstant.NACOS_GROUP_SUFFIX));    
    defaultProperties.setProperty("spring.cloud.nacos.config.file-extension", NacosConstant.NACOS_CONFIG_FORMAT);    
    defaultProperties.setProperty("spring.cloud.nacos.config.shared-configs[0].data-id", NacosConstant.sharedDataId());    
    defaultProperties.setProperty("spring.cloud.nacos.config.shared-configs[0].group", NacosConstant.NACOS_CONFIG_GROUP);    
    defaultProperties.setProperty("spring.cloud.nacos.config.shared-configs[0].refresh", NacosConstant.NACOS_CONFIG_REFRESH);    
    defaultProperties.setProperty("spring.cloud.nacos.config.shared-configs[1].data-id", NacosConstant.sharedDataId(profile));    
    defaultProperties.setProperty("spring.cloud.nacos.config.shared-configs[1].group", NacosConstant.NACOS_CONFIG_GROUP);    
    defaultProperties.setProperty("spring.cloud.nacos.config.shared-configs[1].refresh", NacosConstant.NACOS_CONFIG_REFRESH);    
    builder.properties(defaultProperties);    
    // 加载自定义组件    
    List launcherList = new ArrayList<>();    
    ServiceLoader.load(LauncherService.class).forEach(launcherList::add);    
    launcherList.stream().sorted(Comparator.comparing(LauncherService::getOrder)).collect(Collectors.toList())    
    .forEach(launcherService -> launcherService.launcher(builder, appName, profile, isLocalDev()));    
    return builder;    
    }    
    /**    
    * 判断是否为本地开发环境    
    *    
    * @return boolean    
    */    
    public static boolean isLocalDev() {    
    String osName = System.getProperty("os.name");    
    return StringUtils.hasText(osName) && !(AppConstant.OS_NAME_LINUX.equalsIgnoreCase(osName));    
    }    
    }    
    @EnableScheduling
    @SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
    public class Application extends SpringBootServletInitializer {
    
       public static void main(String[] args) {
          BladeXApplication.run(CommonConstant.APPLICATION_NAME, Application.class, args);
       }
    
       @Override
       protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
          return BladeXApplication.createSpringApplicationBuilder(application,CommonConstant.APPLICATION_NAME,Application.class).sources(Application.class);
       }
    
    }


    作者追问:2024-03-26 16:49

    这样配置之后还是会报相同的错误


    image.png


    image.png

    ----启动中,读取到的环境变量:[dev],jar地址:[/E:/apache-tomcat-9.0.87/webapps/blade-api/WEB-INF/classes/]----

    2024-03-26 17:10:28.394  INFO 7704 --- [kground-preinit] o.h.validator.internal.util.Version      : HV000001: Hibernate Validator 6.2.5.Final

                       ______  _             _       ___   ___

                       | ___ \| |           | |      \  \ /  /

                       | |_/ /| |  __ _   __| |  ___  \  V  /

                       | ___ \| | / _` | / _` | / _ \   > <

                       | |_/ /| || (_| || (_| ||  __/ /  .  \

                       \____/ |_| \__,_| \__,_| \___|/__/ \__\


    :: BladeX 3.4.0.RELEASE :: blade-api:dev :: Running SpringBoot 2.7.18 ::


    2024-03-26 17:10:33.416  INFO 7704 --- [           main] org.apache.catalina.startup.Bootstrap    : The following 1 profile is active: "dev"

    2024-03-26 17:10:37.007  INFO 7704 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode

    2024-03-26 17:10:37.022  INFO 7704 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.

    2024-03-26 17:10:37.264  INFO 7704 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 204 ms. Found 0 Redis repository interfaces.

    2024-03-26 17:10:37.889  WARN 7704 --- [           main] o.m.s.mapper.ClassPathMapperScanner      : No MyBatis mapper was found in '[org.springblade]' package. Please check your configuration.

    2024-03-26 17:10:38.158  INFO 7704 --- [           main] o.s.cloud.context.scope.GenericScope     : BeanFactory id=3acd4e0b-c798-3372-87d7-626e70fe5383

    2024-03-26 17:10:38.166  INFO 7704 --- [           main] s.c.l.p.BladePropertySourcePostProcessor : BladePropertySourcePostProcessor init.

    2024-03-26 17:10:38.270  INFO 7704 --- [           main] s.c.l.p.BladePropertySourcePostProcessor : BladePropertySourcePostProcessor process @BladePropertySource bean.

    26-Mar-2024 17:10:40.653 警告 [main] org.apache.tomcat.util.modeler.Registry.disableRegistry 无法禁用MBean注册表,因为它已初始化

    2024-03-26 17:10:41.244  INFO 7704 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)

    26-Mar-2024 17:10:41.245 信息 [main] org.apache.coyote.AbstractProtocol.init 初始化协议处理器 ["http-nio-8080"]

    26-Mar-2024 17:10:41.246 信息 [main] org.apache.catalina.core.StandardService.startInternal 正在启动服务[Tomcat]

    26-Mar-2024 17:10:41.247 信息 [main] org.apache.catalina.core.StandardEngine.startInternal 正在启动 Servlet 引擎:[Apache Tomcat/9.0.87]

    26-Mar-2024 17:10:41.445 严重 [main] org.apache.catalina.core.ContainerBase.startInternal 子容器启动失败

            java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: 启动加载程序时出错

                    at java.util.concurrent.FutureTask.report(FutureTask.java:122)

                    at java.util.concurrent.FutureTask.get(FutureTask.java:192)

                    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:873)

                    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:794)

                    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)

                    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332)

                    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322)

                    at java.util.concurrent.FutureTask.run(FutureTask.java:266)

                    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)

                    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)

                    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866)

                    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:248)

                    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)

                    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:433)

                    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)

                    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:925)

                    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)

                    at org.apache.catalina.startup.Tomcat.start(Tomcat.java:438)

                    at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:123)

                    at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.<init>(TomcatWebServer.java:104)

                    at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:481)

                    at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:211)

                    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:184)

                    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:162)

                    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:585)

                    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147)

                    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732)

                    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:409)

                    at org.springframework.boot.SpringApplication.run(SpringApplication.java:308)

                    at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:175)

                    at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:155)

                    at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:97)

                    at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:174)

                    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4904)

                    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)

                    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:683)

                    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:658)

                    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:661)

                    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1014)

                    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1866)

                    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)

                    at java.util.concurrent.FutureTask.run(FutureTask.java:266)

                    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)

                    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112)

                    at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:816)

                    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:468)

                    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1584)

                    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)

                    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:114)

                    at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402)

                    at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:345)

                    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:893)

                    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:794)

                    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)

                    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332)

                    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322)

                    at java.util.concurrent.FutureTask.run(FutureTask.java:266)

                    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)

                    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)

                    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866)

                    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:248)

                    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)

                    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:433)

                    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)

                    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:925)

                    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)

                    at org.apache.catalina.startup.Catalina.start(Catalina.java:735)

                    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

                    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

                    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

                    at java.lang.reflect.Method.invoke(Method.java:498)

                    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)

                    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473)

            Caused by: org.apache.catalina.LifecycleException: 启动加载程序时出错

                    at org.apache.catalina.loader.WebappLoader.startInternal(WebappLoader.java:412)

                    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)

                    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4769)

                    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)

                    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332)

                    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322)

                    at java.util.concurrent.FutureTask.run(FutureTask.java:266)

                    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)

                    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)

                    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866)

                    ... 70 more

            Caused by: java.lang.ClassNotFoundException: org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader

                    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)

                    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)

                    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

                    at java.lang.Class.forName0(Native Method)

                    at java.lang.Class.forName(Class.java:264)

                    at org.apache.catalina.loader.WebappLoader.createClassLoader(WebappLoader.java:515)

                    at org.apache.catalina.loader.WebappLoader.startInternal(WebappLoader.java:389)

                    ... 79 more

    26-Mar-2024 17:10:41.449 严重 [main] org.apache.catalina.core.ContainerBase.startInternal 子容器启动失败

            java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: 子容器启动失败

                    at java.util.concurrent.FutureTask.report(FutureTask.java:122)

                    at java.util.concurrent.FutureTask.get(FutureTask.java:192)

                    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:873)

                    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:248)

                    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)

                    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:433)

                    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)

                    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:925)

                    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)

                    at org.apache.catalina.startup.Tomcat.start(Tomcat.java:438)

                    at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:123)

                    at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.<init>(TomcatWebServer.java:104)

                    at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:481)

                    at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:211)

                    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:184)

                    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:162)

                    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:585)

                    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147)

                    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732)

                    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:409)

                    at org.springframework.boot.SpringApplication.run(SpringApplication.java:308)

                    at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:175)

                    at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:155)

                    at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:97)

                    at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:174)

                    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4904)

                    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)

                    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:683)

                    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:658)

                    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:661)

                    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1014)

                    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1866)

                    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)

                    at java.util.concurrent.FutureTask.run(FutureTask.java:266)

                    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)

                    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112)

                    at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:816)

                    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:468)

                    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1584)

                    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)

                    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:114)

                    at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402)

                    at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:345)

                    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:893)

                    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:794)

                    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)

                    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332)

                    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322)

                    at java.util.concurrent.FutureTask.run(FutureTask.java:266)

                    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)

                    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)

                    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866)

                    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:248)

                    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)

                    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:433)

                    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)

                    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:925)

                    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)

                    at org.apache.catalina.startup.Catalina.start(Catalina.java:735)

                    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

                    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

                    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

                    at java.lang.reflect.Method.invoke(Method.java:498)

                    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)

                    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473)

            Caused by: org.apache.catalina.LifecycleException: 子容器启动失败

                    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:885)

                    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:794)

                    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)

                    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332)

                    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322)

                    at java.util.concurrent.FutureTask.run(FutureTask.java:266)

                    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)

                    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)

                    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866)

                    ... 62 more

            Caused by: java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: 启动加载程序时出错

                    at java.util.concurrent.FutureTask.report(FutureTask.java:122)

                    at java.util.concurrent.FutureTask.get(FutureTask.java:192)

                    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:873)

                    ... 70 more

            Caused by: org.apache.catalina.LifecycleException: 启动加载程序时出错

                    at org.apache.catalina.loader.WebappLoader.startInternal(WebappLoader.java:412)

                    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)

                    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4769)

                    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)

                    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332)

                    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322)

                    at java.util.concurrent.FutureTask.run(FutureTask.java:266)

                    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)

                    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)

                    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866)

                    ... 70 more


    回答: 2024-03-26 16:49

    image.png

    0 讨论(0)
提交回复