Spring Data JPA和连接池

时间:2017-06-19 02:10:21

标签: oracle hibernate spring-data-jpa connection-pooling

我有一个RESTful Web应用程序,它针对Oracle存储数据,而堆栈是Spring-Data-Jpa和Hibernate。

我们已经使用Oracle UCP实现了连接池,但它似乎不起作用。我们的NFT测试在数据库中有1000个连接。

我的配置如下所示

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() throws IllegalStateException, SQLException {
    LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
    entityManagerFactoryBean.setDataSource(dataSource());
    entityManagerFactoryBean.setPersistenceProviderClass(HibernatePersistenceProvider.class);
    entityManagerFactoryBean.setPackagesToScan(env.getRequiredProperty(ENTITYMANAGER_PACKAGES_TO_SCAN));
    entityManagerFactoryBean.setJpaProperties(hibProperties());         
    return entityManagerFactoryBean;
}

@Bean
public DataSource dataSource() throws IllegalStateException, SQLException {
    PoolDataSource dataSource = PoolDataSourceFactory.getPoolDataSource();

    dataSource.setConnectionFactoryClassName(env.getRequiredProperty(DB_CONNECTION_FACTORY_CLASS_NAME));
    dataSource.setURL(env.getRequiredProperty(DATABASE_URL));
    dataSource.setUser(env.getRequiredProperty(DATABASE_USERNAME));
    dataSource.setPassword(env.getRequiredProperty(DATABASE_PASSWORD));
    dataSource.setMinPoolSize(Integer.parseInt(env.getRequiredProperty(DATABASE_CONNECTION_MIN_POOL_SIZE)));
    dataSource.setMaxPoolSize(Integer.parseInt(env.getRequiredProperty(DATABASE_CONNECTION_MAX_POOL_SIZE)));
    dataSource.setInitialPoolSize(Integer.parseInt(env.getRequiredProperty(DATABASE_CONNECTION_INITIAL_POOL_SIZE)));

    return dataSource;
}    


private Properties hibProperties() {
    Properties properties = new Properties();
    properties.put(HIBERNATE_DIALECT, env.getRequiredProperty(HIBERNATE_DIALECT));
    properties.put(HIBERNATE_SHOW_SQL, env.getRequiredProperty(HIBERNATE_SHOW_SQL));
    /*properties.put(HIBERNATE_NAMING_STRATEGY, env.getRequiredProperty(HIBERNATE_NAMING_STRATEGY));*/
    return properties;
}

如果我应该在这里使用另一个配置,请告诉我,以便不会一直创建新会话。

由于

克里斯

1 个答案:

答案 0 :(得分:0)

似乎为每个线程创建了一个DataSource,并在Jetty配置中集中数据源对问题进行了排序。

jetty and Oracle Connection Pooling