阿里开源数据库连接池druid配置使用

本文详细介绍了如何配置和使用阿里开源的数据库连接池Druid,包括下载jar包,添加到项目路径,配置Spring的applicationContext.xml,设置dbconfig.properties和log4j.properties文件,以及三种使用数据源的方式:传统获取Connection,JdbcTemplate和NamedParameterJdbcTemplate。通过这些步骤,可以有效地管理和监控数据库连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 阿里开源数据库连接池druid配置使用

1、下载jar包

  druid-1.1.9.jar

  http://central.maven.org/maven2/com/alibaba/druid/

2、添加jar包至build path
右键lib下的jar包,build path>add to buid path
3、配置applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>

<bean id="dbServiceId" class="service.impl.DbServiceImpl">
	<!--<property name="druidDataSource" ref="dataSource"></property>-->
	<property name="dbDao" ref="dbDaoId"></property>
</bean>

<bean id="dbDaoId" class="dao.impl.DbDaoImpl">
	<!--<property name="jdbcTemplate" ref="jdbcTemplate"></property>-->
	<property name="namedParameterJdbcTemplate" ref="namedParameterJdbcTemplate"></property>
</bean>
<!--
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
	<property name="dataSource" ref="dataSource"></property>	
</bean>
-->
<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
	<constructor-arg ref="dataSource"></constructor-arg>
</bean>

<bean id="dbConfigId" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
	<property name="location">
		<value>classpath:dbconfig.properties</value>
	</property>
</bean>

<bean id="log-filter" class="com.alibaba.druid.filter.logging.Log4jFilter">
	<property name="dataSourceLogEnabled" value="false" />
</bean>

 <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> 
 <property name="url" value="${jdbc_url}" />
 <property name="username" value="${jdbc_user}" />
 <property name="password" value="${jdbc_password}" />
 
 <property name="filters" value="log4j" />

 <property name="maxActive" value="20" />
 <property name="initialSize" value="1" />
 <property name="maxWait" value="60000" />
 <property name="minIdle" value="1" />

 <property name="timeBetweenEvictionRunsMillis" value="60000" />
 <property name="minEvictableIdleTimeMillis" value="300000" />
 
 <property name="validationQuery" value="SELECT 1" />
 <property name="testWhileIdle" value="true" />
 <property name="testOnBorrow" value="false" />
 <property name="testOnReturn" value="false" />

 <property name="poolPreparedStatements" value="true" />
 <property name="maxOpenPreparedStatements" value="20" />

 <property name="asyncInit" value="true" />
 <property name="proxyFilters">
    <list>
        <ref bean="log-filter"/>
    </list>
 </property>
 </bean> 
释义:

dbServiceId中注入druidDataSource使用
namedParameterJdbcTemplatejdbcTemplate为spring对数据库操作的封装,注入dataSource使用
dbConfigId配置dataSource的参数
log-filter配置dataSource日志记录
dataSource使用阿里巴巴开源连接池druid

4、新建dbconfig.properties和log4j.properties
dbconfig.properties配置:
jdbc_url: jdbc:mysql://localhost:3306/XXX
jdbc_user: XXX
jdbc_password:XXX

log4j.properties配置:
log4j.rootLogger=error, A
log4j.appender.A=org.apache.log4j.ConsoleAppender
log4j.appender.A.layout=org.apache.log4j.PatternLayout
log4j.appender.A.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n

5、3种使用dataSource数据源的方式:
引入的jar包:
在这里插入图片描述
(1)传统获取connection方式
package service.impl;
import service.DbService;
import javax.sql.DataSource;
import java.sql.Connection;
import dao.DbDao;
import alarm.AlarmBean;
import com.fasterxml.jackson.databind.ObjectMapper;

public class DbServiceImpl implements DbService{

/*直接获取连接池connection方式*/
  private Connection conn=null;
   private DataSource druidDataSource=null;

private DbDao dbDao;
 
//setter方法注入druidDataSource对象
public void setDruidDataSource(DataSource druidDataSource) {
	this.druidDataSource=druidDataSource;
}
public DataSource getDruidDataSource() {
	return druidDataSource;
}

public void setDbDao(DbDao dbDao) {
	this.dbDao=dbDao;
}
public DbDao getDbDao() {
	return dbDao;
}
public void testDbDao() {
	this.dbDao.selectTest();
}
   /*直接获取连接池connection方式*/
public Connection getConnection() {
	try {
		conn=this.druidDataSource.getConnection();
		return conn;
	} catch(Exception e) {
		e.printStackTrace();
	}
	return conn;
}

}

DbService dbService = (DbService) context.getBean("dbServiceId");
Connection conn=dbService.getConnection();
try {
		Statement st=conn.createStatement();
		ResultSet rs=st.executeQuery("select * from alarm_on");
		while(rs.next()) {
			System.out.println(rs.getInt("id")+" "+rs.getString("status")+" "+rs.getString("level"));
		}
		rs.close();
		st.close();
		conn.close();
	} catch (Exception e) {
		e.printStackTrace();
	}

(2)/jdbcTemplate方式/

private JdbcTemplate jdbcTemplate;
	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
		this.jdbcTemplate=jdbcTemplate;
	}
	public JdbcTemplate getJdbcTemplate() {
		return jdbcTemplate;
	}
	public void selectTest() {
		String sql="select count(*) from alarm_on";
		int count=this.jdbcTemplate.queryForObject(sql, Integer.class);
		System.out.println("总数:"+count);
	}

(3)NamedParameterJdbcTemplate方式

private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
	public void setNamedParameterJdbcTemplate(NamedParameterJdbcTemplate namedParameterJdbcTemplate) {
		this.namedParameterJdbcTemplate=namedParameterJdbcTemplate;
	}
	public NamedParameterJdbcTemplate getNamedParameterJdbcTemplate() {
		return namedParameterJdbcTemplate;
	}
	public int insertAlarmMsg(AlarmBean alarm) {
		String sql="sql";
		SqlParameterSource sqlParameterSource = new BeanPropertySqlParameterSource(alarm);
		int result=this.namedParameterJdbcTemplate.update(sql, sqlParameterSource);
		return result;
	}

此方法需要对应一个实体类AlarmBean
larmBean {

public AlarmBean() {
	super();
	// TODO Auto-generated constructor stub
}
public AlarmBean(String phoneNumber, String cuPublic, String sendMonitor, String status, String happenTime,
		String level, String hostname, String hostip, String messageInfo, String value, String remarks) {
	super();
	this.phoneNumber = phoneNumber;
	this.cuPublic = cuPublic;
	this.sendMonitor = sendMonitor;
	this.status = status;
	this.happenTime = happenTime;
	this.level = level;
	this.hostname = hostname;
	this.hostip = hostip;
	this.messageInfo = messageInfo;
	this.value = value;
	this.remarks = remarks;
}

private String phoneNumber;
private String cuPublic;
private String sendMonitor;

private String status;
private String happenTime;
private String level;
private String hostname;
private String hostip;
private String messageInfo;
private String value;
//private String recoverTime;
//private String recoverValue;
private String remarks;

public String getPhoneNumber() {
	return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
	this.phoneNumber = phoneNumber;
}
...
@Override
public String toString() {
	return "AlarmBean [phoneNumber=" + phoneNumber + ", cuPublic=" + cuPublic + ", sendMonitor="
			+ sendMonitor + ", status=" + status + ", happenTime=" + happenTime + ", level=" + level + ", hostname="
			+ hostname + ", hostip=" + hostip + ", messageInfo=" + messageInfo + ", value=" + value + ", remarks="
			+ remarks + "]";
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值