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
相关产品推荐
相关产品推荐

