Oracle 如何在Grails数据源中使用tnsnames.ora?

Oracle 如何在Grails数据源中使用tnsnames.ora?,oracle,grails,datasource,tnsnames,Oracle,Grails,Datasource,Tnsnames,我正在尝试连接到DataSource.groovy中Grails应用程序的tnsnames.ora中指定的负载平衡虚拟主机,但没有成功-它显然抛出了一个未知主机指定的异常 tnsnames条目如下所示 someServiceName = (DESCRIPTION_LIST = (FAILOVER=ON) (LOAD_BALANCE=ON) (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP

我正在尝试连接到DataSource.groovy中Grails应用程序的tnsnames.ora中指定的负载平衡虚拟主机,但没有成功-它显然抛出了一个未知主机指定的异常

tnsnames条目如下所示

someServiceName =
 (DESCRIPTION_LIST =
   (FAILOVER=ON)
   (LOAD_BALANCE=ON)
   (DESCRIPTION =
     (ADDRESS_LIST =
       (ADDRESS = (PROTOCOL = TCP)(HOST = someServerName1)(PORT = 1521))
     )
     (CONNECT_DATA =
       (SERVICE_NAME = someServiceName1)
     )
   )
   (DESCRIPTION =
     (ADDRESS_LIST =
       (ADDRESS = (PROTOCOL = TCP)(HOST = someServerName2)(PORT = 1521))
     )
     (CONNECT_DATA =
       (SERVICE_NAME = someServiceName2)
     )
   )
 )
我可以通过以通常的方式在DataSource.groovy中设置值来连接到其中一个服务someServiceName1和someServiceName2,但我不知道如何连接到负载平衡的虚拟主机。 我到处寻找在Grails中使用tnsnames.ora的方法,但似乎找不到一种特别好的方法来实现这一点。任何指点都将不胜感激


另外,我更喜欢这样一种解决方案,即我仍然能够将数据源注入控制器等。

我认为您需要配置具有多个地址的单个服务。然后,您必须将数据源URL字符串设置为类似以下内容,当然不需要换行符:

jdbc:oracle:thin@(DESCRIPTION=
   (LOAD_BALANCE=on)
   (ADDRESS=(PROTOCOL=TCP)(HOST=someServerName1) (PORT=1521))
   (ADDRESS=(PROTOCOL=TCP)(HOST=someServerName2) (PORT=1521))
   (CONNECT_DATA=(SERVICE_NAME=theOnlyServiceName)))
查找和查找参考资料

您可以使用

jdbc:oracle:oci:@someServiceName 

我用这个,注意它是oci,不是薄的。它适合我。

刚刚遇到这个问题,下面是为我解决它的方法:

url='jdbc:oracle:thin:@servername:PORT/servicename'

端口和服务名称之间的正斜杠让我大吃一惊。如果在那里使用冒号,它会将其读取为SID而不是服务名


祝你好运

谢谢你的推荐信。所包含的示例对我不起作用,但引用证明包含我需要设置的特定连接字符串。