我在我的项目中使用Spring并实例化dataSource,如下所示。
@Bean(destroyMethod="close")
public DataSource restDataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(env.getProperty("hibernate.connection.driver_class"));
dataSource.setUrl(env.getProperty("hibernate.connection.url"));
dataSource.setUsername(env.getProperty("hibernate.connection.username"));
dataSource.setPassword(env.getProperty("hibernate.connection.password"));
dataSource.setInitialSize(env.getRequiredProperty("hibernate.dbcp.initialSize", Integer.class));
dataSource.setMaxActive(env.getRequiredProperty("hibernate.dbcp.maxActive", Integer.class));
dataSource.setMaxIdle(env.getRequiredProperty("hibernate.dbcp.maxIdle", Integer.class));
dataSource.setMinIdle(env.getRequiredProperty("hibernate.dbcp.minIdle", Integer.class));
return dataSource;
}
以下是我的属性文件。
hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
hibernate.connection.driver_class=oracle.jdbc.driver.OracleDriver
hibernate.connection.username=<>
hibernate.connection.password=<>
hibernate.connection.url=jdbc:oracle:thin:@<Host>:1521:<SID>
hibernate.show_sql=true
hibernate.cache.use_query_cache=true
cache.provider_class=org.hibernate.cache.EhCacheProvider
hibernate.cache.use_second_level_cache=true
hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.EhCacheRegionFactory
net.sf.ehcache.configurationResourceName=ehcache.xml
**hibernate.dbcp.initialSize=10
hibernate.dbcp.maxActive=100
hibernate.dbcp.maxIdle=30
hibernate.dbcp.minIdle=10**
请建议: -
答案 0 :(得分:3)
我建议使用HikariCP而不是Commons DBCP(我最近有很好的经验,或者如果你已经在tomcat上使用Tomcat JDBC了。
有很多关于池化的文章(请参阅here获取一个很好的解释,并here获取来自Oracle的简短视频)。总之,大型池化不起作用,可能会使性能变差。
经验法则(也在上面提到的文章中)是使用
connections =((core_count * 2)+ effective_spindle_count)
其中core_count
是服务器中(实际)核心的数量,effective_spindle_count
是您拥有的磁盘数量。如果你的服务器有一个大磁盘和4个核心,它将导致一个大小为9的连接池。这应该能够处理你需要的东西,添加更多只会增加监控,线程切换等开销。