定義 :首先proxool是一種java數(shù)據(jù)庫連接池技術(shù)乡小。
好處:此連接池提供了監(jiān)控功能翩迈,方便易用肖方,便于發(fā)現(xiàn)泄漏的情況
proxool中的常用屬性及其作用:
1 house-keeping-sleep-time :作用是保留線程最大睡眠時間数冬,我的理解是堡妒,用來監(jiān)管各個線程的狀態(tài)的間隔時間,也就是間隔多久對線程狀態(tài)進(jìn)行判斷 是否需要關(guān)閉或者銷毀按脚。
2 prototype-count :可用連接池的數(shù)量于毙,如果當(dāng)前的連接池的數(shù)量低于這個配置的值,那么新的連接將會被創(chuàng)建
3 maximum-connection-count :最大的數(shù)據(jù)庫連接數(shù)
4 minimum-connection-count: 最小的數(shù)據(jù)庫連接數(shù)
5 simultaneous-build-throttle :每次建立的最大連接數(shù)辅搬。有時候請求了唯沮,但是當(dāng)前沒有可用的連接數(shù)。由于連接可以使用多線程,在有限的時間之間建立聯(lián)系從而帶來可用連接堪遂,但是我們需要通過一些方式確認(rèn)一些線程并不是立即響應(yīng)連接請求的介蛉,默認(rèn)是10。不立即響應(yīng)的最大連接數(shù)量溶褪。
6 test-before-use:如果為true币旧,在每個連接被測試前都會服務(wù)這個連接,如果一個連接失敗猿妈,那么將被丟棄吹菱,另一個連接將會被處理,如果所有連接都失敗彭则,一個新的連接將會被建立鳍刷。否則將會拋出一個SQLException異常。
7 house-keeping-test-sql:如果發(fā)現(xiàn)了空閑的數(shù)據(jù)庫連接.house keeper 將會用這個語句來測試.這個語句最好非掣┒叮快的被執(zhí)行.如果沒有定義,將會被忽略倾剿。
關(guān)于proxool的應(yīng)用:
1 在xml中配置
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.logicalcobwebs.proxool.ProxoolDriver"></property>
<property name="url">
<value>proxool.db</value>
</property>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath*:com/huntor/bs/**/mapper/*.xml" />
<property name="configuration">
<bean class="org.apache.ibatis.session.Configuration">
<property name="mapUnderscoreToCamelCase" value="true" />
<property name="cacheEnabled" value="true" />
<property name="lazyLoadingEnabled" value="true" />
<property name="multipleResultSetsEnabled" value="true" />
<property name="useColumnLabel" value="true" />
<property name="useGeneratedKeys" value="false" />
<property name="autoMappingBehavior" value="PARTIAL" />
<property name="autoMappingUnknownColumnBehavior" value="NONE" />
<property name="defaultExecutorType" value="SIMPLE" />
<property name="defaultStatementTimeout" value="25" />
<property name="defaultFetchSize" value="100" />
<property name="safeRowBoundsEnabled" value="false" />
<property name="localCacheScope" value="SESSION" />
<property name="jdbcTypeForNull" value="OTHER" />
<property name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString" />
<!-- <property name="logImpl" value="LOG4J2" /> -->
</bean>
</property>
</bean>
具體的屬性含義就列舉了,用到了可以查詢
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
看到j(luò)dbcTemplate這個是不是特別熟悉蚌成,沒錯咱們平時注入用來直接查詢sql的就是他
2 在proxool中配置后前痘,在web.xml中加載后,直接在java中建造連接進(jìn)行查詢
public Connection getConnection() {
try {
if (conn == null) {
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
return DriverManager.getConnection("proxool.bigdata");
}
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
關(guān)閉連接
private void close() {
if (conn == null) {
return;
}
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
conn = null;
}
調(diào)用
public ResultSet getClusters(String sql) {
Connection conn = getConnection();
try {
Statement createStatement = conn.createStatement();
try {
return createStatement.executeQuery(sql);
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
this.close();
}
}
對ResultSet 進(jìn)行遍歷封裝為自己想要的數(shù)據(jù)
ResultSet resultSet = bigDataDao.getClusters(builder.toString());
try {
while (resultSet.next()) {
ApplicablePeopleInfo info = new ApplicablePeopleInfo();
info.setId(resultSet.getInt("id"));
info.setClusterName(resultSet.getString("name"));
clusters.add(info);
}
} catch (SQLException e) {
e.printStackTrace();
}