【问题标题】:JDBC Connection Pooling vs Dependency InjectionJDBC 连接池与依赖注入
【发布时间】:2013-06-06 08:49:22
【问题描述】:

我对 Java EE 和连接池很陌生。我已经尝试了几个池,每个池都有以下问题:

ConnectionPoolDataSource source = new ConnectionPoolDataSource(); //Stands for any CP pool object

source.setUser("blabla");
source.setAnything("blabla";

如您所见,名为“源”的变量引用了具有特定类型的对象。例如。对于 C3PO,它是 ComboPooledDataSource。

我想做的是通过 Spring IOC 注入能够连接池的对象。所以我需要某种接口。麻烦的是,DataSource interface 只有两种获取实际连接的方法。简单使用:

DataSource source = SomeIocContainer.getObject("DataSource");

我做不到

source.setUser("blabla");
source.setOtherStuff("blabla");

有什么解决办法吗?

【问题讨论】:

    标签: java spring jdbc dependency-injection connection-pooling


    【解决方案1】:

    在您的应用程序上下文(xml)中:

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
            <property name="driverClassName" value="${jdbc.driverClassName}"/>
            <property name="url" value="${jdbc.url}"/>
            <property name="username" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
        </bean>
    

    然后你可以在一些DAO中注入dataSource:

    @Repository
    public class JdbcCorporateEventDao implements CorporateEventDao {
    
        private JdbcTemplate jdbcTemplate;
    
        @Autowired
        public void setDataSource(DataSource dataSource) {
            this.jdbcTemplate = new JdbcTemplate(dataSource);
        }
    
        // JDBC-backed implementations of the methods on the CorporateEventDao follow...
    }
    

    【讨论】:

      【解决方案2】:

      您不必在应用程序代码中处理数据库访问凭据。 DataSource 配置有容器,Spring ApplicationContext 或 Java EE 应用程序服务器。连接池也与容器一起配置。从文档中的简单示例开始,然后仔细扩展这些示例。

      我建议您熟悉 Spring (Spring 3 JDBC Documentation) 和 Java EE (Java EE 6 tutorial) 的概念。

      祝你好运!

      【讨论】:

        【解决方案3】:

        数据库连接池通常创建具有所有相同属性的连接,因此在池上设置属性。与其他属性的连接,使用多个池。

        连接池的简单 Spring 配置:

        <bean id="springDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-  method="close" >
         <property name="url" value="jdbc:oracle:thin:@localhost:1521:SPRING_TEST" />
         <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
         <property name="username" value="root" />
         <property name="password" value="root" />
         <property name="removeAbandoned" value="true"/>
         <property name="initialSize" value="20" />
         <property name="maxActive" value="30" />
        </bean>
        

        发件人:http://javarevisited.blogspot.co.uk/2012/06/jdbc-database-connection-pool-in-spring.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-11-07
          • 2017-06-19
          • 2016-07-06
          • 2023-04-06
          • 2023-01-03
          • 2011-10-10
          • 1970-01-01
          相关资源
          最近更新 更多