그래.. 오류가 안나면 이상하지 ..
Spring에 h2를 연결하는 과정에서 오류가 발생했다.
웬일로 잘 흘러가나 했지 나는 ..
java.lang.ClassNotFoundException: org.h2.driver
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:467)
at org.springframework.util.ClassUtils.forName(ClassUtils.java:304)
at org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.driverClassIsLoadable(DataSourceProperties.java:194)
해당 드라이버를 찾을 수 없다는 오류다.
당연히 ! 오류 내용을 검색해봤다.
혹시 나와 같은 오류를 경험한 경험자들의 조언을 얻을 수 있는지 궁금해서 ..
대부분 h2드라이버를 연결할 때 뭔가 잘못 작성했거나, 설정을 잘못 해서 해결하셨다.
정말 어이없는 실수.
클래스 이름을 잘못 주었던 것이었다 ...
~~~driver-class-name=org.h2.Driver
찾으신분 ..
Driver를 ... driver로 잘못 작성했다 ..
대소문자에도 영향을 받는 사항인지는 몰랐다 ..
강의를 보고 따라가고 있었는데,
명령어 하나하나를 더 주의깊게 봐야 한다.
~~url=사용하는본인의경로
~~driver-class-name=org.h2.Driver
대소문자도 주의하고, 명령어 의미를 잘 파악하자 !
java.lang.IllegalStateException: Failed to load ApplicationContext for
[WebMergedContextConfiguration@6dcd5639 testClass =
hello.hellospring.service.MemberServiceIntegrationTest, locations = [],
classes = [hello.hellospring.HelloSpringApplication],
contextInitializerClasses = [], activeProfiles = [],
propertySourceDescriptors = [],
...
springConfig 파일을 생성하고 Test 코드를 작성하고 실행했더니,
이런 오류가 발생했다 ..
왜 ..? 나 시키는 대로 했는데 ,, 뭐가 문제니 ..
오류 내용을 이것저것 찾아봤는데,
뭘.. 잘못설정하거나 아니면 다른 .. 오타가 난다거나 .. 그런 사항이 있는지 다 뒤집어봤다.
하 .. Config 파일을 두 개를 만들어 놨다.
진짜 노답이다 .. 겨우 그걸 해결해놨더니 다른 오류가 발생했다 ..
org.h2.jdbc.JdbcSQLNonTransientConnectionException:
Database may be already in use: "/Users/사용자명/test.mv.db".
Possible solutions: close all other connection(s); use the server mode [90020-224]
at org.h2.message.DbException.getJdbcSQLException
(DbException.java:690) ~[h2-2.2.224.jar:2.2.224]
어디서 DB가 연결되어있다는 의미 같은데,
(찾아보니까 그렇기도 했다) 나는 그저 시키는 대로 했을 뿐이고,,
재부팅을 해보라는 내용이 있어서 바로 컴퓨터를 종료해보았다.
그리고 다시 h2 DB 연결을 하고, 프로그램을 구동하는 순간 !
이번에는 다른 오류를 마주쳤다 ^v^
org.h2.jdbc.JdbcSQLInvalidAuthorizationSpecException:
Wrong user name or password [28000-200]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:461)
~[h2-1.4.200.jar:1.4.200]
...
사용자 이름 혹은 비밀번호가 잘못되었다니 ..?
결국 .. h2 데이터베이스 연결할 때의 문제였다.
일단 처음에는 Config 파일의 오류가 맞았으나
그 이후에 또 발생했던 문제는 결국 h2의 오류 ..
application.properteis 파일에서 user 이름도 추가해주어야 한다고 한다.
나는 하단의 코드를 추가해 주었다.
~username=sa
지금 mac에서 프로젝트를 구동하고 있는데,
cd h2/bin
./h2.sh
h2 폴더로 이동해서 bin 폴더 내부의 h2.sh 파일을 실행하면 DB에 잘 연결된다.
그리고 application.properties 파일 내부에
~url=jdbc의 경로
~driver-class-name=org.h2.Driver
~username=sa
이렇게 세 가지 정보를 입력해주어야 제대로 실행이 된다 !