Java 连接数与JPA配置中的连接池大小不同
我在我的应用程序中使用Spring Boot,并将C3P0用于连接池。当我查询数据库时,即使是刚启动的应用程序也会显示14个连接Java 连接数与JPA配置中的连接池大小不同,java,spring,hibernate,jpa,spring-boot,Java,Spring,Hibernate,Jpa,Spring Boot,我在我的应用程序中使用Spring Boot,并将C3P0用于连接池。当我查询数据库时,即使是刚启动的应用程序也会显示14个连接 SELECT usename, count(*) as count FROM pg_stat_activity group by usename 当我给应用程序一些负载时,它就会达到config+~14连接中指定的计数。我不确定这些连接是从哪里打开的 这是我初始化数据库的配置文件 public class PgDataSourceConfig { @Auto
SELECT usename, count(*) as count FROM pg_stat_activity group by usename
当我给应用程序一些负载时,它就会达到config+~14连接中指定的计数。我不确定这些连接是从哪里打开的
这是我初始化数据库的配置文件
public class PgDataSourceConfig {
@Autowired
JpaVendorAdapter jpaVendorAdapter;
@Autowired
DataSource dataSource;
@Value("${spring.datasource.url}")
private String databaseUrl;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Value("${pg.import_files}")
private String importFiles;
@Value("${pg.hbm2ddl.auto}")
private String hbm2Ddl;
@Value("${pg.default_schema}")
private String default_schema;
@Value("${hibernate.jdbc.batch_size}")
private String batch_size;
@Value("${hibernate.c3p0.max_size}")
private String max_size;
@Value("${hibernate.c3p0.min_size}")
private String min_size;
@Value("${hibernate.c3p0.timeout}")
private String timeout;
@Value("${hibernate.c3p0.max_statements}")
private String max_statements;
@Value("${hibernate.c3p0.idle_test_period}")
private String idle_test_period;
@Value("${hibernate.c3p0.acquire_increment}")
private String acquire_increment;
@Value("${hibernate.c3p0.validate}")
private String validate;
@Value("${pg.format_sql}")
private String formatSql;
@Value("${pg.use_sql_comments}")
private String useSqlComments;
@Bean
@DependsOn(value = {"flyway"})
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() {
Properties properties = new Properties();
properties.setProperty("hibernate.connection.driver_class", "org.postgresql.Driver");
properties.setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQL9Dialect");
properties.setProperty("hibernate.hbm2ddl.auto", hbm2Ddl);
properties.setProperty("hibernate.connection.url", databaseUrl);
properties.setProperty("hibernate.connection.username", username);
properties.setProperty("hibernate.connection.password", password);
properties.setProperty("hibernate.hbm2ddl.import_files", importFiles);
properties.setProperty("hibernate.format_sql", formatSql);
properties.setProperty("hibernate.use_sql_comments", useSqlComments);
properties.setProperty("hibernate.jdbc.batch_size", batch_size);
properties.setProperty("hibernate.connection.provider_class", "org.hibernate.connection.C3P0ConnectionProvider");
properties.setProperty("hibernate.c3p0.max_size", max_size);
properties.setProperty("hibernate.c3p0.min_size", min_size);
properties.setProperty("hibernate.c3p0.timeout", timeout);
properties.setProperty("hibernate.c3p0.max_statements", max_statements);
properties.setProperty("hibernate.c3p0.idle_test_period", idle_test_period);
properties.setProperty("hibernate.c3p0.acquire_increment", acquire_increment);
properties.setProperty("hibernate.c3p0.validate", validate);
properties.setProperty("hibernate.id.new_generator_mappings", "true");
final LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
localContainerEntityManagerFactoryBean.setDataSource(dataSource);
localContainerEntityManagerFactoryBean.setJpaVendorAdapter(jpaVendorAdapter);
localContainerEntityManagerFactoryBean.setPackagesToScan("com.test");
localContainerEntityManagerFactoryBean.setPersistenceUnitName("default");
localContainerEntityManagerFactoryBean.setJpaProperties(properties);
localContainerEntityManagerFactoryBean.afterPropertiesSet();
return localContainerEntityManagerFactoryBean;
}
@Bean(name = "entityManager")
public EntityManager entityManager() {
return entityManagerFactory().createEntityManager();
}
@Primary
@Bean(name = "entityManagerFactory")
public EntityManagerFactory entityManagerFactory() {
LocalContainerEntityManagerFactoryBean emf = this.entityManagerFactoryBean();
return emf.getObject();
}
@Bean(name = "transactionManager")
public PlatformTransactionManager transactionManager() {
JpaTransactionManager tm = new JpaTransactionManager();
tm.setEntityManagerFactory(entityManagerFactory());
return tm;
}
}
这些是属性文件中的值
spring.jpa.database=POSTGRESQL
spring.datasource.url=jdbc:postgresql://localhost:5432/test
spring.datasource.driverClassName=org.postgresql.Driver
spring.datasource.username=ashwani
spring.datasource.password=ashwani
pg.import_files=lookup.sql,data.sql
pg.hbm2ddl.auto=validate
hibernate.c3p0.max_size= 10
hibernate.c3p0.min_size= 1
hibernate.c3p0.timeout =10
hibernate.c3p0.max_statements =100
hibernate.c3p0.idle_test_period =3
hibernate.c3p0.acquire_increment =1
hibernate.c3p0.validate =false
hibernate.jdbc.batch_size=25
我不确定导致额外连接的配置中有什么错误。
我怎样才能解决这个问题?
谢谢你能在运行spring boot应用程序的机器上运行一个
netstat
吗,看看你看到的到db的连接数是否相同?所有东西都只在我的本地机器上。在我启动应用程序的那一刻,连接数达到~14-15,当我请求API调用时,连接数达到~23,当我停止调用时,连接数再次达到初始计数(14),当我停止应用程序时。它达到0。您的localhost服务器上可能有其他一些Web应用程序已配置为使用相同的postgres实例?您的hibernate.c3p0
属性无效。您正在注入一个覆盖嵌入式数据源的数据源。另外,您正在使用spring boot,然后使用spring boot,您正在尝试解决它。@M.Deinum good catch.)