我使用的春天开机和使用的Postgres,兔MQ和CF.部署应用程序我们计算过,我们需要设置连接池,我们发现,我们做任何配置,在CF我们可以其最大4个连接,而不是从那里我们得到的数字(可能是一些与buildpack或服务配置)确定。
为了解决我不得不延长AbstractCloudConfig,那就是痛苦,因为它关闭其它自动配置所以现在我必须手动配置兔子MQ连接工厂太:(我已经想出了下面的配置,但不知道这是正确的路。
春天引导版本:1.4
请指教。
package com.example;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.config.java.AbstractCloudConfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.Profile;
/**
* If we need to modify some some custom service configuration on cloud foundry
* e.g. setting up of connection pools. If we set normally and expose bean, it
* will work fine on local machine. But as it will go to Cloud foundry it
* somehow creates max 4 connections. (Not sure from where this number comes)
*
* Adding this configuration meaning we no longer want to leverage auto
* configuration. As soon as Spring boot sees this bean in cloud profile it will
* turn of auto configuration. Expectation is application is going to take care
* of all configuration. This normally works for most of the applications.
*
* For more information read: https://github.com/dsyer/cloud-middleware-blog
* https://docs.cloudfoundry.org/buildpacks/java/spring-service-bindings.html
*
* Hopefully future release of spring boot will allow us to hijack only
* configuration that we want to do ourselves and rest will be auto
* configuration specifically in context with CloudFoundry.
*
*/
@Configuration
@Profile("cloud")
public class CloudServicesConfig extends AbstractCloudConfig {
@Value("${vcap.services.postgres.credentials.jdbc_uri}")
private String postgresUrl;
@Value("${vcap.services.postgres.credentials.username}")
private String postgresUsername;
@Value("${vcap.services.postgres.credentials.password}")
private String postgresPassword;
@Value("${spring.datasource.driver-class-name}")
private String dataSourceDriverClassName;
@Primary
@Bean
public DataSource dataSource() {
org.apache.tomcat.jdbc.pool.DataSource dataSource = new org.apache.tomcat.jdbc.pool.DataSource();
dataSource.setDriverClassName(dataSourceDriverClassName);
dataSource.setUrl(postgresUrl);
dataSource.setUsername(postgresUsername);
dataSource.setPassword(postgresPassword);
dataSource.setInitialSize(10);
dataSource.setMaxIdle(5);
dataSource.setMinIdle(5);
dataSource.setMaxActive(25);
return dataSource;
}
// You can add rest of services configuration below e.g. rabbit connection
// factory, redis etc to centralize services configuration for cloud.
// This example did not use profile but that is what you should use to
// separate out cloud vs local configuraion to help run on local etc.
}
你并不需要所有的配置只是为了自定义池的大小。你应该只需要这个代码所示documentation:
@Bean
public DataSource dataSource() {
PoolConfig poolConfig = new PoolConfig(5, 30, 3000);
DataSourceConfig dbConfig = new DataSourceConfig(poolConfig, null);
return connectionFactory().dataSource(dbConfig);
}