前市面上可用的数据源有
3
个
:c3p0, dbcp, bonecp
。对应一个数据源生产使用,主要注意以下几个点:
1.
性能
2.
自动重连
3.
安全,目前只有jboss app server内置的数据源支持数据库密码的加密。
以下为
c3p0
的配置
1
、
pool size config
,这个主要看你的应用以及数据库配置,来决定
min,max pool size;另外你也可以做一下性能测试,以寻找一个合适的数值
<bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="initialPoolSize"><value>10</value></property>
<property name="minPoolSize"><value>5</value></property>
<property name="maxPoolSize"><value>30</value></property>
<property ame="acquireIncrement"><value>5</value></property>
</bean>
参考:
http://www.mchange.com/projects/c3p0/index.html#basic_pool_configuration
2. statement pool size
(针对
PrepareStatement
)
<bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="maxStatements"><value>30</value></property>
<property name="maxStatementsPerConnection"><value>5</value></property>
</bean>
参考:
http://www.mchange.com/projects/c3p0/index.html#configuring_statement_pooling
3
、自动重连
如果在获取连接时抛出异常,
c3p0
会捕获此异常,进行重试。
此功能一般用于生产环境数据库维护时,切换主、备机引起的问题。
<bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="acquireRetryAttempts"><value>30</value></property>
<property name="acquireRetryDelay"><value>1000</value></property>
<property name="breakAfterAcquireFailur "><value>false</value></property>
</bean>
参考:http://www.mchange.com/projects/c3p0/index.html#configuring_recovery
4、安全性
在生产环境,访问数据库的密码都是经过加密的,你即使看到,也不能拿来用,那如何把这个加密的密码给c3p0用呢?
比如,实际数据的密码是pwd, 但配置文件里指定的却是b7220dfdfdf8;这就需要我们在生产环境模式下,去解码,把b7220dfdfdf8还原为pwd。
<bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<!-- c3p0数据源的一个专有属性,只可以存放密码和用户名,详情可以研究它的源码,开源的吗 -->
<property name="properties">
<bean class="com.common.DatasourcePropertiesFactory" factory-method="getProperties">
<constructor-arg type=" java.lang.String">
<value>${jdbc_password_encrypted}</value>
</constructor-arg>
<!-- 生产环境模式 ,才特殊处理加密密码-->
<constructor-arg type="java.lang.String">
<value>${production}</value>
</constructor-arg>
</bean>
</property>
</bean>
DatasourcePropertiesFactory的源码:
public class DatasourcePropertiesFactory {
private static final String PRODUCTION_MODE = "true";
private static final String PROP_PASSWORD = "password";
private static final String DEFAULT_SECURE_KEY = "secure key";
public static Properties getProperties(String pwd, String production) throws Exception {
Properties p = new Properties();
// production mode
if (PRODUCTION_MODE.equalsIgnoreCase(StringUtil.trim(production))) {
try {
p.setProperty(PROP_PASSWORD, decode(pwd));
} catch (Exception e) {
throw e;
}
}
return p;
}
//以下两个方法参考于jboss的实现
private static String encode(String secret) throws NamingException, NoSuchAlgorithmException, InvalidKeyException,
NoSuchPaddingException, BadPaddingException, IllegalBlockSizeException {
byte[] kbytes = DEFAULT_SECURE_KEY.getBytes();
SecretKeySpec key = new SecretKeySpec(kbytes, "Blowfish");
Cipher cipher;
cipher = Cipher.getInstance("Blowfish");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encoding = cipher.doFinal(secret.getBytes());
BigInteger n = new BigInteger(encoding);
return n.toString(16);
}
private static String decode(String secret) throws NoSuchPaddingException, NoSuchAlgorithmException,
InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
byte[] kbytes = DEFAULT_SECURE_KEY.getBytes();
SecretKeySpec key = new SecretKeySpec(kbytes, "Blowfish");
BigInteger n = new BigInteger(secret, 16);
byte[] encoding = n.toByteArray();
Cipher cipher = Cipher.getInstance("Blowfish");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] decode = cipher.doFinal(encoding);
return new String(decode);
}
public static void main(String[] args) throws NamingException, InvalidKeyException, NoSuchAlgorithmException,
NoSuchPaddingException, BadPaddingException, IllegalBlockSizeException {
String secret = "ca";
System.out.println(encode(secret));
}
}
---以下无内容。
分享到:
相关推荐
java web c3p0数据源连接的配置讲解。
Spring_c3p0与dbcp数据源_的配置.doc 很不错的哦!拿出来和大家一起学习!
配置c3p0数据源
数据源 c3p0 配置 官方 参考 配置 下载
java开发时C3P0数据源的介绍与配置以及使用
mysql.c3p0配置动态数据源的依赖包,必须导入到项目当中。
技术分享:配置Spring数据源c3p0与dbcp
一个hibernate数据源的c3p0配置,希望对你有帮助
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate、Spring等。 适合人群:正在学习使用数据库连接池 里面的配置文件直接可用,少走弯路,...
主要讲解c3p0数据源的三种配置方式 c3p0三种配置方式 c3p0的配置方式分为三种,分别是 1.setters一个个地设置各个配置项 2.类路径下提供一个c3p0.properties文件 3.类路径下提供一个c3p0-config.xml文件
C3P0源码及实例:C3P0资源文件配置、XML文件配置 C3P0源码及实例:C3P0资源文件配置、XML文件配置
c3p0Jar包,Hibernate配置数据源必备,包含xml配置文件
包含2个 JAR包:c3p0-0.9.5.2.jar,mchange-commons-java-0.2.11.jar 学习ssm框架 配置式开发的时候用到的
不管通过何种持久化技术,都必须通过数据连接访问数据库,在Spring中,数据连接是通过数据源获得的。...在Spring中,你不但可以通过JNDI获取应用服务器的数据源,也可以直接在Spring容器中配置数据源
jdbc使用c3p0连接池连接数据库,支持配置多个数据源,有相关的查询测试。
Spring使用DriverManagerDataSource和C3P0分别配置MySql6.0.6数据源
博文链接:https://wxinpeng.iteye.com/blog/203088
c3p0 和DBCP数据源的jar包,以及配置文件,加上mysql的驱动包
技术分享:Spring的数据源配置 DBCP、C3P0、JNDI
在Spring3中配置数据源,包括DBCP,C3P0,Proxool,Bonecp主要的数据源,里面包含这些数据源的jar文件和依赖文件及配置文件。。 如Bonecp目前听说是最快的数据源,速度是传统的c3p0的25倍, bonecp.properties文件: ...