SpringBoot学习之路(X2)- JDBC数据访问、自动配置原理、druid数据源配置

SpringBoot学习之路(X2)- JDBC数据访问、自动配置原理、druid数据源配置

    • 前言
    • 操作实例
      • 1)、使用idea创建应用
      • 2)、连接数据库
        • 1、创建yml文件(此次使用yml配置连接数据库)
      • 3)、效果
    • 自动配置原理
    • 请求访问数据库
      • 1)、创建controller 使用JdbcTemplate访问数据
      • 2)、访问页面查看结果
    • SpringBoot - druid配置
      • 1. maven依赖
      • 2. yml 配置(或者druid.properties)
      • 3. 创建Druid配置类
      • 4. 配置类写好后测试属性是否注入
      • 5.页面监控查看

前言

对于数据访问层,无论是SQL还是NOSQL,Spring Boot默认采用整合
Spring Data的方式进行统一处理,添加大量自动配置,屏蔽了很多设置。引入
各种xxxTemplate,xxxRepository来简化我们对数据访问层的操作。对我们来
说只需要进行简单的设置即可。我们将在数据访问章节测试使用SQL相关、
NOSQL在缓存、消息、检索等章节测试。
– JDBC
– MyBatis
– JPA

操作实例

1)、使用idea创建应用

SpringBoot学习之路(X2)- JDBC数据访问、自动配置原理、druid数据源配置_第1张图片
SpringBoot学习之路(X2)- JDBC数据访问、自动配置原理、druid数据源配置_第2张图片
选中JPA MySql及Web模块
SpringBoot学习之路(X2)- JDBC数据访问、自动配置原理、druid数据源配置_第3张图片

可以看到pom.xml文件:

<dependency>
	<groupId>org.springframework.bootgroupId>
	<artifactId>spring-boot-starter-jdbcartifactId>
dependency>
<dependency>
	<groupId>mysqlgroupId>
	<artifactId>mysql-connector-javaartifactId>
	<scope>5.1.25scope>
dependency>

这里的mysql我选用5.1.25版本

2)、连接数据库

1、创建yml文件(此次使用yml配置连接数据库)

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://192.168.2.17:3306/student01
    driver-class-name: com.mysql.jdbc.Driver

3)、效果

默认是用org.apache.tomcat.jdbc.pool.DataSource作为数据源;
数据源的相关配置都在DataSourceProperties里面;

自动配置原理

org.springframework.boot.autoconfigure.jdbc:
SpringBoot学习之路(X2)- JDBC数据访问、自动配置原理、druid数据源配置_第4张图片

  1. 参考DataSourceConfiguration,根据配置创建数据源,默认使用Tomcat连接池;可以使用spring.datasource.type指定自定义的数据源类型;
  2. SpringBoot默认可以支持;
org.apache.tomcat.jdbc.pool.DataSource、HikariDataSource、BasicDataSource、
  1. 自定义数据源类型
/**
 * Generic DataSource configuration.
 */
@ConditionalOnMissingBean(DataSource.class)
@ConditionalOnProperty(name = "spring.datasource.type")
static class Generic {

   @Bean
   public DataSource dataSource(DataSourceProperties properties) {
       //使用DataSourceBuilder创建数据源,利用反射创建响应type的数据源,并且绑定相关属性
      return properties.initializeDataSourceBuilder().build();
   }

}
  1. DataSourceInitializer:ApplicationListener;
    作用:

     1)、runSchemaScripts();运行建表语句;
    
     2)、runDataScripts();运行插入数据的sql语句;
    

默认只需要将文件命名为:

schema-*.sql、data-*.sql
默认规则:schema.sql,schema-all.sql;
可以使用   
	schema:
      - classpath:department.sql
      指定位置
  1. 操作数据库:自动配置了JdbcTemplate操作数据库

请求访问数据库

1)、创建controller 使用JdbcTemplate访问数据

SpringBoot学习之路(X2)- JDBC数据访问、自动配置原理、druid数据源配置_第5张图片

2)、访问页面查看结果

SpringBoot学习之路(X2)- JDBC数据访问、自动配置原理、druid数据源配置_第6张图片

SpringBoot - druid配置

1. maven依赖

SpringBoot学习之路(X2)- JDBC数据访问、自动配置原理、druid数据源配置_第7张图片


<dependency>
	<groupId>Repository.org.springframework.bootgroupId>
	<artifactId>spring-boot-starter-loggingartifactId>
	<version>1.5.9.RELEASEversion>
dependency>

<dependency>
	<groupId>com.alibabagroupId>
	<artifactId>druidartifactId>
	<version>1.1.8version>
dependency>

2. yml 配置(或者druid.properties)

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://192.168.2.17:3306/student01
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
#	-----------------------------------
# 	以下为druid连接池属性说明    
#   初始化大小,最小,最大
    initialSize: 5
    minIdle: 5
    maxActive: 20
#	配置获取连接等待超时的时间   
    maxWait: 60000
#	配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
    timeBetweenEvictionRunsMillis: 60000
# 	配置一个连接在池中最小生存的时间,单位是毫秒
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true
#   配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙  
    filters: stat,wall,log4j
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true  
#   通过connectProperties属性来打开mergeSql功能;慢SQL记录
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 	合并多个DruidDataSource的监控数据
	#spring.datasource.useGlobalDataSourceStat=true

3. 创建Druid配置类

导入druid数据源
@Configuration
public class DruidConfig {

    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druid(){
       return  new DruidDataSource();
    }

    //配置Druid的监控
    //1、配置一个管理后台的Servlet
    @Bean
    public ServletRegistrationBean statViewServlet(){
    	//org.springframework.boot.context.embedded.ServletRegistrationBean提供类的进行注册.
        ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
        Map<String,String> initParams = new HashMap<>();
		//登录查看信息的账号密码.
        initParams.put("loginUsername","admin");
        initParams.put("loginPassword","123456");
        //白名单 值也可以是:127.0.0.1
        initParams.put("allow","");//默认就是允许所有访问
        //IP黑名单 (存在共同时,deny优先于allow) : 如果满足deny的话提示:Sorry, you are not permitted to view this page.
        initParams.put("deny","192.168.15.21");
		//是否能够重置数据.
        initParams.put("resetEnable","false");
        bean.setInitParameters(initParams);
        return bean;
    }


    //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);
		//添加过滤规则. Arrays.asList将数组转成集合
        bean.setUrlPatterns(Arrays.asList("/*"));

        return  bean;
    }
}

4. 配置类写好后测试属性是否注入

SpringBoot学习之路(X2)- JDBC数据访问、自动配置原理、druid数据源配置_第8张图片

启动debug模式查看参数是否注入:
SpringBoot学习之路(X2)- JDBC数据访问、自动配置原理、druid数据源配置_第9张图片

5.页面监控查看

访问 http://localhost:8080/druid, 使用上面配置的账号密码登陆
SpringBoot学习之路(X2)- JDBC数据访问、自动配置原理、druid数据源配置_第10张图片
SpringBoot学习之路(X2)- JDBC数据访问、自动配置原理、druid数据源配置_第11张图片

使用以上的接口访问,druid监控中会显示访问的sql:
SpringBoot学习之路(X2)- JDBC数据访问、自动配置原理、druid数据源配置_第12张图片

你可能感兴趣的:(▼,微服务,  ●,Spring,Boot,springboot)