我正在使用一个greenplum集群,在那里你可以提交查询只给主。我在application.conf中有主节点ip。但是由于高可用性等原因,主节点的IP切换到不同的机器。
application.conf条目:
database = {
connectionPool = "HikariCP"
dataSourceClass = "org.postgresql.ds.PGSimpleDataSource"
properties = {
serverName = "103.10.11.6"
portNumber = "5432"
databaseName = "test"
currentSchema = "public"
user = "user"
password = "user123"
}
numThreads = 10
}
现在使用以下命令加载:
val db = Database.forConfig("database")
我可以捕获ConnectionException或ping机器并识别当前主机的IP。
但是,我如何在配置中覆盖serverName
变量并在运行时重新加载。
这是一个好的设计吗?
2条答案
按热度按时间k5ifujac1#
您应该将域名而不是IP地址设置为
serverName
。此域记录必须指向主服务器。这种方法将大部分高可用性问题留在网络级别上,而不会将它们泄露到应用程序代码中。k5hmc34c2#
在运行时,您可以使用命令
SELECT pg_reload_conf();
重新加载PostgreSQL配置,而不使用命令行。我发现这个页面有更多的信息:https://www.heatware.net/postgresql/postgresql-reload-config-without-restarting/