我有一个Spring Boot应用程序绑定到Cloud Foundry环境中的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": []
}
]
启动应用程序时,Cloud Foundry将创建一个DataSource对象,并将其与预期的先前vcaps的确切配置放到spring的上下文中。
另一个问题:How to update postgres uri value in cf vcaps env
我试图覆盖Datasource 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;
}
令人难以置信的是,发现云似乎覆盖了我的bean,并在创建我的bean之后创建了一个新的云。
当我执行以下CF命令时:
$ cf us myapp mypostgres
$ cf restart myapp
我的bean并没有过度使用,它可以正常工作。 我正在尝试寻找一种方法来取消由云计算基础人员完成的自动配置,或者为我做的任何事情。
有什么主意吗?
预先感谢
答案 0 :(得分:2)
有两种方法可以选择退出自动重新配置。
如果您的应用程序具有从AbstractCloudConfig
扩展的Java配置,或者您定义了@Bean
类型的Cloud
,则可以不选择自动重新配置。无论哪种情况,自动重新配置都应显示您正在手动配置并退出。
这没有很好的记录,但是first two sections here暗示了这一点。
通过将环境变量JBP_CONFIG_SPRING_AUTO_RECONFIGURATION
设置为{ enabled: false }
,可以完全禁用自动重新配置。这将完全启用自动重新配置。参见docs here for reference。
这两个选项之间的主要区别在于,后者告诉Java buildpack甚至不安装自动重新配置,这意味着您失去了一些附加功能,例如cloud.services
属性占位符和{{ 1}} Spring个人资料。
我个人更喜欢选择#2,因为我不使用cloud
属性占位符,并且通过添加环境变量cloud.services
并将其设置为{{ 1}},假设您需要这样做。
希望有帮助!