`
lixjluck
  • 浏览: 104618 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

生产环境数据源c3p0的配置

阅读更多

 前市面上可用的数据源有 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));
    }
}

---以下无内容。

0
0
分享到:
评论

相关推荐

    c3p0数据源连接池的配置

    本文将深入解析如何在Java Web项目中配置与使用C3P0数据源连接池。 ### 一、C3P0简介 C3P0(Concurrent Data Source Pooling for Java)是一款开源的JDBC连接池实现,它提供了对JDBC资源进行统一管理的能力,通过...

    配置c3p0数据源

    **配置c3p0数据源详解** 在Java的Web应用中,数据库连接管理是一个至关重要的环节,有效地管理和控制数据库连接可以提高系统的性能和稳定性。c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范...

    mysql.c3p0配置动态数据源的依赖包

    MySQL.C3p0配置动态数据源是Java开发中常见的数据库连接池管理技术,它结合了MySQL数据库驱动和C3p0连接池库,为应用程序提供高效、稳定的数据库连接管理。在进行这样的配置时,需要引入特定的依赖包,确保项目的...

    C3P0数据源

    配置 C3P0 数据源通常涉及以下几个步骤: 1. **引入依赖**:首先,你需要将 C3P0 的相关 JAR 包添加到项目的类路径中。例如,`c3p0-0.9.1.2.jar` 是核心库,`c3p0-0.9.1.2-jdk1.3.jar` 是针对 JDK 1.3 的版本,而 `...

    c3p0 配置文件 详细 配置

    在 Spring 中,C3P0 配置文件可以通过数据源实现。Spring 中,数据连接是通过数据源获得的。在 Spring 中,你可以通过 JNDI 获取应用服务器的数据源,也可以直接在 Spring 容器中配置数据源。此外,你还可以通过代码...

    C3P0数据源.rar

    下面将详细介绍C3P0数据源以及如何在配置式开发中使用它。 首先,`c3p0-0.9.5.2.jar`是C3P0的核心库,包含了C3P0的数据源实现和其他相关类。这个版本是0.9.5.2,是一个稳定且功能丰富的版本,提供了许多配置选项来...

    c3p0数据源jar包.zip

    3. 初始化数据源:在应用启动时,根据配置信息创建C3P0数据源的实例。 4. 获取和归还连接:在需要操作数据库时,通过数据源的getConnection()方法获取连接;操作完成后,必须调用Connection的close()方法,将连接...

    C3P0用到的jar包和配置文件.zip

    在你的博客文章(链接已提供)中,你应该会详细介绍如何集成C3P0,包括如何在代码中创建数据源,如何加载配置文件,以及如何在实际应用中使用连接池服务。通过这种方式,你可以避免频繁的数据库连接创建和关闭,提高...

    c3p0配置mysql8.0.21的3个jar包

    2. **创建C3P0数据源**:在Java代码或配置文件(如Spring的`application.properties`或`context.xml`)中定义C3P0数据源。 ```java import com.mchange.v2.c3p0.ComboPooledDataSource; public class C3P0...

    C3P0使用,C3P0源码及实例

    除了资源文件配置外,C3P0也可以通过XML配置文件(如`c3p0-config.xml`)进行设置,这种方式更加灵活,可以针对不同的数据源设定不同的配置。例如: ```xml &lt;class-name&gt;...

    配置Spring数据源 c3p0与dbcp

    **C3P0数据源配置** C3P0是一个JDBC连接池实现,支持JDBC3和JDBC2扩展规范。它是Hibernate的一部分,但也可以独立使用。配置C3P0需要添加`c3p0/c3p0-0.9.0.4.jar`到类路径。以下是一个配置Oracle数据源的例子: ``...

    c3p0详细配置

    C3P0 是一个开源的 JDBC 连接池,它实现了数据源和 JNDI 绑定,支持 JMX 监控,提供了比 DBCP 和 Proxool 更优秀的性能和稳定性。C3P0 配置是通过一个 XML 文件(通常命名为 `c3p0-config.xml`)进行的,该文件包含...

    c3p0配置说明

    在XML文件中,你可以定义数据源的JNDI名称,以及C3P0的相关配置属性。 6. **C3P0的使用** 在Java代码中,可以通过以下方式获取C3P0数据源: ```java ComboPooledDataSource cpds = new ComboPooledDataSource();...

    spring c3p0配置详解

    C3P0 是一个开源的 JDBC 连接池,它实现了数据源和 JNDI 绑定,支持 JUnit 和 Jakarta 构架。在 Spring 框架中集成 C3P0,可以有效地管理数据库连接,提高系统的性能和稳定性。下面我们将详细介绍 Spring 配置 C3P0 ...

    spring 配置c3p0

    总结,Spring配置C3P0连接池涉及到添加依赖、在Spring配置文件中定义数据源bean以及配置C3P0的相关参数。通过这种方式,我们可以有效地管理和利用数据库连接,提高系统的稳定性和效率。在实际项目中,还需要根据具体...

    配置Spring数据源c3p0与dbcp.txt

    技术分享:配置Spring数据源c3p0与dbcp

    hibernate数据源配置

    一个hibernate数据源的c3p0配置,希望对你有帮助

    Hibernatec3p0配置数据源jar包

    在使用Hibernate配置c3p0数据源时,我们需要引入`c3p0-jar`包,这个压缩包中的JAR文件包含了c3p0的所有相关类和库。在项目中,我们通常将这个JAR文件添加到类路径(ClassPath)中,以便于程序运行时能够找到并加载c3...

Global site tag (gtag.js) - Google Analytics