Spring, application.properties 用于创建 ElephantSQL 表

Posted

技术标签:

【中文标题】Spring, application.properties 用于创建 ElephantSQL 表【英文标题】:Spring, application.properties for creation of ElephantSQL tables 【发布时间】:2017-05-14 10:29:07 【问题描述】:

我尝试进行部署(我使用 pivotal.io)。 在部署之前,我尝试创建我的数据库表。 在 pivotal.io 上,我创建了测试数据库(ElephantSQL)。这个新数据库具有:共享高性能集群 20 MB 数据 4 个并发连接

我使用 Spring,这在应用程序属性中描述了我的数据库。如果我在本地主机上创建数据库,这将有效。`

spring.datasource.url=jdbc:postgresql://stampy.db.elephantsql.com:5432/iyraxwqa
spring.datasource.username=iyraxwqa
spring.datasource.password=*************************
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=create

spring.jpa.database=POSTGRESQL
spring.datasource.platform=postgres
spring.jpa.show-sql=false`

当我运行我的应用程序时,我看到了这个错误:

2017-05-14 12:53:38.810 ERROR 4880 --- [           main] o.a.tomcat.jdbc.pool.ConnectionPool      : Unable to create initial connections of pool.

org.postgresql.util.PSQLException: FATAL: too many connections for role "iyraxwqa"
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2455) ~[postgresql-9.4.1212.jre7.jar:9.4.1212.jre7]
    at org.postgresql.core.v3.QueryExecutorImpl.readStartupMessages(QueryExecutorImpl.java:2586) ~[postgresql-9.4.1212.jre7.jar:9.4.1212.jre7]
    at org.postgresql.core.v3.QueryExecutorImpl.<init>(QueryExecutorImpl.java:113) ~[postgresql-9.4.1212.jre7.jar:9.4.1212.jre7]
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:222) ~[postgresql-9.4.1212.jre7.jar:9.4.1212.jre7]
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:51) ~[postgresql-9.4.1212.jre7.jar:9.4.1212.jre7]
    at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:215) ~[postgresql-9.4.1212.jre7.jar:9.4.1212.jre7]
    at org.postgresql.Driver.makeConnection(Driver.java:404) ~[postgresql-9.4.1212.jre7.jar:9.4.1212.jre7]
    at org.postgresql.Driver.connect(Driver.java:272) ~[postgresql-9.4.1212.jre7.jar:9.4.1212.jre7]
    at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:310) ~[tomcat-jdbc-8.5.6.jar:na]
    at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:203) ~[tomcat-jdbc-8.5.6.jar:na]
    at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:718) [tomcat-jdbc-8.5.6.jar:na]

我包含 hibernate h3p0 并添加此代码:

spring.jpa.properties.hibernate.c3p0.min_size = 1
spring.jpa.properties.hibernate.c3p0.max_size = 2
spring.jpa.properties.hibernate.c3p0.timeout = 300

但我看到了同样的错误。 如果我尝试手动创建一切正常,但我有很多表,半年前我用 spring 和 hibernate 创建了表 我的一张桌子:

@Entity
@Table(name = "INTERIOR", schema = "public")
public class InteriorModel extends AllFinishProductModel 

@Column(name = "PHOTO")
private String photo;
@Column(name = "PHOTO01")
private String photo01;
@Column(name = "PHOTO02")
private String photo02;
@Id
@Column(name = "ID")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@Column
private String name;
@Column(name = "DESCRIPTION")
private String description;
@Column(name = "COLOR")
private String color;
@Column(name = "QUANTITY")
private Double quantity;
@Column(name = "PRICE")
private BigDecimal price;
// getters and setters....

有人知道,我的错在哪里?

【问题讨论】:

查看this答案。 如您所见,我包括h3p0 并且最小连接数=1,最大数= 2 服务器的最大连接数呢?检查出。检查您的Postgresql 服务器是否允许多个连接。 我在上面写过:4个并发连接 您被允许 4 个并发连接,默认池大小为 10... 您的休眠 c3p0 配置不会做任何事情,所以删除这些。此外,当部署到 CF 时,会自动重新配置,因此除了默认(本地)数据源之外,您不需要配置任何内容。 Pivotal CF 应该负责其余的工作。如果不是这种情况,则最大连接限制为 4。 【参考方案1】:

我有同样的问题,我想你正在使用免费计划(小乌龟)。我认为问题是 PosgreSql(elephantsql server) 支持的最大连接数,要知道最大限制连接,您可以在 ElephantSql 浏览器中执行以下 sql 脚本:

select * from pg_roles where rolname='iyraxwqa'

它在 postgresql 中显示您的角色配置,您可以看到“rolconnlimit”列以了解支持的最大连接数

【讨论】:

【参考方案2】:

我不明白为什么,但是当我删除 c3p0 并开始使用 tomcat 时,一切正常。此代码有效:

spring.datasource.tomcat.max-wait=1000
spring.datasource.tomcat.max-active=3
spring.datasource.tomcat.test-on-borrow=true

【讨论】:

以上是关于Spring, application.properties 用于创建 ElephantSQL 表的主要内容,如果未能解决你的问题,请参考以下文章

Spring Bootspring boot多环境配置及配置文件

Spring Data弹性命名查询来自外部文件

Spring Boot 环境特定的配置

如何在 Freemarker 模板中访问 Spring 应用程序属性?

如何在 Freemarker 模板中访问 Spring 应用程序属性?

我想用spring boot和hibernate建表,虽然没有报错,但是建不了表,为啥?