我有一个 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
我的豆子没有被过度使用,而且效果很好。我正在尝试找到一种方法来取消由云基金会或任何为我做的事情完成的自动配置。
任何想法?
提前致谢
ibeautiful
相关分类