Spring 引导自动重新配置在 spring-boot-data-starter-jdbc 上不起作用

Spring Boot auto reconfiguration not working on spring-boot-data-starter-jdbc

我正在尝试将 spring 引导应用程序部署到连接 Postgres 支持服务的 CF。我可以看到数据库属性在 运行 时间内没有被 VCAP env 替换。 我正在使用依赖项 - spring-boot-starter-jdbc(不是 spring-boot-starter-data-jpa 因为我打算使用 JDBC 模板而不是 JPA ).

步骤

在 pom.xml 中添加了以下 jar(spring-boot-starter-data-jpa,postgresql- 驱动程序)

<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 情况下不起作用。

感谢任何帮助。

感谢和问候, 薇拉

我强烈建议您避免使用自动重新配置。演示很酷,但最终很难真正使用。它有点太神奇了,当它不起作用时很难调试,这就是你运行到这里的原因。

还有其他几种方法可以做到这一点:

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