Openshift Tomcat 7 墨盒拒绝 Postgres 连接
Postgres connection refused from Openshift Tomcat 7 cartridge
我正在尝试在 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,我已经尝试使用 username/password 嵌入:
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
和没有(使用略有不同的代码构建):
jdbc:postgresql://<value of OPENSHIFT_POSTGRESQL_DB_HOST>:<value of OPENSHIFT_POSTGRESQL_DB_PORT>/dev
我在登录应用程序时使用 psql 测试了连接性:
psql -h $OPENSHIFT_POSTGRESQL_DB_HOST -p $OPENSHIFT_POSTGRESQL_DB_PORT -U $OPENSHIFT_POSTGRESQL_DB_USERNAME
而且我可以看到我的数据在那里。我还验证了管理员用户是登录角色。 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 knowledge base 中:数据源提供给 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 文档时很容易忽略这一点:https://blog.openshift.com/sharing-database-across-applications/
这个网站也帮助我确定并解决了这个问题:http://www.hfaber.com/post/135256827109/openshift-sharing-database-across-applications
可扩展的应用程序至少需要 2 个齿轮,并且在创建应用程序时需要指定可扩展的,方法是在 rhc app create
命令中使用 -s
选项。
您可以在使用创建命令时使用 --from-app
参数克隆现有的不可扩展应用程序:https://access.redhat.com/documentation/en-US/OpenShift_Online/2.0/html/User_Guide/Cloning_an_Existing_Application.html
我正在尝试在 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,我已经尝试使用 username/password 嵌入:
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
和没有(使用略有不同的代码构建):
jdbc:postgresql://<value of OPENSHIFT_POSTGRESQL_DB_HOST>:<value of OPENSHIFT_POSTGRESQL_DB_PORT>/dev
我在登录应用程序时使用 psql 测试了连接性:
psql -h $OPENSHIFT_POSTGRESQL_DB_HOST -p $OPENSHIFT_POSTGRESQL_DB_PORT -U $OPENSHIFT_POSTGRESQL_DB_USERNAME
而且我可以看到我的数据在那里。我还验证了管理员用户是登录角色。 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 knowledge base 中:数据源提供给 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 文档时很容易忽略这一点:https://blog.openshift.com/sharing-database-across-applications/
这个网站也帮助我确定并解决了这个问题:http://www.hfaber.com/post/135256827109/openshift-sharing-database-across-applications
可扩展的应用程序至少需要 2 个齿轮,并且在创建应用程序时需要指定可扩展的,方法是在 rhc app create
命令中使用 -s
选项。
您可以在使用创建命令时使用 --from-app
参数克隆现有的不可扩展应用程序:https://access.redhat.com/documentation/en-US/OpenShift_Online/2.0/html/User_Guide/Cloning_an_Existing_Application.html