Cloud Foundry绑定服务/杯数据源连接数

时间:2017-02-07 04:28:14

标签: spring-boot cloudfoundry hikaricp pivotal-cloud-foundry spring-cloud-connectors

我正在使用带弹簧启动的hikari,本地测试我可以看到50个活动连接。在我部署到云代工厂后,我只能看到10个活动连接。

spring.datasource.hikari.maximum池大小= 50

似乎像云代工厂绑定服务试图覆盖我的应用程序的配置。如何在云代工厂中配置此号码?

也许有人从这个链接获得帮助,它说如果你在生产中运行认真的应用程序,你需要配置DataSourceConfiguration

http://cloud.spring.io/spring-cloud-connectors/spring-cloud-spring-service-connector.html#_relational_database_db2_mysql_oracle_postgresql_sql_server

https://spring.io/blog/2015/04/27/binding-to-data-services-with-spring-boot-in-cloud-foundry

3 个答案:

答案 0 :(得分:4)

如果要在项目中包含spring-boot-starter-cloud-connectors,则不使用Spring Boot数据库属性。 Spring Cloud Connectors将自动创建和配置Datasource bean,除非您编写Java代码以手动配置它。

正如您在Connectors docs中找到的那样,您可以编写这样的代码来配置连接属性,包括池大小。

@Bean
public DataSource dataSource() {
    PoolConfig poolConfig = new PoolConfig(5, 30, 3000);
    DataSourceConfig dbConfig = new DataSourceConfig(poolConfig, null);
    return connectionFactory().dataSource("database-service-name", dbConfig);
}

如果要使用Boot属性而不是像这样编写代码,可以从项目中删除spring-boot-starter-cloud-connectors,并在CF上运行应用程序时使用Boot提供的vcap properties配置Boot属性。如果以这种方式配置连接,则应尊重您的maximum-pool-size属性。

答案 1 :(得分:0)

我不得不抬头看Hikari。根据{{​​3}},它是一个jdbc连接池。

我假设您已将Hikari部署为Cloud Foundry中的应用程序并从中创建了CUPS服务。这是对的吗?

无法通过CUPS定义修改服务。它只是为您创建该服务的实例。

尝试在bootstrap.yml中设置池大小,或者通过在Hikari应用程序上设置环境变量来传递默认值。您可能需要调整应用程序以在运行时接受这些变量。

如果这不起作用,您可能必须创建自己的服务代理,或生成磁贴。这将为您提供操作服务的选项。

希望这有帮助!

答案 2 :(得分:0)

是的,Cloud Foundry连接器将覆盖您的属性,并对其进行配置,您必须声明一个answer中提到的bean。请注意,此配置受到限制,因此Cloud Foundry引入了java-cfenv。您可以按如下所示将此库添加到build.gradle中:

implementation 'io.pivotal.cfenv:java-cfenv-boot:2.1.2.RELEASE'

然后,您可以删除spring-cloud-spring-service-connectorspring-cloud-cloudfoundry-connector库。您可以在application.properties下配置您在覆盖的Bean下声明的所有配置,就像在普通的spring boot项目中一样。另外,请确保在清单中添加以下属性:

SPRING_PROFILES_ACTIVE: cloud
JBP_CONFIG_SPRING_AUTO_RECONFIGURATION: '{enabled: false}'

请参阅此repository,该示例提供了如何将其与Redis一起使用的示例。