JNDI 位置 [comp/env/test] 上可用的 [class java.util.Properties] 类型的对象不可分配给 [javax.sql.DataSource]
Posted
技术标签:
【中文标题】JNDI 位置 [comp/env/test] 上可用的 [class java.util.Properties] 类型的对象不可分配给 [javax.sql.DataSource]【英文标题】:Object of type [class java.util.Properties] available at JNDI location [comp/env/test] is not assignable to [javax.sql.DataSource] 【发布时间】:2018-12-18 21:53:59 【问题描述】:我需要将 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自定义资源
但是当我部署战争文件时,我得到了这个错误:
。
【问题讨论】:
根据你的第一张截图comp/env/test
是一个属性对象。换句话说,您不能将其用作数据源。现在您只定义了池,但您还需要定义一个使用该池的 JDBC 资源,然后将其引用为 comp/env/jdbc/<resourcename>
。
【参考方案1】:
JNDI 自定义资源是一个 java.util.properties JDBC资源与JDBC连接池相关(可以是javax.sql.datasource)
去掉 JNDI 自定义资源,改用 JDBC 资源
【讨论】:
以上是关于JNDI 位置 [comp/env/test] 上可用的 [class java.util.Properties] 类型的对象不可分配给 [javax.sql.DataSource]的主要内容,如果未能解决你的问题,请参考以下文章