Spring Boot自动重新配置不适用于spring-boot-data-starter-jdbc

时间:2019-06-12 22:19:04

标签: java spring spring-boot cloudfoundry spring-jdbc

我正在尝试将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

1 个答案:

答案 0 :(得分:2)

我强烈建议您避免使用自动重新配置。对于演示来说这很酷,但是最终却很难使用。这有点不可思议,当它不起作用时很难调试,这就是您在这里遇到的问题。

还有其他几种方法可以执行此操作:

  • Spring Boot将VCAP_SERVICES公开为vcap.services.<name>.credentials.username之类的属性。您可以使用它们来手动定义数据源。参见here。将此与“云”配置文件结合使用,可轻松在本地和云之间切换。
  • 您可以use Spring Cloud Connectors。使用SCC时,自动重新配置将自动退出。然后,您可以使用SCC选择服务并从中获取数据源。
  • 您可以使用新的java-cfenv库,即intended to complement Spring Boot better