You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mapstore.war部署启动失败,求助排查解决方案

问题

已在Ubuntu 22.04 LTS + Java 11环境下成功部署并运行Tomcat 9.0.88与GeoServer 2.23.1。部署mapstore.war后,应用在Tomcat管理器中可见但无法启动。查看/opt/tomcat/logs/catalina.out日志,核心错误为:

  • 无法创建PoolableConnectionFactory,提示创建文件"/webapps"失败[90062-175]
  • 后续引发Hibernate SessionFactory初始化失败、Spring Bean创建异常

未修改过Mapstore/H2/Hibernate/Spring相关配置,已尝试重新下载war包、重装Tomcat与GeoServer、赋予/opt/tomcat全权限、重启服务等操作,均无法解决问题,目标是正常访问localhost:8080/mapstore。

日志核心片段如下:

WARN 2024-05-08 12:03:06.268 org.hibernate.orm.deprecation::<init>:60 - HHH020100: The Ehcache second-level cache provider for Hibernate is deprecated.
INFO 2024-05-08 12:03:06.291 org.hibernate.annotations.common.Version::<clinit>:56 - HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
WARN 2024-05-08 12:03:08.152 org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator::initiateService:132 - HHH000342: Could not obtain connection to query metadata
org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Error creando archivo "/webapps"
Error while creating file "/webapps" [90062-175])
[...]
ERROR 2024-05-08 12:03:10.617 org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean::buildNativeEntityManagerFactory:426 - Failed to initialize JPA EntityManagerFactory: [PersistenceUnit: geostore] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.exception.GenericJDBCException: Unable to open JDBC Connection for DDL execution
WARN 2024-05-08 12:03:10.619 org.springframework.web.context.support.XmlWebApplicationContext::refresh:591 - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'geostoreEntityManagerFactory' defined in URL [jar:file:/opt/tomcat/webapps/mapstore/WEB-INF/lib/geostore-persistence-2.0.0.jar!/applicationContext-geostoreDatasource.xml]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: geostore] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.exception.GenericJDBCException: Unable to open JDBC Connection for DDL execution

解决方案

1. 覆盖H2数据库连接配置

MapStore默认使用H2嵌入式数据库,默认配置试图在根目录创建/webapps文件夹(无权限),需修改数据库存储路径:

  • 在Tomcat的/opt/tomcat/lib目录下新建geostore-datasource-ovr.xml文件
  • 写入以下内容,将数据库文件指定到Tomcat可读写的目录:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="org.h2.Driver"/>
        <property name="url" value="jdbc:h2:/opt/tomcat/data/geostore/geostore;DB_CLOSE_ON_EXIT=FALSE;AUTO_SERVER=TRUE"/>
        <property name="username" value="sa"/>
        <property name="password" value=""/>
        <property name="maxActive" value="10"/>
    </bean>

</beans>

2. 创建数据库目录并设置权限

执行以下命令创建存储目录并赋予Tomcat运行用户权限:

sudo mkdir -p /opt/tomcat/data/geostore
sudo chown -R tomcat:tomcat /opt/tomcat/data
sudo chmod -R 755 /opt/tomcat/data

(若Tomcat运行用户不是tomcat,替换为实际用户)

3. 重新部署MapStore

  • 停止Tomcat服务:
sudo systemctl stop tomcat
  • 删除已解压的mapstore目录:
sudo rm -rf /opt/tomcat/webapps/mapstore
  • 将mapstore.war重新放入/opt/tomcat/webapps目录
  • 启动Tomcat:
sudo systemctl start tomcat

4. 验证启动

查看/opt/tomcat/logs/catalina.out日志确认无数据库连接错误,之后访问localhost:8080/mapstore测试。

内容的提问来源于stack exchange,提问作者mra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 14:04:56