ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MariaDB) java.lang.RuntimeException: Driver net.sf.log4 jdbc.sql.jdbcapi.DriverSpy claims to not accept jdbcUrl, DB연결 오류
    Spring Legacy/오류 해결 2020. 10. 8. 12:35

    로그인 페이지에서 아이디와 패스워드를 넘겨줄 때 mapper에서 DB로 연결하지 못하는 상황..

     

    DB 접속 시 해당 오류가 나타납니다.

     

     

    java.lang.RuntimeException: Driver net.sf.log4 jdbc.sql.jdbcapi.DriverSpy claims to not accept jdbcUrl

     

    10월 08, 2020 10:21:49 오전 org.apache.catalina.core.StandardWrapperValve invoke
    SEVERE: 경로 []의 컨텍스트 내의 서블릿 [appServlet]을(를) 위한 Servlet.service() 호출이, 근본 원인(root cause)과 함께, 예외 [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
    ### Error querying database.  Cause: java.lang.RuntimeException: Driver net.sf.log4jdbc.sql.jdbcapi.DriverSpy claims to not accept jdbcUrl, jdbc:log4jdbc:mariadb://localhost:3306/dbuser
    ### The error may exist in file [C:\_spring\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\Spring_kdn_00_Setting\WEB-INF\classes\mappers\memberMapper.xml]
    ### The error may involve memberMapper.login
    ### The error occurred while executing a query
    ### Cause: java.lang.RuntimeException: Driver net.sf.log4jdbc.sql.jdbcapi.DriverSpy claims to not accept jdbcUrl, jdbc:log4jdbc:mariadb://localhost:3306/dbuser]을(를) 발생시켰습니다.
    java.lang.RuntimeException: Driver net.sf.log4jdbc.sql.jdbcapi.DriverSpy claims to not accept jdbcUrl, jdbc:log4jdbc:mariadb://localhost:3306/dbuser
    	at com.zaxxer.hikari.util.DriverDataSource.<init>(DriverDataSource.java:110)
    	at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:325)
    	at com.zaxxer.hikari.pool.PoolBase.<init>(PoolBase.java:114)
    	at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:108)
    	at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112)
    	at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)
    	at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)
    	at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:82)
    	at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:68)
    	at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:338)
    	at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:84)
    	at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:62)
    	at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:326)
    	at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
    	at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
    	at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:83)
    	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148)
    	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
    	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:77)
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
    	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433)
    	at com.sun.proxy.$Proxy25.selectOne(Unknown Source)
    	at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:166)
    	at com.kdn.persistence.MemberDAOImpl.selectMember(MemberDAOImpl.java:24)
    	at com.kdn.service.MemberServiceImpl.login(MemberServiceImpl.java:19)
    	at com.kdn.ctrl.MemberCtrl.login(MemberCtrl.java:29)
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
    	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
    	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)
    	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97)
    	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:849)
    	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:760)
    	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
    	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
    	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
    	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
    	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
    	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
    	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
    	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:616)
    	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:818)
    	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1626)
    	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
    	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
    	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    	at java.base/java.lang.Thread.run(Thread.java:832)
    

     

    문제 원인 (예상) 

     

    DriverSpy 클래스가 claims not to accept jdbcUrl이라고 되어 있습니다.
    url이 달라졌나 소스를 보니 Driver를 로드하게 되는데 내장 톰캣에는 내장된 Driver가 아무래도 일반 tomcat 8 에는 없는 것 같습니다. 

    출처: 4urdev.tistory.com/84

     

    현재 사용하는 톰캣 8.5에도 mariadb를 실행할 드라이버가 없는 걸로 예상됩니다..

     

     

    문제 해결 

     

    jdbc:log4 jdbc:mariadb 부분을 jdbc:log4 jdbc:mysql로 변경합니다. 
    이는 다음과 같이 mysql driver를 강제 로드해서 사용하기 위함입니다. 
    (mysql과 mariadb는 유사한 형태를 가지고 있습니다. mariadb가 mysql 기반이라는..?)

    출처: 4urdev.tistory.com/84

     

    jdbcUrl을 mariadb에서 mysql로 강제 주입해야 합니다...

     

    변경 전 

     

    root-context.xml

    <property name="jdbcUrl" value="jdbc:log4jdbc:mariadb://localhost:3306/dbuser"></property>

     

    변경 후 

     

    root-context.xml

    <property name="jdbcUrl" value="jdbc:log4jdbc:mysql://localhost:3306/dbuser"></property>

    pom.xml

    	<dependency>
    	    <groupId>mysql</groupId>
    	    <artifactId>mysql-connector-java</artifactId>
    	    <version>8.0.21</version>
    	</dependency>

     

    결과 

     

    로그인 기능이 정상적으로 작동합니다.

     

    하루 종일 오타를 찾아도 보고 새로 만들어 봐도 계속 이오 류가 뜨길래  매우 당황했었네요.. 

     

    근본적인 메커니즘에 대한 이해가 조금 부족했습니다.

     

    다음에 오류가 발생하면 조금 더 여러 가지 방법에서 접근할 수 있을 것 같습니다..

     

    'Spring Legacy > 오류 해결' 카테고리의 다른 글

    JDK) openjdk 15 > openjdk 1.8 변경 오류  (0) 2020.10.28

    댓글

Designed by Tistory.