proxool-0.9.0+spring 1.2.6的一个很郁闷的问题。不知道是java代码还是配置问题

xjying 2011-10-17 10:51:49
这是spring配置代码

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"
"http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:proxool-jdbc.properties</value>
</list>
</property>
</bean>



<bean id="localDataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource" destroy-method="close">
<property name="driver">
<value>${proxool.local.driver}</value>
</property>
<property name="driverUrl">
<value>${proxool.local.url}</value>
</property>
<property name="user">
<value>${proxool.local.username}</value>
</property>
<property name="password">
<value>${proxool.local.password}</value>
</property>
<property name="alias">
<value>${proxool.local.alias}</value>
</property>
<property name="houseKeepingSleepTime" value="30000" />
<property name="maximumActiveTime" value="10000" />
<property name="prototypeCount" value="5" />
<property name="maximumConnectionCount" value="50" />
<property name="minimumConnectionCount" value="10" />
</bean>

</beans>

java代码: DataSource工厂类
public class DataSourceFactory {

private static Logger logger = Logger.getLogger(DataSourceFactory.class);

private static BeanFactory beanfactory = null;

static {
if (beanfactory == null)
beanfactory = new FileSystemXmlApplicationContext(
"classpath:applicationContext.xml");
}

public static synchronized DataSource getLocalDataSource() {
return (DataSource) beanfactory.getBean("localDataSource");
}

}

获取连接类。
public class DBConnectionFactory {
public static synchronized Connection getLocalDBConnection()
throws SQLException {

Connection connection = null;

try {
connection = DataSourceFactory.getLocalDataSource().getConnection();
connection.setAutoCommit(false);
} catch (SQLException sqle) {
sqle.printStackTrace();
throw new SQLException("数据库连接失败!");
}

if (connection == null) {
throw new SQLException(
"没有创建任何数据库连接!");
} else {
return connection;
}
}
}


然后,业务代码在service层调用。
private Connection conn = null;
public List getMsgRecord(){
try{
conn = DBConnectionFactory.getLocalDBConnection();
List msgList = recordDao.getRecord(conn);
} finally {
if (null != conn) {
conn.close();
}
}
}
getRecord方法。
代码

List list = new ArrayList();
PreparedStatement pstmt = null;
try{
ResultSet rs = conn.prepareStatement("select * from tableA");
while (rs.next()) {
CommonMsgEntity msgEntity = new CommonMsgEntity();
msgEntity.setSRI_ID(rs.getInt("SRI_ID") + "");
msgEntity.setSRI_APPNAME(rs.getString("SRI_APPNAME"));
msgEntity.setSRI_TYPE(rs.getInt("SRI_TYPE") + "");
msgEntity.setSRI_TITLE(rs.getString("SRI_TITLE"));
msgEntity.setSRI_URL(rs.getString("SRI_URL"));
msgEntity.setSRI_RECTIME(rs.getString("SRI_RECTIME"));
msgEntity.setSRI_APPTIME(rs.getString("SRI_APPTIME"));
list.add(msgEntity);
}
return list;
}finally {
try {
if (null != rs) {
rs.close();
}
if (null != pstmt) {
pstmt.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
...全文
63 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
flowersove 2011-10-17
  • 打赏
  • 举报
回复
你把Connection放到方法体内试试!因为Service由Spring创建,默认只创建一次,可能Connection没被释放掉
xjying 2011-10-17
  • 打赏
  • 举报
回复
回复:flowersove
对数据库操作要释放Connection,这个释放不就是conn.close吗?我的每个conn最后都释放了。难道还有其它的方式,进行释放。
flowersove 2011-10-17
  • 打赏
  • 举报
回复
对数据库操作后要释放Connection,否则proxool会默认在5分钟后自动释放连接!

你也可以配置连接的释放时间
<maximum-active-time>1800000</maximum-active-time> <!-- 最大活动时间 默认值:5分钟 -->
xjying 2011-10-17
  • 打赏
  • 举报
回复
这个配置有问题吗?用loadrunner测试的时候,感觉连接没有释放。跑2个用户并发,30秒后,oracle的进程数,就满了。。
xjying 2011-10-17
  • 打赏
  • 举报
回复
顶呀,高人等待呀。proxool真这么麻烦吗?
xjying 2011-10-17
  • 打赏
  • 举报
回复
up!!!!
xjying 2011-10-17
  • 打赏
  • 举报
回复
你好,我们的这个serivce没有由Spring注入的。直接new的。

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧