2017-02-21 2 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 연결 문자열을 구문 분석 할 수 없기 때문에 응용 프로그램을 시작하는 중입니다. false,address=(type=master)(protocol=tcp)(host=localhost)(port=3306)(user=test)(password=test)/dbname2?failOverReadOnly=false 대신 단순히 false-failOverReadOnly이으로한다 - 내가 생각

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. 포워드 거의 직선이다.

형식 -

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

당신이 하나 개의 주소 뒤에 속성을 썼다 결국 모든 address 먼저 모든 속성을 목록으로 지정된다.

전체적으로 귀하의 URL이 문서에 언급 된 형식이 아닙니다.

희망이 있습니다!

+0

어떻게 address1을 참조하는 propertyName1을 가지고 있지만 address2를 참조하는 propertyName2를 가질 수 있습니까? –

+1

아마도이 속성에 대한 오해가있는 것 같습니다. 이들은 특정 속성을 다루지 않지만 전반적인 구성 속성 즉 failover가 작동하는 방식입니다. –

0

오래된 스레드이며 해결책이 있는지 잘 모르겠습니다.

그러나 나는 비슷한 상황과 JDBC URL에왔다 아래에 귀하의 응용 프로그램이 하나의 dB로 연결됩니다 시간의 어느 시점에서이 상황에서 나를 위해 마법처럼

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

근무 IP1로 설정하고이 db가 다운되면 두 번째 DB 즉 IP2로 전환하고 failOverReadOnly을 false로 표시 했으므로 두 번째 DB는 읽기/쓰기 모드에서 모두 활성화됩니다.

참조 -

8.1 Configuring Server Failover

+0

은 항상 질문/답변에 코드 서식을 지정합니다. 또한 답을 뒷받침 할 수있는 공식 문서 참조 (가능하면)를 입력하십시오 – Ravi

+0

감사합니다. 앞으로도 똑같이 기억할 것입니다. :) –