1
回答
hive 使用jndi 数据源时已经在Tomcat 中配置好 但是在java代码中获取数据源就会报错
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

 

这个是异常信息

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:344)
    at javax.naming.InitialContext.lookup(InitialContext.java:411)
    at sunline.hive.utils.HiveJNDI.getConnection(HiveJNDI.java:29)
    at sunline.hive.utils.HiveJNDI.main(HiveJNDI.java:37)

 

这个是java代码(我想在java代码中获取数据源)

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class HiveJNDI {
    public static Connection getConnection()throws Exception{
 
        /*Properties properties=new Properties();
        properties.setProperty("java.naming.factroy.initial","org.jnp.interfaces.NamingContextFactory");
        properties.setProperty("java.naming.provider.url", "localhost:8080");*/
        InitialContext context = new InitialContext();
        DataSource envCtx = (DataSource) context.lookup("java:comp/env/hive/datasource");
      
            
        
        return envCtx.getConnection();
    }
    public static void main(String[] args) {
        try {
            Statement state = getConnection().createStatement();
            String sql="select*from tmp_ods_web_vhlclm_ic";
            ResultSet query = state.executeQuery(sql);
            while(query.next()){
                System.out.println(query.getString(1));
            }
        } catch (SQLException e) {
            
            e.printStackTrace();
        } catch (Exception e) {
            
            e.printStackTrace();
        }
    }
}

这个是tomcat 配置文件代码(这里因为我需要连接mysql数据源,与hive数据源,两个同时配置是否会有影响?name不同即可吗?)

<Resource url="jdbc:hive2://10.6.36.147:10000/answernbigdata"
                 driverClassName="org.apache.hive.jdbc.HiveDriver"
                  password="hive"
               username="hive" 
               maxWait="10000" 
               maxIdle="30" 
               maxActive="100" 
               type="javax.sql.DataSource" 
               auth="Container" 
               name="hive/datasource"/>

<无标签>
举报
zhang82772
发帖于8个月前 1回/47阅
顶部