如何在 c3p0 数据源中使用 mysql 自定义端口?

How to use mysql custom port in c3p0 datasource?

我在本地系统的 3306 端口上有一个 mysql 运行。还有另一个 mysql 是 13000 上的 运行。当我尝试连接到 13000 实例时,它仍然连接到 3306 实例。 c3p0 数据源采用默认端口,它只是忽略了该端口。有人可以帮忙吗???

Spring豆子:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
        destroy-method="close">

        <property name="driverClass" value="com.mysql.jdbc.Driver" />
        <property name="jdbcUrl" value="jdbc:mysql://localhost:13000/dbname?autoReconnect=true" />
        <property name="user" value="user" />
        <property name="password" value="pwd" />

        <property name="idleConnectionTestPeriod" value="55" />
        <property name="initialPoolSize" value="10" />
        <property name="maxIdleTime" value="60" />

        <property name="maxPoolSize" value="15" />
        <property name="minPoolSize" value="5" />
    </bean> 

编辑: 即使是简单的 JDBC 程序也连接到 3306。

c3p0 不解析 JDBC url 或对其中的内容做出任何假设。它只是询问您的 JDBC 驱动程序(通过 DriverManager,或者如果您配置 forceUseNamedDriverClass 通过直接实例化的驱动程序)到 return 所提供的 URL 的连接。问题绝对不是 c3p0 忽略了非默认端口。 c3p0 忽略了这一切。它不知道也不在乎。

我会尝试验证您认为正在配置的 JDBC URL 是否实际上正在进入您正在创建的池。如果你的机器上有多个 MySQL 实例,可能你在某处有冲突的配置。 c3p0 在池启动时以 INFO 级别将其配置转储到应用程序的日志中。寻找它,并验证您的 c3p0 数据源正在使用的 URL 是您打算配置的 URL。

否则,请尝试检查对 DriverManager.getConnection( myJdbcUrl ) 的调用是否可以让您访问所需的 DBMS。这基本上就是所谓的。 (它实际上是在调用 DriverManager.getConnection( myJdbcUrl, info ),其中 info 是 Properties 对象。除非您已将 forceUseNamedDriverClass 设置为 true。)

终于找到问题了。原因是我正在使用 mysql-connector-java.5.1.9.jar,所以该连接器中存在错误。所以我将其更改为最新版本,然后我的问题得到解决。

谢谢。