c3p0 Java数据库池,故障转移配置https://docs.genesys.com/documentation/composer/8.1.4/help/connectionPooling
application.properties:(出现错误)
# connection properties for data source
##########################################################################################################
spring.datasource.c3p0.driverClass=oracle.jdbc.driver.OracleDriver
spring.datasource.c3p0.maxConnectionAge=3600
spring.datasource.c3p0.maxIdleTime=600
spring.datasource.c3p0.initialPoolSize=5
spring.datasource.c3p0.maxPoolSize=10
spring.datasource.c3p0.minPoolSize=5
spring.datasource.c3p0.acquireIncrement=1
##########################################################################################################
spring.datasource.url=jdbc:oracle:thin:@primary.com:1521:db1,jdbc:oracle:thin:@secondary.com:1521:db2
spring.datasource.username=user
spring.datasource.password=password
据我所知,故障转移配置依赖于JDBC驱动程序。对于Oracle,您可以使用连接描述符对其进行配置。因此,在您的示例中,可以将其放在tnsnames.ora
中:
CONNECTION_WITH_FAILOVER =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = primary.com)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = secondary.com)(PORT = 1521))
(LOAD_BALANCE = no)
(FAILOVER = yes)
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = db)
(FAILOVER_MODE =
(TYPE = select)
(METHOD = preconnect)
(RETRIES = 180)
(DELAY = 10)
)
)
)
然后在您的配置中:
spring.datasource.url=jdbc:oracle:thin:@CONNECTION_WITH_FAILOVER
当然,您可能没有或不想使用tnsnames.ora
,在这种情况下,可以使用连接描述符作为JDBC连接字符串的一部分:
spring.datasource.url=jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=primary.com)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=secondary.com)(PORT=1521))(LOAD_BALANCE=no)(FAILOVER=yes))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=db)(FAILOVER_MODE=(TYPE=select)(METHOD=preconnect)(RETRIES=180)(DELAY=10))))
有关连接描述符、tnsnames.ora
和为Oracle DB配置故障转移的详细信息,请参阅以下链接:
tnsnames.ora
注意,所有数据库上的服务名称必须相同,因此我将配置中的
db1
和
db2
替换为
db
.
>
我今天更仔细地重读了文档(特别是我在上面链接的PDF),似乎可以在连接字符串中指定辅助服务名称,因此在您的示例中,Tnsnames.ora中的条目应该是:
CONNECTION_WITH_FAILOVER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=primary.com)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=secondary.com)(PORT=1521))(LOAD_BALANCE=no)(FAILOVER=yes))(CONNECT_DATA=(SERVER=definition)(SERVICE_NAME=db1)(FAILOVER_MODE=(TYPE=select)(METHOD
并作为application.properties中的JDBC URL:
spring.datasource.url=jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=primary.com)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=secondary.com)(PORT=1521))(LOAD_BALANCE=no)(FAILOVER=yes))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=db1)(FAILOVER_MODE=(TYPE=select)(METHOD=preconnect)(RETRIES=180)(DELAY=10)(BACKUP = db2))))
>
我目前没有配置这样的设置,所以我把它放在我的tnsnames.ora中:
CONNECTION_WITH_FAILOVER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=google.com)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=my-actural-database)(PORT=my-db-port))(LOAD_BALANCE=no)(FAILOVER=yes))(CONNECT_DATA=(SERVER=disional)(SERVICE_NAME=my-service-name)(FAILOVER_MODE=(TYPE=
模拟主连接失败(因为Google.com上显然没有运行Oracle DB),并设法使用连接URL:jdbc:Oracle:thin:@connection_with_failover
用DataGrip连接到我的数据库
我还直接在JDBC URL中使用连接描述符进行了尝试:
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=google.com)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=my-actual-database)(PORT=my-db-port))(LOAD_BALANCE=no)(FAILOVER=yes))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=my-service-name)(FAILOVER_MODE=(TYPE=select)(METHOD=preconnect)(RETRIES=1)(DELAY=5))))
它同样有效,尽管这两次都需要相当长的时间来建立连接(但这可能与我的网络配置或驱动程序的连接超时值有关)
问题内容: 在JBoss数据源中,如何为我想要的数据库故障转移提供多个连接字符串。 将有两个具有相同表的Mysql db,即DB1和DB2。我想将数据插入DB1,如果DB1关闭,那么我需要将其插入DB2。在插入DB2期间,如果DB1出现了,我需要将其余数据插入DB1中。如何在JBoss中配置它? 问题答案: 这将适用于jboss映射
问题内容: 在简单情况下,如果3台服务器具有1个主服务器和2个从属服务器而没有分片。是否有使用Java和Jedis的经过验证的解决方案,该解决方案没有单点故障,并且将自动处理单个服务器(无论是主服务器还是从服务器)(自动故障转移)。例如,提升主机并在故障后重置,而不会丢失任何数据。 在我看来,这似乎应该是一个已解决的问题,但是我找不到关于它的任何代码,而仅是对实现此方法的高级描述。 谁实际覆盖并在
对于复制,我们设置Server1作为主服务器,设置server2作为次服务器...一切正常。 期望:当server1停机时,次要的server2不会自动变成主要的。它仍然是次要的。server2也有可能自动成为主服务器。 情况2:MongoDB复制是否需要3台强制服务器,以便当server1宕机时,server2将自动成为主要服务器,server3将保持次要服务器。(这很管用)
问题内容: 对于J2EE容器 之外 的Java应用程序,哪个连接池库是最好的? 我听说c3p0已经过时了。 雅加达的公共池库已不再开发 因此,我只剩下BoneCP和DBPool了。从我可以看出,两者活动有限。我可以看到的主要区别是性能,BoneCP似乎可以与之抗衡。但是,文档非常薄弱。 您在现实世界中使用了哪个数据库池库,为什么?好的和坏的是什么? 问题答案: 在工作中,我们使用了BoneCP(作
我们使用MQ作为传递消息的主要路径。这是我们的制度运作不可或缺的一部分。消息代理有时会失败,所有相关的队列也会随之失败。在camel中,有没有一种方法可以启动故障切换,并在其启动时恢复到主故障切换?
我正在尝试用6台机器实现一个Redis集群。我有一个由六台机器组成的流浪集群: 运行redis服务器 我编辑了上述所有服务器的/etc/redis/redis.conf文件,添加了这个 然后我在六台机器中的一台上运行了这个程序; Redis集群已启动并运行。我通过在一台机器上设置值手动检查它显示在其他机器上。 我的问题是,当我关闭或停止任何一台主机上的redis server时,整个集群都会停止运