我是Java EE和Connection Pooling的新手。我已经尝试了几个池,其中每个池都有以下问题:
ConnectionPoolDataSource source = new ConnectionPoolDataSource(); //Stands for any CP pool object
source.setUser("blabla");
source.setAnything("blabla";
如您所见,名为“source”的变量引用了具有特定类型的对象。例如。对于C3PO,它是ComboPooledDataSource。
我想要做的是通过Spring IOC注入能够连接池的对象。所以我需要某种界面。麻烦的是,DataSource interface只有两种获取实际连接的方法。简单地使用:
DataSource source = SomeIocContainer.getObject("DataSource");
我不能
source.setUser("blabla");
source.setOtherStuff("blabla");
有没有解决方案?
答案 0 :(得分:0)
在您的应用程序上下文(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...
}
答案 1 :(得分:0)
您不必在应用程序代码中处理数据库访问凭据。 DataSource
配置了容器,Spring ApplicationContext
或Java EE应用程序服务器。连接池也使用容器配置。从文档中的简单示例开始,并仔细扩展这些示例。
我建议您熟悉Spring(Spring 3 JDBC Documentation)和Java EE(Java EE 6 tutorial)的概念。
祝你好运!答案 2 :(得分:0)
数据库连接池通常会创建具有所有相同属性的连接,因此会在池上设置属性。与其他属性的连接使用多个池。
连接池的简单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