java.lang.NullPointerException - com.mysql.jdbc.ConnectionImpl.getServerCharset
Spring Framework에서 JDBC로 mysql에 접근했는데 다음과 같은 오류가 발생합니다.
HTTP Status 500 – Internal Server Error
Type Exception Report
Message Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Could not create connection to database server.)
### The error may exist in org/example/repository/UserMapper.java (best guess)
### The error may involve org.example.repository.UserMapper.selectAll
### The error occurred while executing a query
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Could not create connection to database server.)
...[생략]...
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Root Cause
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Could not create connection to database server.)
### The error may exist in org/example/repository/UserMapper.java (best guess)
### The error may involve org.example.repository.UserMapper.selectAll
### The error occurred while executing a query
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Could not create connection to database server.)
org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:75)
...[생략]...
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Root Cause
org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Could not create connection to database server.)
### The error may exist in org/example/repository/UserMapper.java (best guess)
### The error may involve org.example.repository.UserMapper.selectAll
### The error occurred while executing a query
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Could not create connection to database server.)
org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:26)
...[생략]...
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Root Cause
org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Could not create connection to database server.)
org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82)
...[생략]...
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Root Cause
org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Could not create connection to database server.)
org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)
...[생략]...
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Root Cause
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
...[생략]...
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Root Cause
java.lang.NullPointerException
com.mysql.jdbc.ConnectionImpl.getServerCharset(ConnectionImpl.java:2983)
...[생략]...
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Note The full stack trace of the root cause is available in the server logs.
마지막 오류가 com.mysql.jdbc.ConnectionImpl.getServerCharset 메서드 호출에 "java.lang.NullPointerException" 예외가 발생한 것인데요, 이때의 구성은 다음과 같았습니다.
// pom.xml
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
// applicationContext.xml
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Seoul&useSSL=false" />
<property name="username" value="..." />
<property name="password" value="..." />
</bean>
사실 이전에 테스트했던 콘솔 프로그램에서도 마찬가지의 오류가 발생하는데,
Java에서 MySQL 사용
; https://www.sysnet.pe.kr/2/0/1127
그사이 다음과 같은 변화가 있었다고 합니다.
mysql-connector-java 6.xx대로 변경시 주의 사항
; https://effectivesquid.tistory.com/entry/mysqlconnectorjava-6xx%EB%8C%80%EB%A1%9C-%EB%B3%80%EA%B2%BD%EC%8B%9C-%EC%A3%BC%EC%9D%98-%EC%82%AC%ED%95%AD
그래서, driverClassName을 "com.mysql.cj.jdbc.Driver"로 바꿔야 한다고.
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]