数据源对象被 Cloud Foundry 配置覆盖

我有一个 Spring Boot 应用程序绑定到 Cloud Foundry 环境中的数据库服务实例(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": []

   }

  ]

当我启动该应用程序时,cloud foundry 正在创建一个 DataSource 对象,并将其放入 spring 的上下文中,并按预期使用先前 vcaps 的精确配置。

我正在尝试覆盖数据源 neam 对象,以便能够将数据库的架构名称连接到 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

我的豆子没有被过度使用,而且效果很好。我正在尝试找到一种方法来取消由云基金会或任何为我做的事情完成的自动配置。

任何想法?

提前致谢



蛊毒传说
浏览 102回答 1
1回答

ibeautiful

有几种方法可以选择退出自动重新配置。AbstractCloudConfig如果您的应用程序具有从 扩展的 Java 配置,或者如果您定义了@Bean类型为 的,则可以选择退出自动重新配置Cloud。在任何一种情况下,自动重新配置都应该看到您正在进行手动配置并退出。您可以通过将 env 变量设置JBP_CONFIG_SPRING_AUTO_RECONFIGURATION为 来完全禁用自动重新配置{ enabled: false }。这将完全打开自动重新配置。这两个选项之间的主要区别在于,后者告诉 Java buildpack 甚至不安装自动重新配置,这意味着您会失去一些附加功能,例如属性cloud.services占位符和自动添加cloudSpring 配置文件。我个人更喜欢选项#2,因为我不使用属性占位符,并且如果您需要的话,通过添加 env 变量并将其设置为 来cloud.services启用云配置文件很容易。SPRING_PROFILES_ACTIVEcloud希望有帮助!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java