Description:

After upgrading from Spring Boot 3.4.5 to 3.5.0, the native image build fails with MariaDB JDBC driver due to a NoSuchMethodException. This issue does not occur in Spring Boot 3.4.5.

Environment

  • Spring Boot version: 3.5.0
  • MariaDB Connector/J version: 3.5.3
  • GraalVM version: graalvm24
  • Operating System: macOS

Issue

During native image compilation, the following error occurs:


  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/

 :: Spring Boot ::                (v3.5.0)

2025-05-23T21:58:53.957+08:00  INFO 22011 --- [           main] com.example.demo.DemoApplication         : Starting AOT-processed DemoApplication using Java 24 with PID 22011 (/Users/chiu/Desktop/demo/build/native/nativeCompile/demo started by chiu in /Users/chiu)
2025-05-23T21:58:53.957+08:00  INFO 22011 --- [           main] com.example.demo.DemoApplication         : No active profile set, falling back to 1 default profile: "default"
2025-05-23T21:58:53.970+08:00  INFO 22011 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port 8080 (http)
2025-05-23T21:58:53.971+08:00  INFO 22011 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2025-05-23T21:58:53.971+08:00  INFO 22011 --- [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.41]
2025-05-23T21:58:53.975+08:00  INFO 22011 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2025-05-23T21:58:53.975+08:00  INFO 22011 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 18 ms
2025-05-23T21:58:53.980+08:00  INFO 22011 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2025-05-23T21:58:54.985+08:00  INFO 22011 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2025-05-23T21:58:54.989+08:00  INFO 22011 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 6.6.15.Final
2025-05-23T21:58:54.992+08:00  INFO 22011 --- [           main] o.h.c.internal.RegionFactoryInitiator    : HHH000026: Second-level cache disabled
2025-05-23T21:58:54.998+08:00  INFO 22011 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2025-05-23T21:58:56.000+08:00  WARN 22011 --- [           main] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 0, SQLState: null
2025-05-23T21:58:56.000+08:00 ERROR 22011 --- [           main] o.h.engine.jdbc.spi.SqlExceptionHelper   : error parsing url: Unexpected error while mapping properties
2025-05-23T21:58:56.000+08:00  WARN 22011 --- [           main] o.h.e.j.e.i.JdbcEnvironmentInitiator     : HHH000342: Could not obtain connection to query metadata

org.hibernate.exception.GenericJDBCException: unable to obtain isolated JDBC connection [error parsing url: Unexpected error while mapping properties] [n/a]
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:63) ~[na:na]
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:108) ~[demo:6.6.15.Final]
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:94) ~[demo:6.6.15.Final]
    at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.delegateWork(JdbcIsolationDelegate.java:116) ~[na:na]
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.getJdbcEnvironmentUsingJdbcMetadata(JdbcEnvironmentInitiator.java:336) ~[na:na]
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:129) ~[na:na]
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:81) ~[na:na]
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:130) ~[na:na]
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) ~[demo:6.6.15.Final]
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:238) ~[demo:6.6.15.Final]
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:215) ~[demo:6.6.15.Final]
    at org.hibernate.boot.model.relational.Database.<init>(Database.java:45) ~[demo:6.6.15.Final]
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:226) ~[demo:6.6.15.Final]
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:194) ~[demo:6.6.15.Final]
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:171) ~[na:na]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1442) ~[na:na]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1513) ~[na:na]
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) ~[na:na]
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:390) ~[demo:6.2.7]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:419) ~[demo:6.2.7]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:400) ~[demo:6.2.7]
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:366) ~[demo:6.2.7]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1873) ~[demo:6.2.7]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1822) ~[demo:6.2.7]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:607) ~[demo:6.2.7]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:529) ~[demo:6.2.7]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:339) ~[demo:6.2.7]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:373) ~[demo:6.2.7]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:337) ~[demo:6.2.7]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:207) ~[demo:6.2.7]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:970) ~[demo:6.2.7]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:627) ~[demo:6.2.7]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[na:na]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) ~[demo:3.5.0]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) ~[demo:3.5.0]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:318) ~[demo:3.5.0]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1362) ~[demo:3.5.0]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1351) ~[demo:3.5.0]
    at com.example.demo.DemoApplication.main(DemoApplication.java:10) ~[demo:na]
    at java.base@24/java.lang.invoke.LambdaForm$DMH/sa346b79c.invokeStaticInit(LambdaForm$DMH) ~[na:na]
Caused by: java.sql.SQLException: error parsing url: Unexpected error while mapping properties
    at org.mariadb.jdbc.Configuration.parseInternal(Configuration.java:735) ~[demo:na]
    at org.mariadb.jdbc.Configuration.parse(Configuration.java:674) ~[demo:na]
    at org.mariadb.jdbc.Driver.connect(Driver.java:99) ~[demo:na]
    at org.mariadb.jdbc.Driver.connect(Driver.java:29) ~[demo:na]
    at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:139) ~[na:na]
    at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:368) ~[demo:na]
    at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:205) ~[demo:na]
    at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:483) ~[na:na]
    at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:571) ~[na:na]
    at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:101) ~[na:na]
    at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:111) ~[demo:na]
    at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:126) ~[na:na]
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:483) ~[na:na]
    at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.delegateWork(JdbcIsolationDelegate.java:61) ~[na:na]
    ... 36 common frames omitted
Caused by: java.lang.IllegalArgumentException: Unexpected error while mapping properties
    at org.mariadb.jdbc.Configuration.mapPropertiesToOption(Configuration.java:808) ~[demo:na]
    at org.mariadb.jdbc.Configuration.parseInternal(Configuration.java:727) ~[demo:na]
    ... 49 common frames omitted
Caused by: java.lang.NoSuchMethodException: org.mariadb.jdbc.Configuration$Builder.password(java.lang.String)
    at java.base@24/java.lang.Class.checkMethod(DynamicHub.java:1176) ~[demo:na]
    at java.base@24/java.lang.Class.getDeclaredMethod(DynamicHub.java:1302) ~[demo:na]
    at org.mariadb.jdbc.Configuration.handleStringField(Configuration.java:869) ~[demo:na]
    at org.mariadb.jdbc.Configuration.setFieldValue(Configuration.java:857) ~[demo:na]
    at org.mariadb.jdbc.Configuration.processProperty(Configuration.java:844) ~[demo:na]
    at org.mariadb.jdbc.Configuration.processProperties(Configuration.java:821) ~[demo:na]
    at org.mariadb.jdbc.Configuration.mapPropertiesToOption(Configuration.java:804) ~[demo:na]
    ... 50 common frames omitted

Steps to Reproduce

  1. Create a Spring Boot 3.5.0 project with MariaDB and Native Image support
  2. Configure MariaDB connection in application.yml
  3. Build native image
  4. Observe the build failure

Expected Behavior

Native image should build successfully as it did with Spring Boot 3.4.5

Actual Behavior

Native image build fails with NoSuchMethodException for MariaDB JDBC driver's Configuration.Builder class

Reproduction Repository

The issue can be reproduced using this minimal project: https://github.com/mingchiuli/demo-jpa

Additional Context

  • This issue specifically appears after upgrading from 3.4.5 to 3.5.0
  • The same configuration works correctly in Spring Boot 3.4.5
  • The application runs successfully in JVM mode
  • No changes were made to the MariaDB configuration between versions

Workaround

Temporarily downgrading to Spring Boot 3.4.5 resolves the issue.

Comment From: wilkinsona

Duplicates https://github.com/oracle/graalvm-reachability-metadata/pull/612.