我有一个 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我的豆子没有被过度使用,而且效果很好。我正在尝试找到一种方法来取消由云基金会或任何为我做的事情完成的自动配置。任何想法?提前致谢
1 回答
ibeautiful
TA贡献1993条经验 获得超5个赞
有几种方法可以选择退出自动重新配置。
AbstractCloudConfig
如果您的应用程序具有从 扩展的 Java 配置,或者如果您定义了@Bean
类型为 的,则可以选择退出自动重新配置Cloud
。在任何一种情况下,自动重新配置都应该看到您正在进行手动配置并退出。您可以通过将 env 变量设置
JBP_CONFIG_SPRING_AUTO_RECONFIGURATION
为 来完全禁用自动重新配置{ enabled: false }
。这将完全打开自动重新配置。
这两个选项之间的主要区别在于,后者告诉 Java buildpack 甚至不安装自动重新配置,这意味着您会失去一些附加功能,例如属性cloud.services
占位符和自动添加cloud
Spring 配置文件。
我个人更喜欢选项#2,因为我不使用属性占位符,并且如果您需要的话,通过添加 env 变量并将其设置为 来cloud.services
启用云配置文件很容易。SPRING_PROFILES_ACTIVE
cloud
希望有帮助!
添加回答
举报
0/150
提交
取消