使用Spring JDBCTemplate设置Tomcat JDBC连接池

时间:2014-12-22 19:07:54

标签: java mysql spring tomcat jdbctemplate

我正在尝试使用Spring JDBCTemplate在我的Java Web应用程序中设置Tomcat连接池(到MySQL)。

这是创建连接池的Java类:

@Configuration
public class DataAccessConfiguration {

    @Bean(destroyMethod = "close")
    public javax.sql.DataSource datasource() {
        org.apache.tomcat.jdbc.pool.DataSource ds = new org.apache.tomcat.jdbc.pool.DataSource();
        ds.setDriverClassName("org.h2.Driver");
        ds.setUrl("jdbc:h2:java-config");
        ds.setUsername("sa");
        ds.setPassword("");
        ds.setInitialSize(5);
        ds.setMaxActive(10);
        ds.setMaxIdle(5);
        ds.setMinIdle(2);
        return ds;
    }

    @Bean public JdbcOperations tpl() {
        return new JdbcTemplate(datasource());
    }

}

这就是我获取ApplicationContext的方式(例如在main方法中):

   public static void main(String[] args) {
      ApplicationContext context = 
             new ClassPathXmlApplicationContext("Beans.xml");

我应该如何在DataAccessConfiguration文件中定义Beans.xml类,以便Spring知道如何使用它?

**

更新

**

这是实际的配置方法:

public javax.sql.DataSource datasource() {
        org.apache.tomcat.jdbc.pool.DataSource ds = new org.apache.tomcat.jdbc.pool.DataSource();
        PoolProperties p = new PoolProperties();
        p.setUrl("jdbc:mysql://localhost:3306/mysql");
        p.setDriverClassName("com.mysql.jdbc.Driver");
        p.setUsername("root");
        p.setPassword("");
        p.setJmxEnabled(true);
        p.setTestWhileIdle(false);
        p.setTestOnBorrow(true);
        p.setValidationQuery("SELECT 1");
        p.setTestOnReturn(false);
        p.setValidationInterval(30000);
        p.setTimeBetweenEvictionRunsMillis(30000);
        p.setMaxActive(100);
        p.setInitialSize(10);
        p.setMaxWait(10000);
        p.setRemoveAbandonedTimeout(60);
        p.setMinEvictableIdleTimeMillis(30000);
        p.setMinIdle(10);
        p.setLogAbandoned(true);
        p.setRemoveAbandoned(true);
        p.setJdbcInterceptors(
                "org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;"+
                "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer");
        ds.setPoolProperties(p);
        return ds;
    }

请帮助改写Beans.xml

2 个答案:

答案 0 :(得分:2)

对于在属性中传递的值,存在setter方法。因此,基于XML的bean定义如下:

<bean  name="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource">
  <property name="url" value="jdbc:mysql://localhost:3306/mysql"/>
  <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
  ....
</bean>

<bean name="tpl" class="org.springframework.jdbc.core.JdbcTemplate">
  <property name="dataSource" ref="dataSource"/>
</bean>

答案 1 :(得分:-1)

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    destroy-method="close">
    <property name="jdbcUrl" value="#{config['db.url']}" />
    <property name="driverClass" value="#{config['db.driver']}" />
    <property name="user" value="#{config['db.username']}" />
    <property name="password" value="#{config['db.password']}" />
    <property name="acquireIncrement" value="1" />
    <property name="idleConnectionTestPeriod" value="300" />
    <property name="minPoolSize" value="1" />
    <property name="maxPoolSize" value="20" />
</bean>

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource" />
</bean>