好像spring可以用dbcp或c3p0来配置数据库吧,然后注入hibernate的sessionFactory里,spring里关于hibernate的使用文档也这么举例的,但后来我去掉例子里的DataSource配置,而是直接在hibernate的sessionFactory配置里的"hibernateProperties"里通过hibernate.connection.driver_class,hibernate.connection.url,hibernate.connection.username,hibernate.connection.password来配置,一样能操作数据库啊,那我还配置DataSource做什么呢?配置如下:
<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="mappingResources">
      <list>
        <value>xx/xx/***.hbm.xml</value>         
      </list>
    </property>
    <property name="hibernateProperties">
     <props>
     <prop key="hibernate.connection.driver_class">org.postgresql.Driver</prop>
<prop key="hibernate.connection.url">jdbc:postgresql:***</prop>
<prop key="hibernate.connection.username">***</prop>
<prop key="hibernate.connection.password">***</prop>
     <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
     <prop key="hibernate.show_sql">false</prop>
     </props>
    </property>
 </bean>
现在我就有个问题想请教大家了:
我这么写坏处在哪?是不是spring容器关闭时没法自动释放数据源?

解决方案 »

  1.   

    没人知道?还是大家除了spring文档举的例子就没用别的配过? 
      

  2.   

    数据源内部维护者一个数据库连接池,使用数据源,我们获取连接,都是直接从这个池中直接拿,
    从内存中直接拿肯定要比使用DriverManager.getConnection();效率要高。从数据源中拿到的
    连接都是被包装过的连接,改连接的close方法已经被重写,调用连接的close()就是把数据库连接又放回到
    连接池中,实现数据库连接的重用.服务器跟数据库交互是进行网络交互的,消耗的服务器资源比较大,你获取一次连接使用后然后直接把它释放掉,
    这将会极大的消耗服务器资源当然这仅仅是一点好处,还有许多就不一一说了,建议楼主查查这方面的资料
      

  3.   

    反正spring文档举了例子,文档就像课本,课本说的肯定对的,但课本没说的我就不知道对不对了,所以希望大家给个答案。我一直再想为啥我这么配能行,而spring没举这样配而非采用将DataSource注入hibernate的方法,难道因为spring最大的特色就是ioc和依赖关系配置?这样举例更具spring的特色?如果是这样我就放心了,就怕spring举这个例子是有其他原因的,我怕哪儿不对劲了就惨了。
    还有就是怎么配置能去掉tomcat里那些spring加载项的信息提示啊,一长串信息,看着累啊,而且心里不放心以为哪儿出错了,例如:
    -........
    -connection properties:{user=XXX,password=****,release_mod=on_close}
    -........
    这都打印出来,没必要吧,能去掉么?怎么配置
      

  4.   

    谢谢 sangshusen_1988回复,我就是怕我这么写 spring不会自动释放.
      

  5.   

    你使用spring的事务管理了吗?使用它的事物管理就没问题,
    它在提交事务或者回滚事务后,会自动关闭连接的
      

  6.   

    HibernateTransactionManager?惨了,没用.加入这个就行了吧?
      

  7.   


    那是使用了Spring的事务管理从DataSource对象中获取一个新的Connection对象,
    并在事务启动时将它绑定到当前线程。
    当事务终止时从当前线程中去除Connection对象,
    并在必要的时候提供回滚活动的事务,
    并及时关闭Connection对象。