시스템 모니터링 자동화를 하며 지난 번에 구축한 SQL Server LMS 발송 DB와 내가 만든 모니터링 자동화 프로그램을 연결시켜보려고 했다. 그러나 연동 테스트 시 아래와 같은 오류가 발생하였다.
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/microsoft/sqlserver/jdbc/SQLServerDataSource has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at database.SQLServerLMSDbConn.getConnection(SQLServerLMSDbConn.java:12)
at database.DBConnectionFactory.<init>(DBConnectionFactory.java:15)
at database.Main.main(Main.java:21)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at database.SQLServerLMSDbConn.getConnection(SQLServerLMSDbConn.java:12)
at database.DBConnectionFactory.<init>(DBConnectionFactory.java:15)
at database.Main.main(Main.java:21)
필요사항
- 로직 소스는 최대한 건드리지 않고 내가 필요한 DB connection을 어떤 DB든지 쉽게 갖다 쓰고 싶다.
그래서 예전부터 적용해보고 싶었던 DB connection을 가져오는 factory 패턴을 적용했고, Oracle은 문제가 되질 않았다. 하지만 SQL Server는 jdbc가 달라서 MS 홈페이지에서 다운받아서 External jar로 따로 넣어주었고, MS에서 제공한 샘플 코드를 보고 했는데도 위와 같은 오류가 발생하였다.
SQL server jdbc 다운로드 url:https://learn.microsoft.com/ko-kr/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-ver16
원인 : 현재 java 버전엔 위 jdbc 버전이 너무 높음
https://learn.microsoft.com/ko-kr/sql/connect/jdbc/system-requirements-for-the-jdbc-driver?view=sql-server-ver16
해결 : 다운받은 zip파일 내부에 jdbc 버전이 2개가 있어서 숫자(버전)이 낮은 거로 jar 파일 교체
'언어 > JAVA' 카테고리의 다른 글
mybatis 파라미터 단일(String) 매핑 오류 (0) | 2024.01.17 |
---|---|
쌩 java로만 mybatis-3.5.14 사용하기(only java mybatis without Spring) (0) | 2024.01.11 |
String의 JVM에 들어가있는 주소값 출력 (1) | 2023.12.17 |
Thread 기초 (0) | 2023.12.17 |
executeQuery와 Fetch size (0) | 2023.12.13 |