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

版权声明:博客对我来说是记忆的笔记和知识的分享~非常感谢博客大神的帮助,若有无意侵权,请您联系我,谢谢^_^!转载请声明出处: https://blog.csdn.net/qq_36698956/article/details/86494873

前言

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

操作实例

1)、使用idea创建应用

在这里插入图片描述
在这里插入图片描述
选中JPA MySql及Web模块
在这里插入图片描述

可以看到pom.xml文件:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>5.1.25</scope>
</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:
在这里插入图片描述

  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访问数据

在这里插入图片描述

2)、访问页面查看结果

在这里插入图片描述

SpringBoot - druid配置

1. maven依赖

在这里插入图片描述

<!--引入日志框架,否者启动时找不到-->
<dependency>
	<groupId>Repository.org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-logging</artifactId>
	<version>1.5.9.RELEASE</version>
</dependency>
<!--引入druid数据源-->
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>druid</artifactId>
	<version>1.1.8</version>
</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. 配置类写好后测试属性是否注入

在这里插入图片描述

启动debug模式查看参数是否注入:
在这里插入图片描述

5.页面监控查看

访问 http://localhost:8080/druid, 使用上面配置的账号密码登陆
在这里插入图片描述
在这里插入图片描述

使用以上的接口访问,druid监控中会显示访问的sql:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_36698956/article/details/86494873