我在本地系统的3306端口上运行了一个mysql。并且还有另一个mysql在13000上运行。而我试图连接到13000实例仍然连接到3306实例。 c3p0数据源采用默认端口,它只是忽略端口。有人可以帮忙吗???
Spring bean:
<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。
答案 0 :(得分:1)
c3p0不会解析JDBC网址或对其中的内容做任何假设。它只是询问您的JDBC驱动程序(通过DriverManager,或通过直接实例化的驱动程序,如果您配置forceUseNamedDriverClass)返回提供的URL的连接。问题绝对不是c3p0忽略了非默认端口。 c3p0忽略了这一切。它不知道也不关心。
我会尝试验证您认为正在配置的JDBC URL是否正在实际进入您正在创建的池中。如果您的计算机上有多个MySQL实例,那么您可能在某处有冲突的配置。 c3p0在池启动时将其配置转储到INFO级别的应用程序日志。查找,并验证您的c3p0 DataSource使用的URL是您要配置的URL。
否则,请尝试检查对DriverManager.getConnection( myJdbcUrl )
的调用是否会将您带到所需的DBMS。这基本上就是呼唤。 (它实际上是在调用DriverManager.getConnection( myJdbcUrl, info )
,其中info
是一个属性对象。除非您将forceUseNamedDriverClass
设置为true
。)
答案 1 :(得分:0)
终于找到了问题。原因是我正在使用mysql-connector-java.5.1.9.jar
,因此该连接器中存在错误。所以我把它改成了最新版本然后我的问题得到了解决。
感谢。