Java 这两种JDBC连接之间有性能差异吗?
我在jdbc连接中使用了MySqlDataSourceJava 这两种JDBC连接之间有性能差异吗?,java,mysql,jdbc,Java,Mysql,Jdbc,我在jdbc连接中使用了MySqlDataSource MysqlDataSource d = new MysqlDataSource(); d.setUser("user"); d.setPassword("pass"); d.setServerName("hostname.com"); d.setDatabaseName("db"); Connection c = d.getConnection(); 我还搜索了一个选项 这两者在性能上有什么不同吗?哪一个最好使用?它们都使用同一个驱动程序
MysqlDataSource d = new MysqlDataSource();
d.setUser("user");
d.setPassword("pass");
d.setServerName("hostname.com");
d.setDatabaseName("db");
Connection c = d.getConnection();
我还搜索了一个选项
这两者在性能上有什么不同吗?哪一个最好使用?它们都使用同一个驱动程序,我认为这里的性能差别不大,我想如果您只需要在那个地方访问数据库,而最终用户不应该使用自己的身份验证,您可以直接从java使用它,但是,如果您需要在不同的位置上进行连接,那么使用apache配置将非常有帮助,特别是如果数据库服务器、用户名或其他不需要在代码中更改的内容发生更改,如果最终用户必须设置自己的配置,这可能非常重要。他们都使用相同的内部驱动程序,我认为这里的性能差别不大,我想如果您只需要在那个地方访问数据库,而最终用户不应该使用自己的身份验证,您可以直接从java使用它,但是,如果您需要在不同的位置上进行连接,那么使用apache配置将非常有帮助,特别是如果数据库服务器、用户名或其他不需要在代码中更改的内容发生更改,如果最终用户必须设置自己的配置,这可能非常重要。在tomcat中配置数据源将帮助您在运行相同tomcat的应用程序之间共享相同的数据源。该数据源将由容器(在您的例子中是tomcat)管理 而在代码中创建的数据源将由您的应用程序创建,并且只能由该应用程序使用 因此,如果您有多个应用程序在tomcat上运行并访问相同的数据源,那么在tomcat中配置Datasource将是一个很好的方法,并且具有性能因素,因为只创建了一个数据源,并且每个应用程序没有单独的连接
但是,如果您只有一个应用程序,您使用的第一种方法是好的在tomcat中配置数据源将帮助您在同一tomcat中运行的应用程序之间共享相同的数据源。该数据源将由容器(在您的例子中是tomcat)管理 而在代码中创建的数据源将由您的应用程序创建,并且只能由该应用程序使用 因此,如果您有多个应用程序在tomcat上运行并访问相同的数据源,那么在tomcat中配置Datasource将是一个很好的方法,并且具有性能因素,因为只创建了一个数据源,并且每个应用程序没有单独的连接
但是,如果您只有一个应用程序,您使用的第一种方法是好的,那么配置
连接池
的改进(正如tomcat提供的那样)主要是您实际创建和关闭的连接要少得多
使用池时,当您向池请求连接时,它将查看是否已创建任何连接并可供重用,如果有,它将为您提供连接(而不是创建新的连接,这是一项繁重的操作)。您仍然必须close()
Tomcat提供的连接
,以便Tomcat知道现在可以在再次请求时重用它
此外,池的优点是,您的代码不需要知道连接的配置数据。他只需要从给定的池中请求一个连接,系统管理员对其进行配置,允许更大的灵活性(系统管理员不需要知道如何配置您的应用程序,只需要知道如何配置更标准的Tomcat即可)。配置连接池的改进(正如tomcat提供的)主要是,实际上创建和关闭的连接要少得多
使用池时,当您向池请求连接时,它将查看是否已创建任何连接并可供重用,如果有,它将为您提供连接(而不是创建新的连接,这是一项繁重的操作)。您仍然必须关闭()
Tomcat提供的连接
,这样Tomcat知道,当再次请求时,它现在可以重用
此外,池的优点是,您的代码不需要知道连接的配置数据
。他只需要从给定池请求连接
,系统管理员对其进行配置,从而实现更大的灵活性(系统管理员不需要知道如何配置您的应用程序,只需要知道如何配置更标准的Tomcat).但是如果您只有一个应用程序,那么您使用的第一种方法是好的
您忘记了连接池。是的@SJuan76 u是对的,但是我在这里给出了一个通用的语句,因为我们也可以使用代码实现连接池。无论如何,感谢您指出。但是如果您只有一个应用程序您使用的第一种方法是很好的
您忘记了连接池。是的@SJuan76 u是正确的,但我在这里给出了一个通用的语句,因为我们也可以使用代码实现连接池。无论如何,感谢您指出。