当前位置: 首页 > 知识库问答 >
问题:

Spring boot JDBC HSQLDB:如何验证Spring boot是否使用连接池?

柯树
2023-03-14

根据这个留档:

29.1.1嵌入式数据库支持

Spring Boot可以自动配置嵌入式H2、HSQL和Derby数据库。您不需要提供任何连接URL,只需包含要使用的嵌入式数据库的构建依赖项。

29.1.2与生产数据库的连接

生产数据库连接也可以使用池化DataSource自动配置。

数据源配置由spring中的外部配置属性控制。数据源*。例如,您可以在应用程序中声明以下部分。特性:

spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass
spring.datasource.driver-class-name=com.mysql.jdbc.Driver 

[提示]您通常不需要指定驱动程序类名,因为Spring Boot可以从url中推断出大多数数据库的驱动程序类名。

[注意]对于要创建的池数据源,我们需要能够验证是否有有效的驱动程序类可用,因此在执行任何操作之前,我们都要检查该类是否可用。也就是说,如果你设置了Spring。数据源。驱动程序类名=com.mysql。jdbc。然后该类必须是可加载的。


如果我在我的应用程序中放置以下内容呢。属性文件

spring.datasource.url=jdbc:hsqldb:file:db/organization-db
spring.datasource.username=dbuser
spring.datasource.password=dbpass
spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver

Spring Boot会自动配置池化数据源吗,因为我指定了spring.datasource.driver类名称?
或者它只是为嵌入式数据库驱动程序创建数据源而没有连池?
如何确认Spring Boot是否使用连池?

共有2个答案

柴茂材
2023-03-14

我的理解是,只要类路径上有受支持的数据源类,Spring引导就会使用它,如果没有指定,tomcat是首选项。

支持的数据源列表在DataSourceBuilder中给出,目前是tomcat、hikari、dbcp和dbcp2。

您可以通过查找javax来验证是否创建了一个。sql。数据源来自应用程序上下文的实现,尽管我不明白为什么不能。

https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceBuilder.java

邴姚石
2023-03-14

谢谢你的回答,戴夫。我刚刚开始学习Spring框架,所以我正在修补它。这就是我在应用程序中所做的。确认Spring Boot是否使用连接池的主要方法:

ApplicationContext context = SpringApplication.run(MyApplication.class);
DataSource dataSource = context.getBean(javax.sql.DataSource.class);
System.out.println("DATASOURCE = " + dataSource);

我得到了以下输出:

DATASOURCE = org.apache.tomcat.jdbc.pool.DataSource@a5b0b86{ConnectionPool[defaultAutoCommit=null; defaultReadOnly=null; defaultTransactionIsolation=-1; defaultCatalog=null; driverClassName=org.hsqldb.jdbcDriver; maxActive=100; maxIdle=100; minIdle=10; initialSize=10; maxWait=30000; testOnBorrow=false; testOnReturn=false; timeBetweenEvictionRunsMillis=5000; numTestsPerEvictionRun=0; minEvictableIdleTimeMillis=60000; testWhileIdle=false; testOnConnect=false; password=********; url=jdbc:hsqldb:mem:testdb; username=sa; validationQuery=null; validationQueryTimeout=-1; validatorClassName=null; validationInterval=30000; accessToUnderlyingConnectionAllowed=true; removeAbandoned=false; removeAbandonedTimeout=60; logAbandoned=false; connectionProperties=null; initSQL=null; jdbcInterceptors=null; jmxEnabled=true; fairQueue=true; useEquals=true; abandonWhenPercentageFull=0; maxAge=0; useLock=false; dataSource=null; dataSourceJNDI=null; suspectTimeout=0; alternateUsernameAllowed=false; commitOnReturn=false; rollbackOnReturn=false; useDisposableConnectionFacade=true; logValidationErrors=false; propagateInterruptState=false; ignoreExceptionOnPreLoad=false; }

我还尝试了应用程序的不同配置。属性文件和我的构建。升级文件以确认SpringBoot在自动配置数据源时是否仍将使用连接池,我发现SpringBoot的自动配置总是创建一个池数据源。

 类似资料:
  • 我正在做jndi查找JBOSS AS. Code中配置的数据源,如下所示。 initialContext=新的initialContext(道具); dataSource=(dataSource)initialContext。查找(bundle.getString(“jndiName”); ource.get连接; 这段代码放在servlet的doPost中。我也很安全地打电话给你 联系关闭()

  • 我正在尝试使用连接到。我正在使用和。 我在Gradle中添加了这些依赖项 配置文件如下所示: 应用yml 我得到了以下错误:

  • 问题内容: 如何验证socket.io连接?我的应用程序使用来自另一台服务器(python)的登录端点来获取令牌,每当用户在节点侧打开套接字连接时如何使用该令牌? 和客户端: 如果令牌是在python中创建的: 如何使用此令牌对节点中的套接字连接进行身份验证? 问题答案: 令牌是否在另一台服务器上创建都没有关系。如果您拥有正确的密钥和算法,您仍然可以验证它。 用模块实施 客户 服务器 用模块实施

  • 前几天我经历了应用程序的中断,我需要了解以后如何避免这种情况。 我们有一个运行在Tomcat7上的基于Java的web应用程序。应用程序连接到几个不同的数据源,包括Oracle数据库。 下面是我对连接验证的理解。 连接在空闲时(testWhileIdle=false)、借用时(testOnBorrow=false)、返回时(testOnReturn=false) 由于timeBetweenEvic

  • 我从Google Play Store下载了一些Android APK文件(有1个、有2个和手动),但没有得到关于proguard用法的确切提示。 有没有办法知道哪个Android APK文件在反向工程代码中使用了proguard? 在APK文件的一些代码中,类名类似于a、b、c、d,它们的包名也是相同的。反编译后的代码结构非常复杂,不易理解。 一些APK文件具有易于格式化的代码。它们的反编译代码

  • 我试图创建一个简单的SpringBoot应用程序来连接和存储数据库中的一些数据,但是当我的代码试图提交一个新对象时,仍然会遇到401禁止消息。 我应该如何使用SpringBoot连接到ArangoDb,以便能够在数据库中保存节点? 我的系统上运行了ArangoDb,我可以在localhost登录到web控制台:http://localhost:8529 我有一个与下面的属性同名的数据库。我还尝试在