我正在尝试将Spring Boot应用程序部署到连接Postgres支持服务的CF上。我可以看到db属性在运行时没有被VCAP env替换。 我正在使用依赖项-spring-boot-starter-jdbc(不是spring-boot-starter-data-jpa,因为我打算使用JDBC模板而不是JPA)。
步骤
在pom.xml中添加了以下jar(spring-boot-starter-data-jpa,postgresql-driver)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
创建一个返回DataSource类型的bean
@Bean
@ConfigurationProperties(prefix="spring.datasource")
public DataSource dataSource() {
@SuppressWarnings("rawtypes")
DataSourceBuilder builder = DataSourceBuilder.create();
return builder.build();
}
在application.properties中指定连接属性。
spring.datasource.jdbcUrl=jdbc:postgresql://localhost:5432/test
spring.datasource.username= dummy
spring.datasource.password=dummy
spring.datasource.platform=postgresql
这样,本地设置可以正常工作。将应用程序部署到Cloud Foundry时,期望的是Spring自动重新配置应使用vcap中的属性替换Bean。
但是,这些值似乎没有被替换,并且系统尝试连接到CF上的本地主机,这会失败。
我已经查看了所有文档,它们似乎与spring-boot-starter-data-jpa一起使用,但不适用于jdbc。我可以看到在JDBC情况下自动重新配置无法正常工作。
感谢您的帮助。
感谢和问候, Veera
答案 0 :(得分:2)
我强烈建议您避免使用自动重新配置。对于演示来说这很酷,但是最终却很难使用。这有点不可思议,当它不起作用时很难调试,这就是您在这里遇到的问题。
还有其他几种方法可以执行此操作:
VCAP_SERVICES
公开为vcap.services.<name>.credentials.username
之类的属性。您可以使用它们来手动定义数据源。参见here。将此与“云”配置文件结合使用,可轻松在本地和云之间切换。