简体   繁体   English

使用多租户 org.apache.catalina.startup.HostConfig.deployWAR 在 tomcat 中部署 war 文件部署时出错

[英]Error to deploy war in tomcat with multitenant org.apache.catalina.startup.HostConfig.deployWAR Error during file deployment

Excuse me for my bad english,对不起,我的英语不好,

I have the following code, made with spring boot 2.4.我有以下代码,使用 spring 引导 2.4 制作。 Use as Ide Eclipse with Spring Tools.作为 Ide Eclipse 和 Spring 工具使用。 Allows you to take from a folder three documents called db1.properties db2.properties, etc.允许您从文件夹中取出名为 db1.properties db2.properties 等的三个文件。

        @Configuration
    public class MultitenantConfiguration {
        
        @Autowired
        private DataSourceProperties properties;
        
        @Bean
        @ConfigurationProperties(prefix="spring.datasource")
        public DataSource dataSource() {
            File[] files = Paths.get("src/main/resources/tenants").toFile().listFiles();
            Map<Object,Object> resolvedDataSources = new HashMap<>();
            
            for(File propertyFile : files) {
                Properties tenantProperties = new Properties();
                DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create(this.getClass().getClassLoader());
                try {
                    tenantProperties.load(new FileInputStream(propertyFile));
                    
                    String tenantId = tenantProperties.getProperty("name");
                    
                    dataSourceBuilder.driverClassName(properties.getDriverClassName())
                    .url(tenantProperties.getProperty("datasource.url"))
                    .username(tenantProperties.getProperty("datasource.username"))
                    .password(tenantProperties.getProperty("datasource.password"));
                    
                    if(properties.getType() != null) {
                        dataSourceBuilder.type(properties.getType());
                    }
                    
                    resolvedDataSources.put(tenantId, dataSourceBuilder.build());
                    
                }catch (IOException e) {
                    e.printStackTrace();
    
                    return null;
                }
            
            }
            
            MultitenantDataSource dataSource = new MultitenantDataSource();
            dataSource.setDefaultTargetDataSource(defaultDataSource());
            dataSource.setTargetDataSources(resolvedDataSources);
            
            dataSource.afterPropertiesSet();
    
            return dataSource;
        }
        
        private DataSource defaultDataSource() {
            DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create(this.getClass().getClassLoader())
                    .driverClassName(properties.getDriverClassName())
                    .url(properties.getUrl())
                    .username(properties.getUsername())
                    .password(properties.getPassword());
    
            if(properties.getType() != null) {
                dataSourceBuilder.type(properties.getType());
            }
    
            return dataSourceBuilder.build();
        }
    
    }

When I compile my project I have no error.当我编译我的项目时,我没有错误。 But when I deploy it in tomcat it shows me the following但是当我在 tomcat 中部署它时,它会显示以下内容

21 19:22:18.728 INFORMACIÓN [http-nio-8090-exec-62] org.apache.catalina.startup.HostConfig.deployWAR Despliegue del archivo [C:\Program Files\Apache Software Foundation\Tomcat 9.0\webapps\redlinev12v2-2.war] de la aplicación web
15-Jan-2021 19:22:26.087 INFORMACIÓN [http-nio-8090-exec-62] org.apache.jasper.servlet.TldScanner.scanJars Al menos un JAR, que se ha explorado buscando TLDs, aún no contenía TLDs. Activar historial de depuración para este historiador para una completa lista de los JARs que fueron explorados y de los que nos se halló TLDs. Saltarse JARs no necesarios durante la exploración puede dar lugar a una mejora de tiempo significativa en el arranque y compilación de JSP .
15-Jan-2021 19:22:30.588 GRAVE [http-nio-8090-exec-62] org.apache.catalina.startup.HostConfig.deployWAR Error durante el despliegue del archivo [C:\Program Files\Apache Software Foundation\Tomcat 9.0\webapps\redlinev12v2-2.war] de la aplicación web
    java.lang.IllegalStateException: Error starting child
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:720)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:706)
        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:978)
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:493)
        at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1642)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:288)
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(Unknown Source)
        at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(Unknown Source)
        at org.apache.catalina.manager.ManagerServlet.check(ManagerServlet.java:1596)
        at org.apache.catalina.manager.HTMLManagerServlet.upload(HTMLManagerServlet.java:294)
        at org.apache.catalina.manager.HTMLManagerServlet.doPost(HTMLManagerServlet.java:212)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.catalina.filters.CsrfPreventionFilter.doFilter(CsrfPreventionFilter.java:211)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.catalina.filters.HttpHeaderSecurityFilter.doFilter(HttpHeaderSecurityFilter.java:126)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:667)
        at org.apache.catalina.valves.RequestFilterValve.process(RequestFilterValve.java:348)
        at org.apache.catalina.valves.RemoteAddrValve.invoke(RemoteAddrValve.java:53)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Unknown Source)
    Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/redlinev12v2-2]]
        at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)
        ... 47 more
    Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [com/softdelsur/redlinev12/MultitenantConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.sql.DataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.NullPointerException
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800)
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1356)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1206)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:571)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:410)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1336)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1179)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:571)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
        at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1159)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:588)
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:326)
        at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:173)
        at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:153)
        at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:95)
        at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:174)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5166)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
        ... 48 more
    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [com/softdelsur/redlinev12/MultitenantConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.sql.DataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.NullPointerException
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:658)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:486)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1336)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1179)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:571)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1367)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1287)
        at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
        ... 80 more
    Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.sql.DataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.NullPointerException
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653)
        ... 94 more
    Caused by: java.lang.NullPointerException
        at com.softdelsur.redlinev12.MultitenantConfiguration.dataSource(MultitenantConfiguration.java:34)
        at com.softdelsur.redlinev12.MultitenantConfiguration$$EnhancerBySpringCGLIB$$d986e6f.CGLIB$dataSource$0(<generated>)
        at com.softdelsur.redlinev12.MultitenantConfiguration$$EnhancerBySpringCGLIB$$d986e6f$$FastClassBySpringCGLIB$$266f86a6.invoke(<generated>)
        at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
        at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331)
        at com.softdelsur.redlinev12.MultitenantConfiguration$$EnhancerBySpringCGLIB$$d986e6f.dataSource(<generated>)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
        ... 95 more
15-Jan-2021 19:22:30.590 INFORMACIÓN [http-nio-8090-exec-62] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [C:\Program Files\Apache Software Foundation\Tomcat 9.0\webapps\redlinev12v2-2.war] has finished in [11.862] ms

I do not know how to move forward if I comment the Bean works well, I tried to locate the file in another path but I continue in the same way.如果我评论 Bean 运行良好,我不知道如何前进,我试图在另一个路径中找到该文件,但我继续以相同的方式继续。 I hope your help我希望你的帮助

The problem is solved by changing the way to find the configuration files通过更改查找配置文件的方式解决了问题

Map<Object,Object> resolvedDataSources = new HashMap<>();
        PathMatchingResourcePatternResolver resourceLoader = new PathMatchingResourcePatternResolver();
        try {
            Resource[] resources = resourceLoader.getResources("/tenants/*.properties");
            for (Resource resource : resources) {
                try{
                System.out.println("Este es el recurso: "+resource);
                Properties tenantProperties = new Properties();
                DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create(this.getClass().getClassLoader());
                File templateFile = resource.getFile();
                
                tenantProperties.load(new FileInputStream(templateFile));
                String tenantId = tenantProperties.getProperty("name");
                
                dataSourceBuilder.driverClassName(properties.getDriverClassName())
                .url(tenantProperties.getProperty("datasource.url"))
                .username(tenantProperties.getProperty("datasource.username"))
                .password(tenantProperties.getProperty("datasource.password"));
                
                if(properties.getType() != null) {
                    dataSourceBuilder.type(properties.getType());
                }
                
                resolvedDataSources.put(tenantId, dataSourceBuilder.build());
                }catch (IOException e) {
                    System.out.println("Fallo al abrir los archivos de db");
                    e.printStackTrace();

                    return null;
                }
            }
            
        } catch (IOException e) {
            System.out.println("Archivo de configuración no encontrado");
            e.printStackTrace();
        }

use PathMatchingResourcePatternResolver as commented @dnault使用 PathMatchingResourcePatternResolver 评论@dnault

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 WAR文件的Tomcat部署错误 - Tomcat deployment error with WAR file org.apache.catalina.LifecycleException tomcat错误 - org.apache.catalina.LifecycleException tomcat error Tomcat 8 嵌入式 - 错误 {org.apache.catalina.core.ContainerBase} - 子容器在启动过程中失败 - Tomcat 8 embedded - ERROR {org.apache.catalina.core.ContainerBase} - A child container failed during start 在Tomcat中部署WAR文件,部署后发行 - Deploy WAR file in Tomcat, Issue after Deployment TOMCAT-org.apache.catalina.startup.Catalina stopServer严重:Catalina.stop: - TOMCAT - org.apache.catalina.startup.Catalina stopServer SEVERE: Catalina.stop: 无法在Tomcat 7上部署YouTrack(org.apache.catalina.LifecycleException) - Can't deploy YouTrack on Tomcat 7 (org.apache.catalina.LifecycleException) 使用Tomcat7,Apache Wink和Mongo DB在WAR Deploy上记录错误 - Logging error on WAR Deploy with Tomcat7, Apache Wink, and Mongo DB 使用JDK 11的TOMCAT 7.0.92:-错误localhost-startStop-1 org.apache.catalina.startup.ContextConfig-无法处理Jar tools.jar中的注释 - TOMCAT 7.0.92 with JDK 11 :- ERROR localhost-startStop-1 org.apache.catalina.startup.ContextConfig - Unable to process Jar tools.jar for annotations 如何在apache tomcat 8中将uaa部署为war文件? - How to deploy uaa as a war file in apache tomcat 8? 将WAR文件部署到Tomcat失败:URI方案错误 - WAR file deployment to Tomcat fails: URI scheme error
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM