将spring应用程序部署到cloudfoundry。cloud foundry提供postgres服务,尝试使用java cfenv library application.properties进行jdbc连接:
database.url = #{cfJdbcEnv.findJdbcService().getJdbcUrl()}
database.username = #{ cfJdbcEnv.findJdbcService().getUsername() }
database.password = #{ cfJdbcEnv.findJdbcService().getPassword() }
database.driverClassName = #{cfJdbcEnv.findJdbcService().getDriverClassName()}
应用程序上下文.xml
<bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
<property name="ignoreUnresolvablePlaceholders" value="true" />
<property name="localOverride" value="false" />
<property name="locations">
<list>
<value>classpath:application.properties</value>
<value>classpath:application-${spring.profiles.active}.properties</value>
</list>
</property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${database.driverClassName}" />
<property name="url" value="${database.url}" />
<property name="username" value="${database.username}" />
<property name="password" value="${database.password}" />
</bean>
pom.xml文件
<dependency>
<groupId>io.pivotal.cfenv</groupId>
<artifactId>java-cfenv-boot</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.9</version>
</dependency>
获取错误:
Caused by: java.sql.SQLException: No suitable driver found for postgres://postgres:7cpdezVdlt@apa-svc-xxxxxxxxxxxxx.apps.apa.comcast.net:5432/postgres
2021-03-03T17:35:15.01-0500 [APP/PROC/WEB/0] OUT at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:153) ~[spring-jdbc-4.0.3.RELEASE.jar:4.0.3.RELEASE]
2021-03-03T17:35:15.01-0500 [APP/PROC/WEB/0] OUT at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriver(DriverManagerDataSource.java:144) ~[spring-jdbc-4.0.3.RELEASE.jar:4.0.3.RELEASE]
2021-03-03T17:35:15.01-0500 [APP/PROC/WEB/0] OUT at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:120) ~[spring-jdbc-4.0.3.RELEASE.jar:4.0.3.RELEASE]
2021-03-03T17:35:15.01-0500 [APP/PROC/WEB/0] OUT at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:380) ~[hibernate-core-4.3.5.Final.jar:4.3.5.Final]
2021-03-03T17:35:15.01-0500 [APP/PROC/WEB/0] OUT at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:228) ~[hibernate-core-4.3.5.Final.jar:4.3.5.Final]
2021-03-03T17:35:15.01-0500 [APP/PROC/WEB/0] OUT at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:171) ~[hibernate-core-4.3.5.Final.jar:4.3.5.Final]
2021-03-03T17:35:15.01-0500 [APP/PROC/WEB/0] OUT at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:67) ~[hibernate-core-4.3.5.Final.jar:4.3.5.Final]
2021-03-03T17:35:15.01-0500 [APP/PROC/WEB/0] OUT at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1435) ~[hibernate-core-4.3.5.Final.jar:4.3.5.Final]
2021-03-03T17:35:16.00-0500 [APP/PROC/WEB/0] OUT [CONTAINER] org.hibernate.engine.jdbc.spi.SqlExceptionHelper ERROR No suitable driver found for postgres://postgres:7cpdezVdlt@apa-svc-cd1365a3-c6d0-436b-811d-23fc0ec66f0c.apps.apa.comcast.net:5432/postgres
2021-03-03T17:35:16.00-0500 [APP/PROC/WEB/0] OUT [CONTAINER] org.hibernate.engine.jdbc.spi.SqlExceptionHelper WARN SQL Error: 0, SQLState: 08001
正在使用以下代码示例化数据源对象:
@Bean(name="dataSource")
public DataSource getDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(driverClassName);
String url =
cfEnv.findCredentialsByName("portal-db").getHost();
String username = cfEnv.findCredentialsByName("portal-db").getUsername(); String
password = cfEnv.findCredentialsByName("portal-db").getPassword();
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl("jdbc:postgresql://"+url+":5432/postgres");
dataSource.setUsername(username);
dataSource.setPassword(password);
}
我不知道为什么从application.properties文件中读取database.url时,会出现与错误url相关的错误:postgres://postgres:x:5432/postgres
1条答案
按热度按时间vxqlmq5t1#
从错误消息中,它似乎得到了信息。它只是不识别您的服务代理提供的jdbc url。
我建议如下:
跑
cf env
(或者以其他方式查看env变量[1]),然后查看VCAP_SERVICES
. 查找您试图针对的属性,并确认ServiceBroker具有以开头的JDBCURL集jdbc:
所有jdbc URL都应该以jdbc:
.作为一个补充,我认为现在使用的格式与springcloudconnectors一起工作,springcloudconnectors的前身是javacfenv库。我相信它会自动插入
jdbc:
部分。您的代理可能指定了一个严格意义上不是jdbcurl的jdbcurl&这取决于scc来纠正。如果您能够确认url缺少前导
jdbc:
然后您可以a.)联系您的服务代理的制造商(与cf集成的制造商)并要求他们解决此问题;b.)调整设置的方式database.url
在application.properties中查看是否可以以正确的方式重新格式化它。可能是这样的(虽然我没有测试):
我相信这其中有一个已知的问题,明白吗https://github.com/pivotal-cf/java-cfenv/issues/127 还有一个代码提交链接。因此,一旦一个新版本被剪切,您就可以升级到那个版本了。您可以监视github问题以获取更多详细信息。更新此问题应在2.3.0+版本中修复。
[1] -您可以通过其他方式查看env变量:
cf ssh
放入容器&cat /proc/<pid>/environ
或者通过Spring启动执行器转储env变量/env
终结点。