2017-02-21 27 views
2

我想在SpringBoot应用程序中使用application.yml中的2个不同架构/数据库名称的jdbc url。使用2个不同的数据库名称的MySQL JDBC URL故障转移

我尝试了以下Reference Link,但不幸的是我无法得到这个工作。

jdbc:mysql://address=(type=master)(protocol=tcp)(host=IP1)(port=3306)(user=root)(password=root)/dbname1?failOverReadOnly=false,address=(type=master)(protocol=tcp)(host=IP2)(port=3306)(user=test)(password=test)/dbname2?failOverReadOnly=false 

jdbc:mysql://address=(type=master)(protocol=tcp)(host=IP1)(port=3306)(user=root)(password=root)(dbname=dbname1)?failOverReadOnly=false,address=(type=master)(protocol=tcp)(host=IP2)(port=3306)(user=test)(password=test)(dbname=dbname2)?failOverReadOnly=false 

我收到的错误是在启动应用程序时,因为MySQL连接器无法解析url连接字符串。

2017-02-21 11:37:40.724] log4j - 3060 ERROR [main] --- o.a.t.j.p.ConnectionPool: Unable to create initial connections of pool. 
java.sql.SQLException: The connection property 'failOverReadOnly' only accepts values of the form: 'true', 'false', 'yes' or 'no'. The value 'false,address=(type=master)(protocol=tcp)(host=localhost)(port=3306)(user=test)(password=test)/dbname2?failOverReadOnly=false' is not in this set. 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:897) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:886) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860) 
+0

是你得到一个错误? –

+0

我在启动服务器时收到错误,连接器分析连接url –

+0

错误消息与您粘贴的代码不匹配。在你的代码中,它表示“user = root”,错误表示“user = test”(以及其他差异)。 –

回答

1

我猜,错误信息是非常直接的正向The connection property 'failOverReadOnly' only accepts values of the form: 'true', 'false', 'yes' or 'no'. The value 'false,address=(type=master)(protocol=tcp)(host=localhost)(port=3306)(user=test)(password=test)/dbname2?failOverReadOnly=false' is not in this set.

你的属性值 - failOverReadOnly被视为 - false,address=(type=master)(protocol=tcp)(host=localhost)(port=3306)(user=test)(password=test)/dbname2?failOverReadOnly=false,而不是简单地false

格式 -

jdbc:mysql://address=(key1=value)[(key2=value)]...[,address=(key3=value)[(key4=value)]...]...[/[database]]» 
[?propertyName1=propertyValue1[&propertyName2=propertyValue2]...] 

被指定列出所有address第一,那么所有的属性到底,而你只是一个地址后,写性能。

总而言之,您的网址不是文档中提到的格式。

希望它有帮助!

+0

如何设置propertyName1引用address1,但propertyName2引用address2? –

+1

我想,这些属性似乎存在一些误解。这些不是地址特定的属性,而是整体配置属性,即您的故障转移如何工作等。 –

0

它的旧线程,我不知道你是否已经为你解决问题。

但我一直在类似的情况,JDBC URL以下工作就像一个魅力对我来说

"jdbc:mysql://IP1:port1,IP2:port2/CommonDbName?failOverReadOnly=false" 

在这种情况下,在任何时间点你的应用程序将被连接到只有一个分贝,这是对IP1,一旦这个数据库关闭,它将切换到第二个数据库,即IP2,并且由于您已将failOverReadOnly标记为false,因此第二个数据库在读取/写入模式下都将处于活动状态。

参考 -

8.1 Configuring Server Failover

+0

总是在您的问题/答案中格式化您的代码。另外,把一些官方文件参考(尽可能)来支持你的回答 – Ravi

+0

谢谢,我将来会记得这一点。 :) –