为来自Java的PostgreSQL JDBC连接设置连接选项

为来自Java的PostgreSQL JDBC连接设置连接选项,java,postgresql,jdbc,datasource,Java,Postgresql,Jdbc,Datasource,我的应用程序之前使用的是Mongo DB。现在,我要转到PostgreSQL。为此,我一直在迁移查询和所有内容。但是,我被这个问题阻碍了。在MongoDB连接中,我们使用了一些MongoClient来提高应用程序的性能。在某种程度上,我还想用JDBC for PostgreSQL设置这些选项 我在JDBC DriverManager类中尝试并搜索了相同的函数。但是没有找到 下面添加了使用的MongoDB连接选项, 如何为PostgreSQL的JDBC客户端设置这些选项 MongoClientOp

我的应用程序之前使用的是Mongo DB。现在,我要转到PostgreSQL。为此,我一直在迁移查询和所有内容。但是,我被这个问题阻碍了。在MongoDB连接中,我们使用了一些MongoClient来提高应用程序的性能。在某种程度上,我还想用JDBC for PostgreSQL设置这些选项

我在JDBC DriverManager类中尝试并搜索了相同的函数。但是没有找到

下面添加了使用的MongoDB连接选项, 如何为PostgreSQL的JDBC客户端设置这些选项

MongoClientOptions.Builder builder = new MongoClientOptions.Builder();
builder.threadsAllowedToBlockForConnectionMultiplier(1000);
builder.maxConnectionIdleTime(60* 1000 * 5);
builder.connectionsPerHost(100000);
MongoClientOptions options = builder.build();
mongoClient = new MongoClient(hostname, options);

在JDBC中,您可以传递带有一些JDBC标准属性(“用户”和“密码”)和特定于驱动程序的属性的
Properties
对象,或者将属性作为JDBC url的一部分传递(带有特定于驱动程序的属性和特定于驱动程序的语法),或者使用
数据源及其getter和setter配置内容

有关PostgreSQL JDBC,请参阅一节


对于几乎所有严重的JDBC使用,您不应该直接使用
DriverManager
,因为它将为每个请求创建一个新的物理连接。取而代之的是使用
javax.sql.DataSource
实现,它提供连接池,或者是由驱动程序提供的(通常不是很好),或者是像HikariCP这样的第三方库,或者是内置在JavaEE应用服务器中的库。

我不知道这些选项在MongoDB中做了什么,但是从它的名称来看,看起来您正在寻找连接池。您的应用程序在哪个环境中运行?网络应用程序?Swing富客户端?还有什么?事实上,这是web应用程序后端代码。然后使用应用程序服务器附带的连接池(例如Tomcat的池),我不明白。你是说我必须使用Tomcat的池来代替JDBC驱动程序?请告诉我这个。我是这个web应用程序的新手,所有池都将使用JDBC驱动程序连接到数据库:谢谢。但有一个问题。我一直在使用
DriverManager.getConnection()
函数。它将返回一个连接对象。在那个连接对象上,我一直在执行查询。它将如何为每个请求使用新的物理连接?@MuhammedThabjeel每次调用
DriverManager.getConnection
,您都将创建一个新的物理连接。如果您不应该同时共享一个连接,则需要为单个请求调用
DriverManager.getConnection
,因此您将为每个请求创建一个新连接(如果您当前没有这样做,您将面临更大的争用条件和其他并发错误问题)。解决方案是使用连接池,因为与其关闭物理连接,不如使用
连接。close()
将其返回到池中以供重用。哦,那就太糟糕了。但我的所有CRUD函数(实际上我使用这个单例连接对象并进行查询)都是同步的。那有帮助吗?您能分享一些连接池的链接吗?@MuhammedThabjeel个人行为可能是安全的(但可能不是),但更大的交互可能仍然会受到竞争条件的影响(猜猜当一个请求回滚,另一个请求提交,而另一个请求正在更新/插入依赖于先前插入的数据的内容时会发生什么情况)。此外,应用程序中只有一个同步瓶颈会使应用程序速度变得不必要的慢。对于链接,Google和DuckDuckGo是您的朋友。正确使用连接池将使事情变得更简单,通常更快。好的。谢谢。如果我使用的是连接池,我不需要同步方法,对吗?