你先建一个这样的properties文件,里面的内容如下(将你的数据库配置信息写到这里面)
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.user=scott
jdbc.password=tiger
然后在数据库配置文件中通过以下方式进行引用,这样你不需要去更改数据库配置文件,只需要改一下properties文件就行了,对于不同的数据库这样处理比较好。
说句实话,C3P0不好用。

解决方案 »

  1.   

    问题一: connection 是指数据库的连接,你连接数据库的时候是不是也有n种方式,以mysql为例
            mysql -uroot -pxxx               #不指定数据库的
            mysql -uroot -pxxx dbname        #指定数据库的
    问题二:改一下获取DataSource的类
        #这里使用的是map,不同用户可以取到不同的datasource
        private static Map<String,ComboPooledDataSource> dsList=new HashMap<String,ComboPooledDataSource>();
        public static DataSource getDataSource(String username) {
            #这里忽略数据安全的问题,可以自己加锁实现dsList的数据安全
            ds = dsList.get(username);
            if (ds == null){
                ds = new ComboPooledDataSource(username);
                dsList.put(username,ds);
            }
            return ds;
        }
    配置文件也有少许改变,注意named-config 的name 和 property的 jdbcUrl<named-config name="user1">
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/user1</property>
            <property name="user">root</property>
            <property name="password"></property>
            <property name="acquireIncrement">5</property>
            <property name="initialPoolSize">10</property>
            <property name="minPoolSize">5</property>
            <property name="maxPoolSize">20</property>
    </named-config><named-config name="user2">
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/user2</property>
            <property name="user">root</property>
            <property name="password"></property>
            <property name="acquireIncrement">5</property>
            <property name="initialPoolSize">10</property>
            <property name="minPoolSize">5</property>
            <property name="maxPoolSize">20</property>
    </named-config>
      

  2.   

    这种其实不难的,多数据源。
    你要去看看ThreadLocal 这个类,线程安全的。
    他的一个set,get都是获取当前的线程
      

  3.   

    具体代码我就不写了,网上可以查查很多,
    你的要明白一点,hibernate是最后开始操作对象(save、update..)的时候才去获取DataSource的