我在配置文件里面配置了proxool,连接池
然后在BaseDao 类里直接用jdbcTemplate操作db
是不是就能自动用到连接池的功能.这样用容器做我还真有点不习惯.
不知道所用的connection是否来自连接池!
希望知道的大侠能给我回答一下啊
<!--Mysql DataSource-->
<bean id="proxoolDataSource"
        class="org.logicalcobwebs.proxool.ProxoolDataSource" >
        <property name="driver">
            <value>${proxool.dbDriver}</value>
        </property>
        <property name="driverUrl">
            <value>${proxool.dbUrl}</value>
        </property>
        <property name="user">
            <value>${proxool.dbUser}</value>
        </property>
        <property name="password">
            <value>${proxool.dbPassWord}</value>
        </property>
        <property name="alias">
        <value>springmvc</value>
      </property>
</bean>
<!-- jdbc template -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
     <property name="dataSource">
       <ref bean="proxoolDataSource"/>
     </property>
</bean> <!--Connection-->
<bean id="baseDao" class="com.cn.springcomm.BaseDao">
<property name="jdbcTemplate">
<ref bean="jdbcTemplate"/>
</property>
     <property name="xtest" value="test"/>
</bean>
//CLASSpackage com.cn.springcomm;import java.util.List;
import org.springframework.jdbc.core.JdbcTemplate;public class BaseDao {
public BaseDao(){}

public List queryForList(String sql) {
List list = jdbcTemplate.queryForList(sql);
return list;
} private JdbcTemplate jdbcTemplate; public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}

}

解决方案 »

  1.   

    connection来自DataSource实际上你问的问题实质我想是spring.spring封装了操作db的一些东西JdbcTemplate
    HibernateTemplate
    还有spring的Dao源码不是很复杂建议阅读
    proxoolDataSource和org.apache.commons.dbcp.BasicDataSource用法一样其他连接池也一样,他们实现了共同的接口
    spring的db模版取得了datasource对象就可以取得连接 封装了打开连接关闭连接的代码而已即便不用spring一般企业也都有自己不同程度的封装刑红瑞的博客中曾经详细的描述了不用connection用DataSource的原因你找下,也可以把他的博文都读下,我觉得他的一些见解都很独到.
    http://blogger.org.cn/blog/blog.asp?name=hongrui
      

  2.   

    启动的时候spring 加载相应的配置文件就可以.
      

  3.   

    是否只要按照上面的配制,就会自动用到连接池啊?<!--Mysql   DataSource--> 
    <bean   id="proxoolDataSource" 
                    class="org.logicalcobwebs.proxool.ProxoolDataSource"   > 
                    <property   name="driver"> 
                            <value> ${proxool.dbDriver} </value> 
                    </property> 
                    <property   name="driverUrl"> 
                            <value> ${proxool.dbUrl} </value> 
                    </property> 
                    <property   name="user"> 
                            <value> ${proxool.dbUser} </value> 
                    </property> 
                    <property   name="password"> 
                            <value> ${proxool.dbPassWord} </value> 
                    </property> 
                    <property   name="alias"> 
                  <value> springmvc </value> 
              </property> 
    </bean> 
    <!--   jdbc   template   --> 
    <bean   id="jdbcTemplate"   class="org.springframework.jdbc.core.JdbcTemplate"> 
            <property   name="dataSource"> 
                <ref   bean="proxoolDataSource"/> 
            </property> 
    </bean>   <!--Connection--> 
    <bean   id="baseDao"   class="com.cn.springcomm.BaseDao"> 
    <property   name="jdbcTemplate"> 
    <ref   bean="jdbcTemplate"/> 
    </property> 
            <property   name="xtest"   value="test"/> 
    </bean> 
    //CLASS 
    package   com.cn.springcomm; import   java.util.List; 
    import   org.springframework.jdbc.core.JdbcTemplate; public   class   BaseDao   { 
    public   BaseDao(){} public   List   queryForList(String   sql)   { 
    List   list   =   jdbcTemplate.queryForList(sql); 
    return   list; 
    } private   JdbcTemplate   jdbcTemplate; public   JdbcTemplate   getJdbcTemplate()   { 
    return   jdbcTemplate; 

    public   void   setJdbcTemplate(JdbcTemplate   jdbcTemplate)   { 
    this.jdbcTemplate   =   jdbcTemplate; 
    } } 
      

  4.   

    proxool 与spring 整合有bug , user 和password 有问题 ,要么配置在URL 中, 要么增加一个delegateProperties 配置
    如下  <bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">
        <property name="driver" value="${datasource.driverClassName}" />
        <property name="driverUrl" value="${datasource.url}" />
        <property name="user" value="${datasource.username}" />
        <property name="password" value="${datasource.password}" />
        <property name="alias" value="${proxool.alias}" />
        <property name="houseKeepingTestSql" value="${proxool.house-keeping-test-sql}" />
        <property name="simultaneousBuildThrottle" value="${proxool.simultaneous-build-throttle}" />
        <property name="maximumConnectionCount" value="${proxool.maximum-connection-count}" />
        <property name="minimumConnectionCount" value="${proxool.minimum-connection-count}" />
        <property name="maximumConnectionLifetime" value="${proxool.maximum-connection-lifetime}" />
        <!--[Proxool Bug]Miss user and password properties, must add delegateProperties.  -->
        <property name="delegateProperties" value="user=${datasource.username},password=${datasource.password}" />
      </bean>
      

  5.   

    我没有用过Proxool,我只用过C3P0,既然这样配了,肯定是能用到连接池的,
    但是我好像没有看到最大、最小的连接数目,在Proxool中可以不用配置?
      

  6.   

    回楼主:
    你可以在web.xml里配置proxool的servlet,可以监视proxool的连接池情况,这是个很不错的功能,具体为: <servlet>
    <servlet-name>proxooladmin</servlet-name>
    <servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
    </servlet> <servlet-mapping>
    <servlet-name>proxooladmin</servlet-name>
    <url-pattern>/proxooladmin</url-pattern>
    </servlet-mapping>
    然后你可以看到连接池工作情况,如果你觉得这样看得还不够清楚,可以开启防火墙,监视你的数据库连接端口的活动回楼上:
    作为一个连接池,最大/最小连接池数目是肯定支持的:
    <property name="maximumConnectionCount" value="${proxool.maximum-connection-count}" />
    <property name="minimumConnectionCount" value="${proxool.minimum-connection-count}" />
    这两个就是最大/最小连接池数目
      

  7.   

    这样是不是用到连接池是要看你的指定的class="org.logicalcobwebs.proxool.ProxoolDataSource" 这个类是不是实现了池的机制。
      

  8.   

    就算org.logicalcobwebs.proxool.ProxoolDataSource实现了
    连接池的机制那那jdbctempt每次都会被new一次?
    spring配置文件不是启动apserver的时候就自动单例的加载springapp-servlet.xml里面的类吗?
      

  9.   

    我理解啊,启动apserver的时候,就自动单例的加载springapp-servlet.xml里所有的类!
    也就是说该web项目用到所有 springapp-servlet.xml 里面的类都是已经初始化好的