Java 以编程方式管理多个jdbcTemplates

Java 以编程方式管理多个jdbcTemplates,java,oracle,spring-mvc,jdbctemplate,Java,Oracle,Spring Mvc,Jdbctemplate,我有一个定制的业务需求,其中我需要管理数据库中各种Oracle数据源的详细信息。一旦我的应用程序部署,我就会创建对应于每个应用程序的jdbcTemplates 现在的问题是,如果我使用数据源连接,它会导致太多的开放数据连接,因此数据库拒绝连接,应用程序崩溃 我还使用了SingleConnectionDataSource,但在这种情况下,Spring会在空闲会话1或2小时后抛出连接超时错误 另一个试验是使用BasicDataSource,但这也导致了应用程序的错误 我维护数据的方式 Ba

我有一个定制的业务需求,其中我需要管理数据库中各种Oracle数据源的详细信息。一旦我的应用程序部署,我就会创建对应于每个应用程序的jdbcTemplates

现在的问题是,如果我使用数据源连接,它会导致太多的开放数据连接,因此数据库拒绝连接,应用程序崩溃

我还使用了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中维护它们。数据源详细信息也来自数据库表

这是因为前端应用程序将实际决定使用哪个特定数据源来执行DB操作


请建议我一个更好的方法,或解决现有的超时/空闲连接问题

我建议使用连接池。可以设置初始连接的数量、总连接的限制和几十个其他选项


看看。

谢谢@Sezin。我知道连接池会有所帮助,但我想知道如何在代码中实现连接池。我很乐意帮忙。手动实现这种东西通常是有风险的,所以我建议使用这种方法。