Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Openshift Tomcat 7墨盒的Postgres连接被拒绝_Java_Postgresql_Openshift - Fatal编程技术网

Java Openshift Tomcat 7墨盒的Postgres连接被拒绝

Java Openshift Tomcat 7墨盒的Postgres连接被拒绝,java,postgresql,openshift,Java,Postgresql,Openshift,我试图在Openshift Tomcat 7(JBoss EWS 2.0)盒式磁带上部署一个应用程序,但我得到了: org.postgresql.util.PSQLException: Connection refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections. 以下是我的数据源配置: public class Openshift

我试图在Openshift Tomcat 7(JBoss EWS 2.0)盒式磁带上部署一个应用程序,但我得到了:

org.postgresql.util.PSQLException: Connection refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
以下是我的数据源配置:

public class OpenshiftDataConfig {
    @Inject private Environment environment;
    @Bean
    public DataSource dataSource() {
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setDataSourceClassName("org.postgresql.ds.PGSimpleDataSource");
        dataSource.setJdbcUrl(String.format("jdbc:%s/%s",
                environment.getProperty("OPENSHIFT_POSTGRESQL_DB_URL"), 
                "dev"));
        dataSource.setUsername(environment.getProperty("OPENSHIFT_POSTGRESQL_DB_USERNAME"));
        dataSource.setPassword(environment.getProperty("OPENSHIFT_POSTGRESQL_DB_PASSWORD"));
        return dataSource;
    }
}
我在测试过程中记录JDBC URL,并尝试嵌入用户名/密码:

jdbc:postgresql://<value of OPENSHIFT_POSTGRESQL_DB_USERNAME>:<value of OPENSHIFT_POSTGRESQL_DB_PASSWORD>@<value of OPENSHIFT_POSTGRESQL_DB_HOST>:<value of OPENSHIFT_POSTGRESQL_DB_PORT>/dev
我可以看到我的数据在那里。我还验证了管理员用户是一个登录角色。pg_hba.conf文件应允许连接:

# Allow all users to connect over the network with valid credentials
host    all         all           0.0.0.0/0             md5
host    all         all           ::/0                  md5

这似乎是Openshift在两个盒带之间的防火墙配置的问题,因此我也联系了他们的官方支持。

大部分答案都在Openshift中:向Java盒带提供了数据源,如Tomcat 7(JBoss EWS 2.0)。本文中没有指定它,但它似乎已经使用Apache DBCP进行了池化,因此安装非常简单:

@Bean
public DataSource dataSource() throws NamingException {
    DataSource datasource = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/PostgreSQLDS");
    return datasource;
}

通过确保托管数据库的应用程序是可伸缩的,我解决了这个问题

阅读OpenShift文档时很容易忽略这一点:

该网站还帮助我发现并解决了以下问题:

可扩展应用程序需要至少2个档位,并且在创建应用程序时,需要使用
rhc app create
命令中的
-s
选项指定可扩展


使用create命令时,可以使用
--from app
参数克隆现有的不可扩展应用程序:

是否已检查连接到正确的端口?您是否已检查数据库服务是否正在运行?您是否检查了数据库是否配置为允许从除
localhost
之外的其他地址进行连接,以及是否允许用户进行远程或本地连接?我正在使用Openshift环境提供的主机和端口,并且我在登录会话中使用psql测试了与这些值的连接。pg_hba.conf还允许任何人使用有效凭据进行访问。可能是Tomcat和Postgres gears之间的防火墙问题?我想这是可能的。无论在哪里建立连接。。。
# Allow all users to connect over the network with valid credentials
host    all         all           0.0.0.0/0             md5
host    all         all           ::/0                  md5
@Bean
public DataSource dataSource() throws NamingException {
    DataSource datasource = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/PostgreSQLDS");
    return datasource;
}