有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java连接数与JPA配置中的连接池大小不同

我在我的应用程序中使用Spring Boot,并将C3P0用于连接池。当我查询数据库时,即使是刚启动的应用程序也会显示14个连接

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

我不确定导致额外连接的配置中有什么错误。 我怎样才能解决这个问题? 谢谢


共 (0) 个答案