如何为一个数据库写2个ip?

时间:2018-02-15 08:38:12

标签: java oracle configuration datasource

我有数据源配置文件,context resource(s) 像这样

<Context>
     <Resource
        name="jdbc/pds"
        auth="Container"
        driverClassName="oracle.jdbc.driver.OracleDriver"
        factory="myPackage.EncryptedDataSourceFactory"
        logAbandoned="true"
        maxTotal="30"
        maxIdle="10"
        maxWaitMillis="1000"
        password="encryptedPassword"
        removeAbandoned="true"
        removeAbandonedTimeout="60"
        type="javax.sql.DataSource"
        url="jdbc:oracle:thin:@myFirstIP:port:MYDB"
        username="username"
        accessToUnderlyingConnectionAllowed="true"
    validationQuery="select 1 from dual" />
</Context>

我的目标是使用ip myFirstIP从base获取数据,但是如果由于某种原因无法执行validationQuery,例如base被禁用,我想要连接并从base获取数据ip mySecondIP。   我知道我可以创建具有mySecondIP ip的第二个资源并在应用程序端(在JAVA中为我)检查,如果myFirstIP被禁用则创建与mySecondIP的连接。但是,如果我不希望在应用程序端进行额外检查,是否可以使用此配置文件与myFirstIP进行默认连接,如果使用mySecondIP禁用它?是否可以?如果不可能什么是我的问题的最佳解决方案?

我正在使用oracle 11.2.0.2.0java8tomcat 8.5 / wildfly 9

1 个答案:

答案 0 :(得分:1)

使用具有2个或更多地址的TNS关键字值语法

 url="jdbc:oracle:thin:@(DESCRIPTION=(FAILOVER=ON)(LOAD_BALANCE=off)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.10.10.88)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.89)(PORT = 1521)))(CONNECT_DATA=(SERVICE_NAME = D88)(FAILOVER_MODE=(TYPE=select)(METHOD=basic))(SERVER = DEDICATED)))";