定义 :首先proxool是一种java数据库连接池技术。
好处:此连接池提供了监控功能,方便易用,便于发现泄漏的情况
proxool中的常用属性及其作用:
1 house-keeping-sleep-time :作用是保留线程最大睡眠时间,我的理解是,用来监管各个线程的状态的间隔时间,也就是间隔多久对线程状态进行判断 是否需要关闭或者销毁。
2 prototype-count :可用连接池的数量,如果当前的连接池的数量低于这个配置的值,那么新的连接将会被创建
3 maximum-connection-count :最大的数据库连接数
4 minimum-connection-count: 最小的数据库连接数
5 simultaneous-build-throttle :每次建立的最大连接数。有时候请求了,但是当前没有可用的连接数。由于连接可以使用多线程,在有限的时间之间建立联系从而带来可用连接,但是我们需要通过一些方式确认一些线程并不是立即响应连接请求的,默认是10。不立即响应的最大连接数量。
6 test-before-use:如果为true,在每个连接被测试前都会服务这个连接,如果一个连接失败,那么将被丢弃,另一个连接将会被处理,如果所有连接都失败,一个新的连接将会被建立。否则将会抛出一个SQLException异常。
7 house-keeping-test-sql:如果发现了空闲的数据库连接.house keeper 将会用这个语句来测试.这个语句最好非常快的被执行.如果没有定义,将会被忽略。
关于proxool的应用:
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>
看到jdbcTemplate这个是不是特别熟悉,没错咱们平时注入用来直接查询sql的就是他
2 在proxool中配置后,在web.xml中加载后,直接在java中建造连接进行查询
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;
}
关闭连接
private void close() {
if (conn == null) {
return;
}
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
conn = null;
}
调用
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 进行遍历封装为自己想要的数据
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();
}