今天在Spring的配置文件里面配置C3P0数据源:
先导入c3p0的jar包
<bean id="dataSource" name="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 指定连接数据库的驱动 -->
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<!-- 指定连接数据库的URL -->
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/jeanselam" />
<!-- 指定连接数据库的用户名 -->
<property name="user" value="root" />
<!-- 指定连接数据库的密码 -->
<property name="password" value="root" />
<!-- 指定连接池中保留的最大连接数. Default:15 -->
<property name="maxPoolSize" value="100" />
<!-- 指定连接池中保留的最小连接数 -->
<property name="minPoolSize" value="10" />
<!-- 指定连接池的初始化连接数 取值应在minPoolSize 与 maxPoolSize 之间.Default:3 -->
<property name="initialPoolSize" value="20" />
<!-- 最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。 Default:0 -->
<property name="maxIdleTime" value="600" />
<!-- 当连接池中的连接耗尽的时候c3p0一次同时获取的连接数. Default:3 -->
<property name="acquireIncrement" value="5" />
<!-- JDBC的标准,用以控制数据源内加载的PreparedStatements数量。 但由于预缓存的statements属于单个connection而不是整个连接池所以设置这个参数需要考虑到多方面的因数.如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default:0 -->
<property name="maxStatements" value="5" />
<!-- 每60秒检查所有连接池中的空闲连接.Default:0 -->
<property name="idleConnectionTestPeriod" value="60" />
</bean>
<!-- 通用泛型DAO组件 -->
<bean name="abstractDaoImpl" class="com.lin.jllm.dao.impl.AbstractDaoImpl"
abstract="true">
<property name="dataSource" ref="dataSource"></property>
</bean>
运行测试数据库的时候报错:
由于我的OS是linux,所以报错的原因可能是:
原因分析:
Linux于host相关的几个文件如下:
/etc/host.conf
功能:指定主机名查找方法,通常指先查找文件/etc/hosts,找不到时再向DNS服务器请求。
对于大多数用户不用改动此文件内容。
Linux: /etc/host.conf文件内容
order hosts, bind
multi on
/etc/resolv.conf
文件功能:DNS客户机配置文件,设置DNS服务器的IP地址及DNS域名
相关文件:/etc/host.conf
文件格式:
domainname 域名
search 域名
nameserver Primary_DNS_Server_IP_address
nameserver Second_DNS_Server_IP_address
其中domainname和search可同时存在,也可只有一个;nameserver可指定多个
/etc/hosts
#/etc/hosts
#文件格式: IPaddress hostname aliases
#文件功能: 提供主机名到IP地址的对应关系,建议将自己经常使用的主机
# 加入此文件中,也可将没有DNS记录的机器加入到此文件中,
# 这样会方便网络应用
127.0.0.1 localhost localhost.localdomain
解决:编辑/etc/hosts文件,在 127.0.0.1 localhost 后加上控制台里说的所谓的未知的名称和服务"lin-Dell-System-Inspiron-7420"
运行项目,OK
测试,写个action:
package com.lin.jllm.action;
import java.util.List;
import com.lin.jllm.domain.OrderInfo;
import com.lin.jllm.service.intf.IOrderInfoService;
import com.opensymphony.xwork2.ActionSupport;
public class TestAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private IOrderInfoService orderInfoService;
private static volatile int a;
private synchronized static void incr() {
a++;
}
public IOrderInfoService getOrderInfoService() {
return orderInfoService;
}
public void setOrderInfoService(IOrderInfoService orderInfoService) {
this.orderInfoService = orderInfoService;
}
@Override
public String execute() throws Exception
{
/**
* 并发测试
*/
int times = 10000;//设置一万个并发访问
long start = System.currentTimeMillis();
for (int i = 0; i < times; i++) {
new Thread(new Runnable() {
@Override
public void run() {
try {
/**
* 读取记录
*/
List<OrderInfo> orderInfos = orderInfoService.getAll();
for(OrderInfo orderInfo : orderInfos)
{
System.out.println(orderInfo.toString());
}
} catch (Exception e) {
// TODO: handle exception
}
finally
{
incr();//记录访问次数
}
}
}).start();
}
while (true) {
if (a == times) {
System.out.println("并发量"+times+"\t完成时间:"
+ (System.currentTimeMillis() - start)+"ms");
break;
}
Thread.sleep(100);
}
return SUCCESS;
}
}
并发量10000 完成时间:6272ms