我們必須在這裏我們使用了彈簧IOC的應用程序。我們在applicationContext.xml中配置了dataSource bean,並在其他bean定義中引用它。數據源初始化啓動
數據源bean認定中的樣子:
<bean id="dbDataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url"
value="jdbc:oracle:oci:@TESTDB" />
<property name="username" value="TESTUSER" />
<property name="password" value="TESTPWD" />
<property name="initialSize" value="50" />
<property name="maxActive" value="40" />
<property name="maxIdle" value="10" />
<property name="minIdle" value="10" />
<property name="maxWait" value="-1" />
</bean>
<bean id="serviceDAO" class="com.test.impl.ServiceDAOImpl">
<property name="dataSource" ref="dbDataSource" />
</bean>
ServiceDAOImpl如下所示:
public class ServiceDAOImpl implements ServiceDAO {
private JdbcTemplate jdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public ValueObj readValue(String key) {
String query = "SELECT * FROM SERVICE_LOOKUP WHERE KEY=?";
/**
* Implement the RowMapper callback interface
*/
return (ValueObj) jdbcTemplate.queryForObject(query,
new Object[] { key }, new RowMapper() {
public Object mapRow(ResultSet resultSet, int rowNum)
throws SQLException {
return new ValueObj(resultSet.getString("KEY"),
resultSet.getString("VALUE"));
}
});
}
public ServiceDAOImpl() {
}
}
現在,在服務器啓動時注入正在發生細微而當我們使用數據源中serviceDAOImpl的連接正在發生。但是,第一次進行數據庫調用需要大約3分鐘才能獲得響應。我想,這是因爲池創建的第一個電話中進行,我們在applicationConext.xml
設置參數"initialSize" = 50
。
因此,爲了避免這一點,我們需要能夠在應用程序啓動時創建本身可直接使用的池的方式。
請建議。如果需要澄清,請告知我。
問候 Saroj
春天確實渴望單身bean創建/默認初始化所以創建池時被讀取並配置了環境。還有其他一些事情必須導致延遲。 – soulcheck 2012-01-16 12:34:42
Soulcheck嗨, 許多感謝名單爲您回覆。但我已經用initialSize參數值爲1測試了代碼,時間縮短爲6秒。 – user1061771 2012-01-16 13:19:29