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

Spring Boot打包JAR启动时创建EntityManagerFactory遇NegativeArraySizeException

Spring Boot JAR启动时SQLite数据库连接引发NegativeArraySizeException异常

我开发了一个Spring Boot应用,用来从resources目录下的SQLite数据库(.mbtiles格式)提供地图瓦片服务。在IDE里运行完全正常,但用java -jar命令启动编译好的JAR包时出现了异常。数据库已经被打包进JAR文件里,但不确定这是不是问题的根源。

异常信息

Exception encountered during context initialization - cancelling refresh attempt:
     org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mapEntityManagerFactory' defined in class path resource
     [com/app/application/configuration/MapDataSourceConfiguration.class]: Invocation of init method failed; nested exception is java.lang.NegativeArraySizeException: -947658752




org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mapEntityManagerFactory' defined in class path resource [com/app/application/configuration/MapDataSourceConfiguration.class]: Invocation of init method failed; nested exception is java.lang.NegativeArraySizeException: -947658752
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1804)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
    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:1154)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:908)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:308)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295)
    at com.app.map.MapApplicationKt.main(MapApplication.kt:12)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
    at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65)

Caused by: java.lang.NegativeArraySizeException: -947658752
    at org.hibernate.boot.archive.internal.ArchiveHelper.getBytesFromInputStream(ArchiveHelper.java:181)
    at org.hibernate.boot.archive.internal.ArchiveHelper.getBytesFromInputStreamSafely(ArchiveHelper.java:139)
    at org.hibernate.boot.archive.spi.AbstractArchiveDescriptor.buildByteBasedInputStreamAccess(AbstractArchiveDescriptor.java:75)
    at org.hibernate.boot.archive.internal.JarFileBasedArchiveDescriptor.visitArchive(JarFileBasedArchiveDescriptor.java:117)
    at org.hibernate.boot.archive.scan.spi.AbstractScannerImpl.scan(AbstractScannerImpl.java:48)
    at org.hibernate.boot.model.process.internal.ScanningCoordinator.coordinateScan(ScanningCoordinator.java:76)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.prepare(MetadataBuildingProcess.java:107)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:269)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:182)
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:52)
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396)
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800)

相关配置

Application.yml配置

spring:
  jpa:
    database-platform: org.hibernate.dialect.SQLiteDialect
  datasource:
    map:
      url: jdbc:sqlite:backend/src/main/resources/db/mbtile/map.mbtiles
      driver-class-name: org.sqlite.JDBC
      configuration:
        maximum-pool-size: 1

MapDataSourceConfiguration配置类

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
    basePackageClasses = [Tile::class],
    basePackages = ["com.app.domain.repository.map"],
    entityManagerFactoryRef = "mapEntityManagerFactory"
)
class MapDataSourceConfiguration {

    @Bean
    @ConfigurationProperties("spring.datasource.map")
    fun mapDataSourceProperties(): DataSourceProperties = DataSourceProperties()

    @Bean
    @ConfigurationProperties("spring.datasource.map.configuration")
    fun mapDataSource(properties: DataSourceProperties): HikariDataSource =
        properties.initializeDataSourceBuilder().type(HikariDataSource::class.java).build()

    @Bean
    fun mapEntityManagerFactory(): LocalContainerEntityManagerFactoryBean = (LocalContainerEntityManagerFactoryBean()).apply {
        dataSource = mapDataSource(mapDataSourceProperties())
        setPackagesToScan("com.app.domain.model.map")
        jpaVendorAdapter = HibernateJpaVendorAdapter()
    }
}

Tile.kt实体类

@Entity
@IdClass(TileCompositeKey::class)
@Table(name = "tiles")
data class Tile(
    @Id @Column(name = "zoom_level") val zoomLevel: Int = 0,
    @Id @Column(name = "tile_column") val tileColumn: Int? = 0,
    @Id @Column(name = "tile_row") val tileRow: Int? = 0,
    @Column(name = "tile_data") val tileData: ByteArray? = null,
)

private class TileCompositeKey(
    private val zoomLevel: Int? = 0,
    private val tileColumn: Int? = 0,
    private val tileRow: Int? = 0,
) : Serializable

Build.gradle.kts依赖

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.xerial:sqlite-jdbc:3.32.3.2")
    implementation("com.github.gwenn:sqlite-dialect:0.1.0")
    implementation("org.springframework.boot:spring-boot-starter-data-jpa")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    implementation("org.flywaydb:flyway-core")
    implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.14.1")
    implementation("com.fasterxml.jackson.core:jackson-databind:2.14.1")
}

有人遇到过这个问题吗?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:01:10