首页 > 解决方案 > JNDI 位置 [comp/env/test] 上可用的类型 [class java.util.Properties] 的对象不可分配给 [javax.sql.DataSource]

问题描述

我需要将 Spring MVC 应用程序连接到 oracle 数据库 throw Glassfish 服务器。

这是我的 MVCconfiguration.java

@Bean
public DataSource getDataSource() throws SQLException {

    //Option 1 it works
    //DriverManagerDataSource dataSource = new DriverManagerDataSource();
    //dataSource.setDriverClassName("oracle.jdbc.driver.OracleDriver");
    //dataSource.setUrl("jdbc:oracle:thin:@xxx.xx.xx.xx:1521:dtest");
    //dataSource.setUsername("user");
    //dataSource.setPassword("pass");    

    //Option 2 didn't work
    JndiObjectFactoryBean bean = new JndiObjectFactoryBean(); 
    DataSource dataSource = null;
    JndiTemplate jndi = new JndiTemplate();
    try {
    dataSource = jndi.lookup("comp/env/test", DataSource.class);
    } catch (NamingException e) {
    }


    //Option 3 didn't work
    JndiDataSourceLookup dataSourceLookup = new JndiDataSourceLookup();
    DataSource dataSource = (DataSource) dataSourceLookup.getDataSource("comp/env/test");              

    return dataSource;        

}

在 glassfish 中有一个 jdbc 资源和 jndi 自定义资源

金迪

数据库资源

但是当我部署战争文件时,我得到了这个错误:

错误

JNDI 位置 [comp/env/test] 上可用的 [class java.util.Properties] 类型的对象不可分配给 [javax.sql.DataSource]。

标签: javaspring-mvcjdbcglassfishjndi

解决方案


JNDI 自定义资源是java.util.properties JDBC 资源与 JDBC 连接池相关(可以是javax.sql.datasource

只需删除 JNDI 自定义资源,并改用 JDBC 资源


推荐阅读