2012-02-23 29 views
5

Trong nguồn dữ liệu JBoss, làm cách nào tôi có thể cung cấp nhiều chuỗi kết nối cho cơ sở dữ liệu bị lỗi mà tôi muốn.Cơ sở dữ liệu bị lỗi Trong Jboss Nguồn dữ liệu

Sẽ có hai Mysql db có cùng bảng nói DB1 và ​​DB2. Tôi muốn chèn dữ liệu vào DB1, nếu DB1 bị hỏng, thì tôi cần chèn nó vào DB2. Trong khi chèn vào DB2 nếu DB1 xuất hiện, tôi cần chèn phần còn lại của dữ liệu vào DB1. Làm thế nào tôi có thể cấu hình này trong JBoss của tôi?

+1

bạn có thể muốn thiết lập một cụm MySQL thích hợp: http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-replication-failover. html – home

Trả lời

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> 

này sẽ làm việc cho lập bản đồ JBoss

+0

Nếu bạn sử dụng false thì kết nối chuyển đổi dự phòng (DB2) sẽ là chỉ đọc và bạn sẽ gặp lỗi như sau: ### Nguyên nhân : java.sql.SQLException: Kết nối chỉ đọc. Các truy vấn dẫn đến sửa đổi dữ liệu không được phép ; SQL []; Kết nối chỉ đọc. Các truy vấn dẫn đến sửa đổi dữ liệu không được phép; ngoại lệ lồng nhau là java.sql.SQLException: Kết nối là chỉ đọc. Các truy vấn dẫn đến sửa đổi dữ liệu không được phép tại ... –

2

Làm theo tài liệu này. Jboss có cài đặt cấu hình. https://community.jboss.org/wiki/JBossJCADatabaseFailover

Ngoài ra, nếu bạn KHÔNG sử dụng JNDI và gọi JDBC thuần túy Tôi có giải pháp khác - Giả sử bạn đang thực hiện cuộc gọi jdbc thì bạn sẽ cần kết nối DB, nếu DB xuống thì bạn sẽ nhận được cơ sở dữ liệu kết nối ngoại lệ, trong khối try catch, nếu bạn gặp phải kết nối ngoại lệ, tạo ra một kết nối trong khối catch bản thân cho cơ sở dữ liệu thứ hai :-)

Các vấn đề liên quan