适用于JBoss Java EE 6 App的Amazon RDS Master Slave配置

时间:2013-09-23 09:22:14

标签: mysql amazon-ec2 java-ee-6 amazon-rds

我有一个连接到独立MySQL实例的Java EE 6应用程序。目前它使用datasource.xml(部署在app服务器上)和persistence.xml(部署在应用程序.war中)连接到localhost MySQL

我希望将其配置为与以主从模式运行的Amazon RDS Mysql实例进行通信。这意味着我需要将我的应用程序配置为仅写入主服务器并且只能从从服务器读取。

我怎样才能做到这一点?我猜这是一个datasource.xml或persistence.xml编辑?

2 个答案:

答案 0 :(得分:0)

我认为没有办法自动执行此操作。您可以设置两个单独的连接池,然后您必须编写应用程序代码以根据需要使用不同的数据源。

JBoss 6数据源的说明:

https://access.redhat.com/documentation/en-US/JBoss_Enterprise_BRMS_Platform/5/html/BRMS_Administrator_Guide/Configuring_a_Datasource_for_JBoss_Enterprise_Application_Platform_6.html

您可以将RDS设置为多可用区以实现高可用性,然后您可以为只读查询创建一个或多个只读副本。

答案 1 :(得分:0)

您需要将JDBC URL与驱动程序一起使用

com.mysql.jdbc.ReplicationDriver 

这是通过像

这样的网址获取的
jdbc:mysql:replication//master_ip:3306,slave_1_ip:3306

RDS将与JDBC_CONNECTION_STRING系统变量一起使用。

----额外更新------- 来自JBOSS的示例datasource.xml

<datasource jndi-name="java:jboss/datasources/MysqlDS"
    enabled="true" use-java-context="true" pool-name="MysqlDS" use-ccm="true">
    <connection-url>jdbc:mysql://${env.AMAZON_RDS_MYSQL_DB_HOST}:${env.AMAZON_RDS_MYSQL_DB_PORT}/${env.AMAZON_RDS_MYSQL_DB_NAME}?autoReconnect=true&amp;verifyServerCertificate=false&amp;useSSL=true&amp;requireSSL=true
    </connection-url>
    <driver>mysql</driver>
    <security>
        <user-name>${env.AMAZON_RDS_MYSQL_DB_USERNAME}</user-name>
        <password>${env.AMAZON_RDS_MYSQL_DB_PASSWORD}</password>
    </security>
    <validation>
        <check-valid-connection-sql>SELECT 1</check-valid-connection-sql>
        <background-validation>true</background-validation>
    </validation>
    <pool>
        <flush-strategy>IdleConnections</flush-strategy>
        <allow-multiple-users />
    </pool>
</datasource>