【问题标题】:Configuring Datasource in Spring 3.0在 Spring 3.0 中配置数据源
【发布时间】:2011-08-25 21:36:14
【问题描述】:

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

在 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: 'dataSource' or 'jdbcTemplate' is required]

为了获取数据源,我必须在该文件或任何其他文件中配置什么吗?

【问题讨论】:

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

标签: spring glassfish


【解决方案1】:

据推测,com.mycompany.mavenproject3.Dao 扩展了 JdbcDaoSupport,但您在其上设置了一个名为 simpleJdbcTemplate 的属性,这让我相信您已经定义了自己的属性来保存模板,因为这并没有存在于 Spring 的实现中。因此,它向您抱怨,因为您需要在使用 JdbcDaoSupport 对象之前设置 dataSource propertyjdbcTemplate property,就像它告诉您的那样。将&lt;property name="simpleJdbcTemplate"... 更改为&lt;property name="jdbcTemplate"...

如果您的 DAO 没有扩展 JdbcDaoSupport,则查找扩展的内容并将其删除或适当地设置其属性。

【讨论】:

  • 同时设置 &lt;property name="dataSource" ref="dataSource"/&gt; on 消除了定义 jdbcTemplate bean 的需要(假设 c.m.mavenproject3.Dao 扩展了 SimpleJdbcDaoSupport
  • 您好,是的,我的课程扩展了 SimpleJdbcDaoSupport。你是对的,没有一个名为 simpleJdbcTemplate 的属性,所以当我更改属性名称时,它告诉我无法将 SimpleJdbcTemplate 转换为 JdbcTemplate 实例。我想我正在继承接收 JdbcTemplate 而不是 SimpleJdbcTemplate 的方法 setJbcdTemplate。在弄清楚这一点后,我想我需要告诉框架注入一个 JdbcTemplate: 谢谢!!!
【解决方案2】:

你也可以直接在你的 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 spring 类(其中包含数据源的 getter 和 setter)。

【讨论】:

    猜你喜欢
    • 2021-09-24
    • 2016-01-17
    • 2015-01-26
    • 2017-05-20
    • 2013-12-08
    • 2021-03-16
    • 2018-03-22
    相关资源
    最近更新 更多