我正在使用带弹簧启动的hikari,本地测试我可以看到50个活动连接。在我部署到云代工厂后,我只能看到10个活动连接。
spring.datasource.hikari.maximum池大小= 50
似乎像云代工厂绑定服务试图覆盖我的应用程序的配置。如何在云代工厂中配置此号码?
也许有人从这个链接获得帮助,它说如果你在生产中运行认真的应用程序,你需要配置DataSourceConfiguration
https://spring.io/blog/2015/04/27/binding-to-data-services-with-spring-boot-in-cloud-foundry
答案 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-connector
和spring-cloud-cloudfoundry-connector
库。您可以在application.properties
下配置您在覆盖的Bean下声明的所有配置,就像在普通的spring boot项目中一样。另外,请确保在清单中添加以下属性:
SPRING_PROFILES_ACTIVE: cloud
JBP_CONFIG_SPRING_AUTO_RECONFIGURATION: '{enabled: false}'
请参阅此repository,该示例提供了如何将其与Redis一起使用的示例。