2011-08-25 107 views
1

Hello guys我已经在glassfish 2.1中配置了连接池和JNDI资源。我可以在我的项目中通过查找方法获取数据源,并且一切正常。不过,我决定尝试Spring框架并使用现有的连接池。在Spring 3.0中配置数据源

在Spring上下文文件我有以下几点:

<jee:jndi-lookup id="dataSource" jndi-name="jdbc/name" /> 
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate"> 
    <constructor-arg ref="dataSource"/> 
</bean> 
<bean id="dao" class="com.mycompany.mavenproject3.Dao"> 
    <property name="simpleJdbcTemplate" ref="jdbcTemplate"/> 
</bean> 

当我部署的项目,我得到:

java.lang.IllegalArgumentException异常: '数据源' 或 'JdbcTemplate的' 要求]

为了获得数据源,我还需要在该文件或其他任何文件中配置什么?

+0

请向我们展示完整的堆栈跟踪和错误消息,而不仅仅是它的一行。 – skaffman

回答

2

据推测,com.mycompany.mavenproject3.Dao扩展了JdbcDaoSupport,但是你正在设置一个名为simpleJdbcTemplate的属性,这让我相信你已经定义了你自己的属性来保存模板,因为它不存在关于Spring的实现。因此,它会抱怨你,因为在使用它之前,你需要设置JdbcDaoSupport对象的dataSource propertyjdbcTemplate property,就像它告诉你的一样。将<property name="simpleJdbcTemplate"...更改为<property name="jdbcTemplate"...

如果您的DAO没有扩展JdbcDaoSupport,那么请查找并删除它或者正确设置它的属性。

+2

同时设置''就不需要定义'jdbcTemplate' bean(假设cmmavenproject3.Dao扩展'SimpleJdbcDaoSupport' – beny23

+0

你好,是的,我的类扩展了SimpleJdbcDaoSupport。没错,没有一个名为simpleJdbcTemplate的属性,所以当我改变属性名称时,它告诉我不能将SimpleJdbcTemplate转换为JdbcTemplate实例。我认为bc继承了接收JdbcTemplate而不是SimpleJdbcTemplate的setJbcdTemplate方法。弄清楚了这一点后,我想我需要告诉框架注入JdbcTemplate: 谢谢!!! – Oscar

1

你也可以直接在你的dao bean中调用你的数据源,不需要为jdbcTemplate做另一个bean。所以,你的上下文文件成为这样的事情:

<jee:jndi-lookup id="dataSource" jndi-name="jdbc/name" /> 
<bean id="dao" class="com.mycompany.mavenproject3.Dao"> 
     <property name="dataSource" ref="dataSource"/> 
</bean> 

之后,你只需要在你的DAO类继承JdbcDaoSupport春天类(其中包含getter和数据源的制定者)。

+0

好的,谢谢! – Oscar