[JAVA][ERROR] java.lang.NoSuchFieldError: _param_
문제 상황
로컬 환경에서 서버를 가동시키면 에러가 발생하지 않았다.
하지만 WAR 파일을 만들어 개발 서버에 배포를 하고 만들어진 API를 호출하니 다음과 같은 에러 메시지가 발생했다.
18:34:23,690 ERROR [org.springframework.boot.web.support.ErrorPageFilter] (ajp-/10.0.10.128:8109-4) Forwarding to error page from request [/safety/1.0/cases] due to exception [_param_]: java.lang.NoSuchFieldError: _param_ at org.mariadb.jdbc.MariaDbServerPreparedStatement.(MariaDbServerPreparedStatement.java:97) [mariadb-java-client-1.5.7.jar:] at org.mariadb.jdbc.MariaDbConnection.internalPrepareStatement(MariaDbConnection.java:423) [mariadb-java-client-1.5.7.jar:] at org.mariadb.jdbc.MariaDbConnection.prepareStatement(MariaDbConnection.java:262) [mariadb-java-client-1.5.7.jar:] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_131] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [rt.jar:1.8.0_131] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_131] at java.lang.reflect.Method.invoke(Method.java:498) [rt.jar:1.8.0_131] at org.apache.tomcat.jdbc.pool.ProxyConnection.invoke(ProxyConnection.java:126) [tomcat-jdbc-8.5.11.jar:] at org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:108) [tomcat-jdbc-8.5.11.jar:] at org.apache.tomcat.jdbc.pool.DisposableConnectionFacade.invoke(DisposableConnectionFacade.java:81) [tomcat-jdbc-8.5.11.jar:] at com.sun.proxy.$Proxy120.prepareStatement(Unknown Source) at scouter.jdbc.DetectConnection.prepareStatement(DetectConnection.java:181) [scouter.agent.jar:] at org.apache.ibatis.executor.statement.PreparedStatementHandler.instantiateStatement(PreparedStatementHandler.java:87) [mybatis-3.4.4.jar:3.4.4] at org.apache.ibatis.executor.statement.BaseStatementHandler.prepare(BaseStatementHandler.java:88) [mybatis-3.4.4.jar:3.4.4] at org.apache.ibatis.executor.statement.RoutingStatementHandler.prepare(RoutingStatementHandler.java:59) [mybatis-3.4.4.jar:3.4.4] at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:85) [mybatis-3.4.4.jar:3.4.4] at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:62) [mybatis-3.4.4.jar:3.4.4] at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:324) [mybatis-3.4.4.jar:3.4.4] at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) [mybatis-3.4.4.jar:3.4.4] at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109) [mybatis-3.4.4.jar:3.4.4] at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:83) [mybatis-3.4.4.jar:3.4.4] at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148) [mybatis-3.4.4.jar:3.4.4] at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141) [mybatis-3.4.4.jar:3.4.4] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_131] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [rt.jar:1.8.0_131] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_131] at java.lang.reflect.Method.invoke(Method.java:498) [rt.jar:1.8.0_131] at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433) [mybatis-spring-1.3.1.jar:1.3.1] at com.sun.proxy.$Proxy94.selectList(Unknown Source) at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:230) [mybatis-spring-1.3.1.jar:1.3.1] at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:137) [mybatis-3.4.4.jar:3.4.4]
해결책
이는 MariaDB JAVA Client 버전 문제였다.
mariadb-java-client-1.5.7.jar -> mariadb-java-client-1.6.1.jar 로 변경하여 해결했다.
즉, POM 파일을 업데이트하면 된다.
org.mariadb.jdbc mariadb-java-client 1.6.1