zoukankan      html  css  js  c++  java
  • springboot整合Druid(德鲁伊)配置多数据源数据库连接池

    pom.xml

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.13</version>
    </dependency>
    
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.0</version>
    </dependency>
    
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.12</version>
    </dependency>
    
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.1.10</version>
    </dependency>

    application.properties

    #d1数据库连接
    spring.datasource.d1.driver-class-name = com.mysql.cj.jdbc.Driver
    spring.datasource.d1.url = jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
    spring.datasource.d1.username = root
    spring.datasource.d1.password = root
    
    #d1数据库连接池配置
    spring.datasource.d1.type=com.alibaba.druid.pool.DruidDataSource
    #初始连接数
    spring.datasource.d1.initialSize=1
    #最小连接数
    spring.datasource.d1.minIdle=3
    #最大连接数
    spring.datasource.d1.maxActive=20
    #配置获取连接等待超时的时间
    spring.datasource.d1.maxWait=60000
    #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
    spring.datasource.d1.timeBetweenEvictionRunsMillis=60000
    #配置一个连接在池中最小生存的时间,单位是毫秒
    spring.datasource.d1.minEvictableIdleTimeMillis=30000
    spring.datasource.d1.validationQuery=SELECT 1 FROM DUAL
    spring.datasource.d1.testWhileIdle=true
    spring.datasource.d1.testOnBorrow=false
    spring.datasource.d1.testOnReturn=false
    spring.datasource.d1.poolPreparedStatements=true
    #配置监控统计拦截的filters,stat:监控统计、slf4j:日志记录、wall:防御sql注入
    spring.datasource.d1.filters=stat,wall,slf4j
    spring.datasource.d1.maxPoolPreparedStatementPerConnectionSize=20

    多数据源配置d1连接配置类

    @Configuration
    @MapperScan(basePackages = "com.test.dao.d1.mapper", sqlSessionTemplateRef = "d1SqlSessionTemplate")
    public class D1DatabaseConfig {
        @Bean(name = "d1DataSource")
        @ConfigurationProperties(prefix = "spring.datasource.d1")
        public DataSource d1DataSource() {
            DruidDataSource druidDataSource = new DruidDataSource();
            return druidDataSource;
        }
    
        @Bean(name = "d1SqlSessionFactory")
        public SqlSessionFactory d1SqlSessionFactory(@Qualifier("d1DataSource") DataSource dataSource) throws Exception {
            MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
            bean.setDataSource(dataSource);
            bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:com/test/dao/d1/mapper/*.xml"));
            // 指明实体扫描(多个package用逗号或者分号分隔)
            MybatisConfiguration configuration = new MybatisConfiguration();
            bean.setTypeAliasesPackage("com.test.dao.d1");
            // 导入mybatis配置
            configuration.setJdbcTypeForNull(JdbcType.NULL);
            configuration.setMapUnderscoreToCamelCase(true);
            configuration.setCacheEnabled(false);
            // 配置打印sql语句
            configuration.setLogImpl(StdOutImpl.class);
            bean.setConfiguration(configuration);
            return bean.getObject();
        }
    
        @Bean(name = "d1TransactionManager")
        public DataSourceTransactionManager d1TransactionManager(@Qualifier("d1DataSource") DataSource dataSource) {
            return new DataSourceTransactionManager(dataSource);
        }
    
        @Bean(name = "d1SqlSessionTemplate")
        public SqlSessionTemplate d1SqlSessionTemplate(@Qualifier("d1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
            return new SqlSessionTemplate(sqlSessionFactory);
        }
    
        @Bean
        public PaginationInterceptor paginationInterceptor() {
            PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
            return paginationInterceptor;
        }
    }

    Druid监控配置

    /**
     * 配置 Druid 监控管理后台的Servlet;
     * 内置 Servler 容器时没有web.xml文件,所以使用 Spring Boot 的注册 Servlet 方式
     * @return
     */
    @Bean
    public ServletRegistrationBean statViewServlet() {
        ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
        Map<String, String> initParams = new HashMap<>();
        //后台管理界面的登录账号
        initParams.put("loginUsername", "admin");
        //后台管理界面的登录密码
        initParams.put("loginPassword", "123456");
        //后台允许谁(ip)可以访问,为空或者为null时,表示允许所有访问
        initParams.put("allow", "");
        //后台拒绝谁访问
        //initParams.put("kuangshen", "192.168.1.20");表示禁止此ip访问
        //设置初始化参数
        bean.setInitParameters(initParams);
        return bean;
    }
    /**
     * 配置 Druid 监控 之  web 监控的 filter
     * WebStatFilter:用于配置Web和Druid数据源之间的管理关联监控统计
     * @return
     */
    @Bean
    public FilterRegistrationBean webStatFilter() {
        FilterRegistrationBean bean = new FilterRegistrationBean();
        bean.setFilter(new WebStatFilter());
        //exclusions:设置哪些请求进行过滤排除掉,从而不进行统计
        Map<String, String> initParams = new HashMap<>();
        initParams.put("exclusions", "*.js,*.css,/druid/*");
        bean.setInitParameters(initParams);
        //"/*" 表示过滤所有请求
        bean.setUrlPatterns(Arrays.asList("/*"));
        return bean;
    }

    测试

    //注入数据源
        @Autowired
        @Qualifier("d1DataSource")
        DataSource dataSource;
        @Test
        public void contextLoads() throws SQLException {
            //看一下默认数据源
            System.out.println(dataSource.getClass());
            //获得连接
            Connection connection =   dataSource.getConnection();
            System.out.println(connection);
            DruidDataSource druidDataSource = (DruidDataSource) dataSource;
            System.out.println("druidDataSource 数据源最大连接数:" + druidDataSource.getMaxActive());
            System.out.println("druidDataSource 数据源初始化连接数:" + druidDataSource.getInitialSize());
            //关闭连接
            connection.close();
        }
  • 相关阅读:
    第11周学习进度条
    人月神话阅读笔记03
    人月神话阅读笔记02
    第10周学习进度条
    对各团队的评价意见
    第九周学习进度条
    《构建之法阅读笔记05》
    站立会议10
    第十一周学习进度
    cnblogs.com的用户体验
  • 原文地址:https://www.cnblogs.com/yilichentu/p/13131680.html
Copyright © 2011-2022 走看看