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
- Create a Spring Boot 3.5.0 project with MariaDB and Native Image support
- Configure MariaDB connection in application.yml
- Build native image
- 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.