2012-02-23 14 views
5

Nell'origine dati JBoss, come posso fornire più stringhe di connessione per il failover del database in cui desidero.Failover database in Jboss Sorgenti dati

Ci saranno due db Mysql con le stesse tabelle che dicono DB1 e DB2. Voglio inserire i dati su DB1, se DB1 non funziona, quindi devo inserirlo in DB2. Durante l'inserimento in DB2 se il DB1 si presenta, devo inserire il resto dei dati in DB1. Come posso configurarlo nel mio JBoss?

+1

si consiglia di impostazione un vero cluster MySQL: http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-replication-failover. html – home

risposta

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> 

questo lavoro per la mappatura JBoss

+0

Se si omette false, la connessione di failover (DB2) sarà di sola lettura e si otterrà un errore come questo: ### Causa : java.sql.SQLException: Connection è di sola lettura. Le query che portano alla modifica dei dati non sono consentite ; SQL []; La connessione è di sola lettura. Le query che portano alla modifica dei dati non sono consentite; l'eccezione nidificata è java.sql.SQLException: Connection è di sola lettura. Le query che portano alla modifica dei dati non sono consentite in ... –

2

Seguire questa documentazione. Jboss ha impostazioni di configurazione. https://community.jboss.org/wiki/JBossJCADatabaseFailover

Inoltre, se non si utilizza JNDI e call JDBC pianura I hav un'altra soluzione - Say si sta effettuando una chiamata JDBC allora si avrà bisogno di ottenere una connessione DB, se il DB è giù, allora si otterrà Database fa eccezione il collegamento, nel blocco try catch, se si incontrano eccezione di connessione, creare una connessione in blocco catch se stesso per il secondo database :-)