开发者社区> 问答> 正文

请问如何在项目启动时就初始化连接池

我们的服务是spring-cloud服务,使用druid连接池,每次都是等到第一次请求数据库,才初始化连接池,这样每次我们有上线后的第一次处理请求,都超时, 所以我们想在服务启动的时候就初始化好连接池,请问大佬们如何实现?

原提问者GitHub用户DeBruyne2020

展开
收起
山海行 2023-07-05 17:59:55 234 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    在项目启动时初始化连接池,通常可以在应用程序的启动类中创建连接池对象,并将连接池对象设置为单例模式,以供应用程序的其他部分使用。

    2023-07-30 21:13:02
    赞同 展开评论 打赏
  • 配置initialSize

    原回答者GitHub用户wenshao

    2023-07-06 10:42:09
    赞同 展开评论 打赏
  • 要在服务启动时初始化连接池,你可以使用 Spring 的事件机制来实现。具体步骤如下:

    1. 创建一个类,用于监听应用程序的启动事件。可以命名为 DruidConnectionPoolInitializer

    2. 在该类中,使用 @EventListener 注解监听 ContextRefreshedEvent 事件,该事件会在应用程序上下文加载完成后触发。

    3. 在事件监听方法中,初始化 Druid 连接池,并将其作为一个单例 Bean 放入应用程序上下文中。

    下面是一个示例代码片段,演示了如何实现连接池的初始化:

    import com.alibaba.druid.pool.DruidDataSource;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.context.event.ApplicationReadyEvent;
    import org.springframework.context.ApplicationListener;
    import org.springframework.stereotype.Component;
    
    @Component
    public class DruidConnectionPoolInitializer implements ApplicationListener<ApplicationReadyEvent> {
    
        @Autowired
        private DataSourceProperties dataSourceProperties;
    
        @Override
        public void onApplicationEvent(ApplicationReadyEvent event) {
            // 初始化 Druid 连接池
            DruidDataSource dataSource = new DruidDataSource();
            dataSource.setDriverClassName(dataSourceProperties.getDriverClassName());
            dataSource.setUrl(dataSourceProperties.getUrl());
            dataSource.setUsername(dataSourceProperties.getUsername());
            dataSource.setPassword(dataSourceProperties.getPassword());
            
            // 设置其他连接池参数
            
            // 将连接池放入应用程序上下文中
            event.getApplicationContext().getBeanFactory().registerSingleton("dataSource", dataSource);
        }
    }
    

    在上述示例中,我们通过读取配置文件中的数据库连接信息(DataSourceProperties),创建了一个 Druid 连接池,并将其以单例形式注册到应用程序上下文中。这样,在应用程序启动时就会初始化连接池,并可以在后续的请求中使用。

    请注意,以上示例仅提供了基本的实现思路,具体的代码可能需要根据你的项目结构和配置进行适当修改。

    另外,如果你使用的是 Spring Boot,还可以直接在 application.propertiesapplication.yml 文件中配置连接池参数,Spring Boot 会自动根据配置来初始化连接池。这种方式更为简洁,不需要手动编写事件监听器。例如:

    spring.datasource.url=jdbc:oracle:thin:@//localhost:1521/mydatabase
    spring.datasource.username=your-username
    spring.datasource.password=your-password
    spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
    
    spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
    spring.datasource.initial-size=5
    spring.datasource.min-idle=5
    spring.datasource.max-active=30
    # 其他连接池参数...
    

    通过以上配置,连接池会在应用程序启动时自动初始化,并可供后续的数据库操作使用。

    希望以上信息能对你有所帮助!如有任何疑问,请随时追问。

    2023-07-05 18:16:37
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载