我有自定义业务需求,我需要在其中管理数据库中各种Oracle数据源的详细信息。一旦我的应用程序部署,我创建对应于每个&em; em的jdbcTemplates。
现在的问题是,如果我使用DataSource连接,它会导致太多的开放数据连接,因此DB拒绝连接和应用程序崩溃。
我也使用过SingleConnectionDataSource,但在这种情况下,Spring会在1或2个小时的空闲会话后抛出连接超时错误。
另一项试验是使用BasicDataSource,但这也导致了应用程序的错误。
我维护数据的方式
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(DRIVER_CLASS_NAME);
dataSource.setUrl(CONNECTION_PREFIX + getHost() + ":" + getPort() + ":" + getServiceName());
dataSource.setUsername(getUserName());
dataSource.setPassword(getPassword());
dataSource.setInitialSize(15);
dataSource.setMinIdle(20);
dataSource.setMaxIdle(100);
dataSource.setMaxActive(150);
dataSource.setMaxWait(6000);
dataSource.setRemoveAbandoned(true);
dataSource.setRemoveAbandonedTimeout(30000);
dataSource.setLogAbandoned(true);
dataSource.setTestOnBorrow(true);
dataSource.setTestOnReturn(false);
dataSource.setTestWhileIdle(true);
dataSource.setTimeBetweenEvictionRunsMillis(30000);
dataSource.setMinEvictableIdleTimeMillis(30000);
dataSource.setMinEvictableIdleTimeMillis(30000);
dataSource.setValidationQuery("SELECT 1 from dual");
JdbcTemplate template = new JdbcTemplate(dataSource);
请注意,我正在以这种方式创建多个jdbcTemplates并在HashMap中维护它们。数据源详细信息也来自数据库表
这是因为前端应用程序实际上将决定使用哪个特定数据源来执行数据库操作。
请建议我一个更好的方法,或解决现有的超时/空闲连接问题!!