zoukankan      html  css  js  c++  java
  • Springboot 2.x 使用 Druid 数据源

    一、Druid 数据源

    访问Druid github 官方地址: https://github.com/alibaba/druid 

    拖到最后,可以找到 Druid 使用的相关文档

    二、如何使用 Druid 数据源

    2.1、引入 Maven 依赖

    <dependency>
    	<groupId>com.alibaba</groupId>
    	<artifactId>druid</artifactId>
    	<version>1.1.21</version>
    </dependency>

    2.2、自定义配置类,并且往容器中注入 DruidDataSource 组件

    @Configuration
    public class DruidConfig {
        
        @Bean
        public DruidDataSource dataSource() {
            DruidDataSource druid = new DruidDataSource();
            druid.setUsername("root");
            druid.setPassword("root");
            druid.setUrl("jdbc:mysql://localhost:3306/jdbcdemo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC");
            druid.setDriverClassName("com.mysql.cj.jdbc.Driver");
    
            return druid;
        }
    }

    2.3、测试类

    @SpringBootTest
    class DatasourceApplicationTests {
        // 更换为 Druid 数据源
        @Autowired
        DataSource dataSource;
        // 默认配置了 JdbcTemplate
        @Autowired
        JdbcTemplate jt;
    
        @Test
        void contextLoads() {
            System.out.println("现在的数据源是: " + dataSource.getClass());
            System.out.println("默认配置了: " + jt.getClass());
            List<Map<String, Object>> maps = jt.queryForList("select * from user");
            System.out.println(maps);
        }
    }
    

    2.4、测试结果

    从上面的例子中我们发现,我们并未在 application.properties 中配置任何信息,为什么新加入的数据源就起效了呢?

    三、Druid 配置原理

    我们在 Springboot 的 DataSourceAutoConfiguration 类中可以看到如下声明

    也就是只要我向 IOC 容器中注入了 DataSource ,那么 Springboot 就不会再导入 Hikari、Tomcat 等数据源,并且它会从容器中找到 DataSource ,然后使用该数据源.

    从上面的数据源配置类中看到,一个数据源能设置的属性还是非常多的,如果都写在代码里面,会让整个代码显得很臃肿,并且如果我们需要修改某一个属性的值时,必须要改动代码才有效,这样就很不合理,那么怎么改进呢?我们可以将其写入 application.properties 中,只需要使用 @ConfigurationProperties注解就可以了

    // 配置类
    @Configuration
    public class DruidConfig {
    
        @Bean
    	// 将 application.properties 中以 spring.dataSource 开头的配置项的值赋值给 DruidDataSource 中对应的属性
    	// 例如 spring.datasource.username=root 就等价于给 dataSource 这个对象的 username 属性赋值
        @ConfigurationProperties(prefix="spring.datasource")
        public DruidDataSource dataSource() {
            DruidDataSource druid = new DruidDataSource();
            return druid;
        }
    }
    
    // application.properties 配置文件内容
    # 用户名
    spring.datasource.username=root
    # 密码
    spring.datasource.password=root
    # mysql 数据库 URL
    spring.datasource.url=jdbc:mysql://localhost:3306/jdbcdemo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    # mysql 驱动 (mysql 8.x 版本的使用 com.mysql.cj.jdbc.Driver
    # 5.x 版本的使用的是 com.mysql.jdbc.Driver
    # 使用 spring.datasource.driver-class-name 也是一样的,点击这个属性,会跳到同一个位置
    spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
    
    # 进行数据库链接池的配置,数据库最小维持连接数
    spring.datasource.dbcp2.min-idle=1
    # 数据库初始化提供的连接数
    spring.datasource.dbcp2.initial-size=1
    # 数据库最大维持连接数
    spring.datasource.dbcp2.max-total=1
    # 等待连接获取的最大超时时间

    注意:我这里的 application.properties 中并没有使用 spring.datasource.type 来指定数据源的类型,因为数据源是我们手动注入到 IOC 容器中的,如果是 starter 方式引入 Druid 数据源,则需要该属性来指定

    # 配置当前要使用的数据源的操作类型
    # spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
    

      

    四、开启 Druid 监控相关的功能

    具体可以参考: https://github.com/alibaba/druid/wiki/常见问题

    按照自己的需求来配置对应的功能

    例如下面的配置

    @Configuration
    public class DruidConfig {
    
        @Bean
        @ConfigurationProperties(prefix = "spring.datasource")
        public DruidDataSource dataSource() {
            DruidDataSource druid = new DruidDataSource();
            return druid;
        }
    
        @Bean
        // Druid 内置提供了一个 StatViewServlet 用于展示 Druid 的统计信息
        public ServletRegistrationBean statViewServlet() {
            ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(
                    new StatViewServlet(), "/druid/*");
    
            HashMap<String, Object> map = new HashMap<>();
            map.put("loginUsername", "admin");
            map.put("loginPassword", "admin");
            //map.put("resetEnable", true);
            map.put("allow", "");
            servletRegistrationBean.setInitParameters(map);
            return servletRegistrationBean;
        }
    
        //2、配置一个 web 监控的 filter
        @Bean
        public FilterRegistrationBean webStatFilter() {
            FilterRegistrationBean bean = new FilterRegistrationBean();
            bean.setFilter(new WebStatFilter());
            Map<String, String> initParams = new HashMap<>();
            initParams.put("exclusions", "*.js,*.css,/druid/*");
            bean.setInitParameters(initParams);
            bean.setUrlPatterns(Arrays.asList("/*"));
            return bean;
        }
    }

    配置完成之后,浏览器访问: http://localhost:8080/druid/

    便会来到登录页面,输入我们配置的 用户名/密码

    Sign in 登录跳转到主页

  • 相关阅读:
    HBase 解决HBase Client无法连接远程HBase Server问题
    HBase的介绍与安装教程(CentOS下单机版安装、hbase shell基本用法)
    SpringBoot 使用Phoenix操作HBase教程2(使用JdbcTemplate)
    HBase Phoenix的安装使用教程1(基本介绍、安装部署)
    InfluxDB时序数据库的安装使用教程2(安装部署、命令行基本用法)
    SpringBoot 使用hbaseclient操作HBase教程1(基本用法)
    SpringBoot 使用hbaseclient操作HBase教程2(过滤器Filter)
    HBase Phoenix的安装使用教程3(SCHEMA的启用、操作、关闭)
    C#遍历enum类型
    arcengine 矢量要素编辑(转载)
  • 原文地址:https://www.cnblogs.com/xiaomaomao/p/14304089.html
Copyright © 2011-2022 走看看