Java 数据源对象被云铸造配置覆盖
我有一个spring引导应用程序绑定到云铸造环境中的DB服务实例(postgres)。 应用程序的VCAP包括以下绑定: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",
"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
,则可以选择不进行自动重新配置。在任何一种情况下,自动重新配置都应该看到您正在进行手动配置并退出
这并没有很好的记录,但暗指它JBP\u CONFIG\u SPRING\u auto\u reconfiguration
设置为{enabled:false}
,可以完全禁用自动重新配置。这将完全转变为自动重新配置。看cloud.services
属性占位符和cloud
Spring配置文件的自动添加
我个人更喜欢选项#2,因为我不使用cloud.services
属性占位符,只要添加一个env变量SPRING\u PROFILES\u ACTIVE
并将其设置为cloud
,就可以很容易地启用云配置文件(假设您需要)
希望有帮助 嗨,丹尼尔,谢谢你的回复,我认为对于我的情况,最好使用你提到的第一个选项,因为我不想失去其他云功能。我所要做的就是将?=currentSchema添加到数据库url中,这样我就可以使数据源使用特定的模式而不是默认模式。