Java 数据源对象被云铸造配置覆盖

Java 数据源对象被云铸造配置覆盖,java,spring,spring-boot,cloud-foundry,Java,Spring,Spring Boot,Cloud Foundry,我有一个spring引导应用程序绑定到云铸造环境中的DB服务实例(postgres)。 应用程序的VCAP包括以下绑定: "postgresql": [ { "binding_name": null, "credentials": { "dbname": "yD6nAoGVmfmqnbex", "end_points": [ { "host": "10.11.241.0", "network_id": "SF",

我有一个spring引导应用程序绑定到云铸造环境中的DB服务实例(postgres)。 应用程序的VCAP包括以下绑定:

"postgresql": [
   {
    "binding_name": null,
    "credentials": {
     "dbname": "yD6nAoGVmfmqnbex",
     "end_points": [
      {
       "host": "10.11.241.0",
       "network_id": "SF",
       "port": "50257"
      }
     ],
     "hostname": "10.11.241.0",
     "password": "No963ndbbsfndJoj",
     "port": "50257",
     "ports": {
      "5432/tcp": "50257"
     },
     "uri": "postgres://Gw7n8pHTvpM2gh7t:No963ndbbsfndJoj@10.11.241.0:50257/yD6nAoGVmfmqnbex",
     "username": "Gw7n8pHTvpM2gh7t"
    },
    "instance_name": "cispostgres",
    "label": "postgresql",
    "name": "cispostgres",
    "plan": "v9.6-dev",
    "provider": null,
    "syslog_drain_url": null,
    "tags": [
     "postgresql",
     "relational"
    ],
    "volume_mounts": []
   }
  ]
当我启动应用程序时,CloudFoundry正在创建一个DataSource对象,并将其放在spring的上下文中,使用先前VCAP中的精确配置

以下是另一个问题:

我试图覆盖Datasource neam对象,以便能够将DB的架构名称连接到url,如下所示:

@Bean(name = "dataSource")
    @Primary
    public DataSource createDataSource() throws SQLException {

        String dbUri = "jdbc:postgresql://10.11.241.0:50257/yD6nAoGVmfmqnbex?currentSchema=accounts";
        String username = "Gw7n8pHTvpM2gh7t";
        String password = "No963ndbbsfndJoj";

        DataSource dataSource = DataSourceBuilder.create()
                .url(dbUri)
                .username(username)
                .password(password)
                .type(org.postgresql.ds.PGSimpleDataSource.class)
                .driverClassName(DRIVER_CLASS_NAME)
                .build();
        return dataSource;
    }
不幸的是,CloudFounday似乎覆盖了我的bean,并在我的bean创建之后创建了一个新的bean

执行以下CF命令时:

$ cf us myapp mypostgres
$ cf restart myapp
我的豆子没有煮过头,而且很好用。 我正试图找到一种方法来取消CloudFoundary所做的自动配置,或者其他任何为我做的事情

有什么想法吗


提前感谢

有几种方法可以选择退出自动重新配置

  • 如果您的应用程序具有从
    AbstractCloudConfig
    扩展而来的Java配置,或者您定义了
    @Bean
    类型的
    Cloud
    ,则可以选择不进行自动重新配置。在任何一种情况下,自动重新配置都应该看到您正在进行手动配置并退出

    这并没有很好的记录,但暗指它

  • 通过将env变量
    JBP\u CONFIG\u SPRING\u auto\u reconfiguration
    设置为
    {enabled:false}
    ,可以完全禁用自动重新配置。这将完全转变为自动重新配置。看

  • 这两个选项之间的主要区别是后者告诉Java buildpack甚至不要安装自动重新配置,这意味着您失去了一些额外的功能,如
    cloud.services
    属性占位符和
    cloud
    Spring配置文件的自动添加

    我个人更喜欢选项#2,因为我不使用
    cloud.services
    属性占位符,只要添加一个env变量
    SPRING\u PROFILES\u ACTIVE
    并将其设置为
    cloud
    ,就可以很容易地启用云配置文件(假设您需要)


    希望有帮助

    嗨,丹尼尔,谢谢你的回复,我认为对于我的情况,最好使用你提到的第一个选项,因为我不想失去其他云功能。我所要做的就是将?=currentSchema添加到数据库url中,这样我就可以使数据源使用特定的模式而不是默认模式。