我们的项目中有Spring-boot/Hibernate/PostgreSQL应用程序,并使用Hikari作为连接池.我们继续遇到以下问题:几个小时后,活动连接数量增长到极限,我们得到这样的错误(完整堆栈跟踪在问题的最后):
Caused by: java.sql.SQLTransientConnectionException: HikariPool-0 - Connection is not available, request timed out after 30000ms.
at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:213) ~[HikariCP-2.4.1.jar:na]
at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:163) ~[HikariCP-2.4.1.jar:na]
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:85) ~[HikariCP-2.4.1.jar:na]
at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:139) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:380) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:228) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
... 126 common frames omitted
Run Code Online (Sandbox Code Playgroud)
这是版本信息:
Spring-boot version: 1.2.3.RELEASE
HikariCP version: 2.4.1
Hibernate version: 4.3.6.Final
Postgresql jdbc: 9.3-1102-jdbc41
Server version: Apache Tomcat/8.0.23
JVM Version: 1.8.0_45-b14
Run Code Online (Sandbox Code Playgroud)
JPA/Hibernate配置:
jpa:
database-platform: org.hibernate.dialect.PostgreSQL82Dialect
database: POSTGRESQL
openInView: false
show_sql: false
generate-ddl: false
hibernate:
ddl-auto: none
naming-strategy: org.hibernate.cfg.EJB3NamingStrategy
properties:
hibernate.cache.use_second_level_cache: true
hibernate.cache.use_query_cache: false …Run Code Online (Sandbox Code Playgroud) 我想知道是否有可能从某个表中获取最大列值并将其设置为没有纯sql的起始序列值.以下代码不起作用:
<property name="maxId" value="(select max(id)+1 from some_table)" dbms="h2,mysql,postgres"/>
<changeSet author="author (generated)" id="1447943899053-1">
<createSequence sequenceName="id_seq" startValue="${maxId}" incrementBy="1"/>
</changeSet>
Run Code Online (Sandbox Code Playgroud)
出了错误:
Caused by: liquibase.parser.core.ParsedNodeException: java.lang.NumberFormatException: For input string: "${m"
Run Code Online (Sandbox Code Playgroud)
我试过没有括号select ...等等,结果相同.那么使用计算值作为起始序列值是不可能的?
我有一个全默认(Lombok 除外)Spring Boot 2.5.6 + PostgreSQL 项目,在 Intellij IDEA 2021.2.3 中打开了一个非常基本的 JPA 映射。JPA 配置是通过注释实现的(无 XML)。该应用程序本身工作正常,记录可以从数据库中保存和检索。在“持久性”窗口中,我可以正确地看到我的 JPA 结构,数据源已分配。这是实体代码:
@Entity
@Data
...
public class Cover {
...
private String ageRestriction;
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用例如执行查询时,select c from Cover c我收到错误:
jpa-ql> select c from Cover c
[2021-11-01 16:14:03] [42703] ERROR: column cover0_.agerestriction does not exist
[2021-11-01 16:14:03] Hint: Perhaps you meant to reference the column "cover0_.age_restriction".
Run Code Online (Sandbox Code Playgroud)
我尝试将命名策略配置添加到我的设置中,但这没有效果:
spring:
jpa:
hibernate:
naming:
physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
Run Code Online (Sandbox Code Playgroud)
我在持久性单元上下文菜单中也没有看到“分配命名策略”(参见屏幕截图)。有没有办法强制 JPA 控制台使用与我的应用程序相同的命名策略?

PS:@Column在指定所有多字字段名称并添加 @Table 注释schema …