使用JDBC的默认配置

  • 导数据库场景依赖和数据库驱动

    //导入数据库场景依赖
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jdbc</artifactId>
    </dependency>
    
    //数据库驱动
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
  • 导入场景依赖后,分析自动配置类

    1)数据源自动配置类是:DataSourceAutoConfiguration
    2)通过修改boot配置文件中的spring.datasource,可以配置数据库中的各个属性
    3)因为场景依赖中默认引入了Hikari的依赖,所以springboot底层默认支持HikariDataSource
        前提是引入了Hikari依赖且容器中没有配置其他的数据源。
    4)因为场景依赖中默认引入了JdbcTemplate依赖,所以也有JdbcTemplate的自动配置类
        叫JdbcTemplateAutoConfiguration,所以我们可以在dao层中直接自动引用JdbcTemplate
        JdbcTemplate的属性设置可以通过修改boot的配置文件spring.jdbc进行设置

配置Druid连接池

  • 手动配置Druid的各个功能

    • 导入Druid依赖

      <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>druid</artifactId>
          <version>1.1.8</version>
      </dependency>
    • 配置自定义Druid数据源

      /*
      	配置druid数据源
      	这会导致底层默认使用的HikariDataSource无效,因为
      		@ConditionalOnMissingBean(DataSource.class)
      	@ConfigurationProperties("spring.datasource")的意思是
      	使得DruidDataSource中各个属性与配置文件中的spring.datasource进行绑定
      */
      @ConfigurationProperties("spring.datasource")
      @Bean
      public DataSource dataSource(){
          DruidDataSource dataSource = new DruidDataSource();
          return dataSource;
      }
      //以上方式,就可在容器中注册druid数据库连接池并使用
    • 配置druid的内置监控页面

      1)配置druid监控功能,即向容器中加入StatViewServlet
      	/*配置druid的监控页功能*/
          @Bean
          public ServletRegistrationBean statViewServlet(){
          StatViewServlet statViewServlet = new StatViewServlet();
          ServletRegistrationBean<StatViewServlet> servletRegistrationBean = 
              new ServletRegistrationBean<>(statViewServlet,"/druid/*");
          return servletRegistrationBean;
      }
      2)DruidDataSource中开启监控
      	DruidDataSource dataSource = new DruidDataSource();
      	//开启druid的监控功能
      	dataSource.setFilters("stat");
    • 配置监控页中的Web应用

      /*配置WebStatFilter用于采集web-jdbc关联监控的数据*/
      @Bean
      public FilterRegistrationBean webStatFilter(){
          WebStatFilter webStatFilter = new WebStatFilter();
          FilterRegistrationBean<WebStatFilter> webStatFilterFilterRegistrationBean = 
              new FilterRegistrationBean<>(webStatFilter);
          webStatFilterFilterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));
          //排除掉静态资源和监控页的访问监控
      	webStatFilterFilterRegistrationBean.
      		addInitParameter("exclusions","*.js,*.jpg,*.css,/druid/*");
          return webStatFilterFilterRegistrationBean;
      }
    • 配置监控页中的防火墙

      //直接在DruidDataSource中设置
      DruidDataSource dataSource = new DruidDataSource();
      //开启druid的监控功能和防火墙功能
      dataSource.setFilters("stat,wall");
    • 配置监控页的账号和密码

      /*配置druid的监控页功能*/
      @Bean
      public ServletRegistrationBean statViewServlet(){
          StatViewServlet statViewServlet = new StatViewServlet();
          ServletRegistrationBean<StatViewServlet> servletRegistrationBean = 
              new ServletRegistrationBean<>(statViewServlet,"/druid/*");
          //增加监控页的账号密码
          servletRegistrationBean.addInitParameter("loginUsername","万一");
          servletRegistrationBean.addInitParameter("loginPassword","123765");
          return servletRegistrationBean;
      }
      //以上就是手动向容器中注册druid的各个功能组件
  • 使用官方的starter场景依赖

    • 导入druid的starter场景依赖

      <!--
      	druid_starter
      	在该场景依赖中会导入druid的依赖以及各种自动配置类
      -->
      <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>druid-spring-boot-starter</artifactId>
          <version>1.1.17</version>
      </dependency>
    • 导入场景依赖后,分析其中的自动配置类

      1)核心自动配置类,DruidDataSourceAutoConfigure
      2)该类上依赖了两个属性文件,DruidStatProperties.class(spring.datasource.druid)
      	DataSourceProperties.class(spring.datasource)
      3)该自动配置类上导入了以下几个配置类
      	DruidSpringAopConfiguration.class
      		其作用是作用是配置监控页中的spring监控(监控springBean的)
      		其中属性的绑定是通过spring.datasource.druid.aop-patterns进行设置
      	DruidStatViewServletConfiguration.class,监控页的配置
      		通过修改spring.datasource.druid.stat-view-servlet属性进行设置
      	DruidWebStatFilterConfiguration.class,配置监控页中的Web应用
      		通过修改spring.datasource.druid.web-stat-filter属性进行设置
      	DruidFilterConfiguration.class,所有druid自己filter的配置
      		通过修改下面配置进行设置对应功能
      		spring.datasource.druid.filter.stat
      		spring.datasource.druid.filter.config
      		spring.datasource.druid.filter.encoding
      		spring.datasource.druid.filter.slf4j";
      		"spring.datasource.druid.filter.log4j";
      		"spring.datasource.druid.filter.log4j2";
      		"spring.datasource.druid.filter.commons-log";
      		"spring.datasource.druid.filter.wall";
      		"spring.datasource.druid.filter.wall.config";
    • 使用druid场景依赖后,我们可以直接通过boot的配置从而配置监控页的各个功能

      spring:
        datasource:
          url: jdbc:mysql://localhost:3306/wechat?
                serverTimezone=GMT&useSSL=false&characterEncoding=utf-8
          username: root
          password: 123765
          driver-class-name: com.mysql.cj.jdbc.Driver
      
          druid:
      #      开启监控和防火墙功能
            filters: stat,wall
      
      #      设置单个filter功能细节
            filter:
              wall:
                config:
                  drop-table-allow: false
      
      #      监控页的配置
            stat-view-servlet:
              enabled: true
              login-username: 万一
              login-password: 8008208820
      
      #      配置监控页中的Web应用
            web-stat-filter:
              enabled: true
              url-pattern: /*
              exclusions: '*.js,*.jpg,*.css,/druid/*'
      
      #      开启监控页中的spring监控功能,监控spring这个包下的所有组件
            aop-patterns: world.keyi.boot.*