2012-02-23 10 views
5

जेबॉस डेटा स्रोत में मैं डेटाबेस के लिए एकाधिक कनेक्शन स्ट्रिंग कैसे दे सकता हूं जिसमें मैं चाहता हूं।जेबॉस डेटा स्रोतों में डेटाबेस विफलता

एक ही टेबल के साथ दो MySQL डीबी होगा डीबी 1 और डीबी 2। मैं डीबी 1 पर डेटा डालना चाहता हूं, अगर डीबी 1 डाउन हो गया है, तो मुझे इसे डीबी 2 में डालने की ज़रूरत है। डीबी 2 में डालने के दौरान यदि डीबी 1 आता है तो मुझे शेष डेटा को डीबी 1 में डालने की आवश्यकता होती है। मैं इसे अपने जेबॉस में कैसे कॉन्फ़िगर कर सकता हूं?

+1

सेट करने के लिए चाहते हो सकता है एक उचित MySQL क्लस्टर: http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-replication-failover। एचटीएमएल – home

उत्तर

2
<?xml version="2.0" encoding="UTF-8"?> 
<!-- $Id$ --> 

<!-- Datasource config for MySQL using 3.0.9 available from: 
    http://www.mysql.com/downloads/api-jdbc-stable.html 
     --> 
    <datasources> 
    <local-tx-datasource> 

     <jndi-name>MySqlDSTest</jndi-name> 
     <use-java-context>true</use-java-context> 
     <connection-url>jdbc:mysql:loadbalance://ip1,ip2:3306/dbname?</connection-url> 
     <url-delimiter>|</url-delimiter> 
     <driver-class>com.mysql.jdbc.Driver</driver-class> 
     <connection-property name="readOnly">false</connection-property> 
     <autoReconnect>true</autoReconnect> 
     <failOverReadOnly>false</failOverReadOnly> 
     <user-name>userName</user-name> 
     <password>password</password> 
     <check-valid-connection-sql>selcect count(*) from TEST_TAB</check-valid-connection-sql> 
     <maxReconnects>0</maxReconnects> 
     <initialTimeout>15</initialTimeout> 
     <idle-timeout-minutes>0</idle-timeout-minutes> 
     <valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLValidConnectionChecker</valid-connection-checker-class-name> 
     <!-- Advanced options for the MySQL Driver can be set with 
       <connection-property name="property">value</connection-property> 
     --> 
     <min-pool-size>5</min-pool-size> 
     <!-- Don't set this any higher than max_connections on your 
      MySQL server, usually this should be a 10 or a few 10's 
      of connections, not hundreds or thousands --> 
     <max-pool-size>20</max-pool-size> 
     <!-- Don't allow connections to hang out idle too long, 
      never longer than what wait_timeout is set to on the 
      server...A few minutes is usually okay here, 
      it depends on your application 
      and how much spikey load it will see --> 

     <!-- If you're using Connector/J 3.1.8 or newer, you can use 
      our implementation of these to increase the robustness 
      "mysql-ds.xml" 64L, 3683C  of the connection pool. --> 
     <exception-sorter-class-name> 
     com.mysql.jdbc.integration.jboss.ExtendedMysqlExceptionSorter 
     </exception-sorter-class-name> 
     <valid-connection-checker-class-name> 
     com.mysql.jdbc.integration.jboss.MysqlValidConnectionChecker 
     </valid-connection-checker-class-name> 
     <!-- sql to call when connection is created --> 
     <new-connection-sql>select 1</new-connection-sql> 
     <!-- sql to call on an existing pooled connection when it is obtained from pool - MySQLValidConnectionChecker is preferred for newer drivers --> 
     <check-valid-connection-sql> 
     select 1 
     </check-valid-connection-sql> 
     <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml --> 
     <metadata> 
     <type-mapping>mySQL</type-mapping> 
     </metadata> 
    </local-tx-datasource> 
    </datasources> 

यह दूसरा डेटाबेस के लिए पकड़ ही ब्लॉक में एक कनेक्शन बनाने jboss मानचित्रण के लिए काम करेंगे

+0

यदि आप <कनेक्शन-संपत्ति नाम = "केवल पढ़ने के लिए"> झूठी> विफलता कनेक्शन (डीबी 2) को केवल पढ़ने के लिए छोड़ देंगे और आपको इस तरह की एक त्रुटि मिलेगी: ### कारण : java.sql.SQLException: कनेक्शन केवल पढ़ने के लिए है। डेटा संशोधन की ओर जाने वाली क्वेरीज़ को की अनुमति नहीं है; एसक्यूएल []; कनेक्शन केवल पढ़ने के लिए है। डेटा संशोधन की ओर जाने वाली क्वेरीज़ की अनुमति नहीं है; नेस्टेड अपवाद java.sql.SQLException है: कनेक्शन केवल पढ़ने के लिए है। डेटा संशोधन की ओर जाने वाली क्वेरीज़ को पर अनुमति नहीं है ... –

2

इस दस्तावेज़ का पालन करें। जेबॉस में कॉन्फ़िगरेशन सेटिंग है। https://community.jboss.org/wiki/JBossJCADatabaseFailover

ही, यदि आप JNDI और सादे JDBC कॉल उपयोग नहीं कर रहे मैं एक और समाधान हवलदार - यदि आप एक JDBC कॉल कर रहे हैं तो आप एक DB कनेक्शन लेने के लिए, अगर डीबी नीचे है, तो आप डेटाबेस मिल जाएगा की आवश्यकता होगी कहो कनेक्शन अपवाद, कोशिश पकड़ ब्लॉक में, यदि आप कनेक्शन अपवाद सामना करते हैं, :-)