>

Impala와 Oracle에 연결하려고하는 응용 프로그램이 있습니다. 아래는 정의 된 2 개의 빈입니다.

임팔라 드라이버-ImpalaJDBC41-2.5.41.jar 오라클 드라이버-ojdbc6.jar

<bean id="ID1" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.cloudera.impala.jdbc41.Driver"/>
<property name="url" value="jdbc:impala://impalahost:21050/;AuthMech=1;KrbRealm=myrealm;KrbServicName=impala;KrbHostFQDN=xxx" />
</bean>
<bean id="ID2" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@//oraclehost:1523/DB" />
<property name="username" value="myuser" />
<property name="password" value="pwd" />
<property name="connectionProperties">
<props>
<prop key="defaultRowPrefetch">5000</prop>
</props>
</property>
</bean>

빈 참조- "Oracle"연결을받는 동안 ID2,이 예외가 발생 함 (놀랍게도 cloudera 드라이버 코드로 이동)-

==java.lang.NullPointerException
===Stack trace...
java.util.Hashtable.put(Unknown Source)
com.cloudera.jdbc.common.AbstractDriver.copyProperties(Unknown Source)
com.cloudera.jdbc.common.AbstractDriver.connect(Unknown Source)
java.sql.DriverManager.getConnection(Unknown Source)
java.sql.DriverManager.getConnection(Unknown Source) org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFrom 
DriverManager(DriverManagerDataSource.java:173) org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFrom 
Driver(DriverManagerDataSource.java:164) org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:149) org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:119) org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111) org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)

Java 1.7에서도 동일한 구성이 제대로 작동합니다

  • 답변 # 1

    이 문제는 Oracle 드라이버가로드되기 전에 Impala 드라이버가로드 될 때 발생합니다. ImpalaJDBC41-2.5.41.jar은 ojdbc6.jar (알파벳 순서)보다 먼저 참조되기 때문입니다. 그래서 오라클 드라이버를 먼저로드하고 두 가지 옵션을 모두 사용할 수있는 두 가지 옵션이 있습니다-

    <올>

    Impala jar의 이름을 ZImpala로 바꾸어 ojdbc jar 다음에 참조되도록합니다

    그러나 '깨끗하고 나은'접근 방식은 Oracle 드라이버를 Jboss standalone.xml 내부의 JDBC 데이터 소스로 구성하여 사용자 정의 모듈로 Oracle 드라이버를로드하는 것입니다. 애플리케이션 EAR을 배포하기 전에도 Oracle 드라이버를로드합니다.

관련 자료

  • 이전 Jupyter Notebook (Python 3) 용 작동하는 rosbag 패키지 설치
  • 다음 geolocation - UBER과 같은 안드로이드에서 자동차의 지속적인 실제 추적을 수행하는 방법은 무엇입니까?