springboot-数据访问之jdbc

官网的starthttps://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using-boot-starter

 

 

 

 

111添加依赖,包括spring-boot-starter-jdbc,mysql-connector-java 驱动器

 使用初始化器的时候自己选择依赖

复制代码
   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency> 
        <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
         </dependency>
复制代码

 

222编写配置文件:写入数据源的四要素:username password  url  driver-class-name

 

 

复制代码
效果:
​    默认是用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、
复制代码

 注意:org.apache.tomcat.jdbc.pool.DataSource是springboot自带和默认使用的数据源

DataSourceProperties的位置在package org.springframework.boot.autoconfigure.jdbc;

 

自动配置datasource的源码:

 

 

 

333编写测试,测试是否连接成功:

复制代码
    @Autowired
    DataSource dataSource;

    @Test
    void contextLoads() throws SQLException {
        System.out.println(dataSource.getClass());
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
        connection.close();
    }
复制代码

测试结果

 

 

测试出现错误:

java.sql.SQLNonTransientConnectionException: CLIENT_PLUGIN_AUTH is required

这是由于快速生成的mysql-connector-java的版本问题,改为5.1.37就行

 

 

源码中有个自定义数据源的自动配置:

//使用DataSourceBuilder创建数据源,利用反射创建响应type的数据源,并且绑定相关属性

复制代码
    @Configuration(proxyBeanMethods = false)
    @ConditionalOnMissingBean(DataSource.class)
    @ConditionalOnProperty(name = "spring.datasource.type")
    static class Generic {

        @Bean
        DataSource dataSource(DataSourceProperties properties) {
            return properties.initializeDataSourceBuilder().build();
        }

    }
复制代码

 

@@@@@启动的时候自动通过sql文件进行执行sql语句

源码中还有一个

 

作用:

​        1)、runSchemaScripts();运行建表语句;

​        2)、runDataScripts();运行插入数据的sql语句;

只需要配置spring.datasource.schema=sql文件的路径

下面是格式:

复制代码
schema-*.sql、data-*.sql
默认规则:schema.sql,schema-all.sql;
可以使用   
    schema:
      - classpath:department.sql
      指定位置
复制代码

配置文件中添加:

schema: classpath*:schema.sql 即可


555操作数据库。会自动配置jdbcTemplate操作数据库

 

简单使用一下:

复制代码
@Controller
public class Controllerhello {
    @Autowired
    JdbcTemplate jdbcTemplate;

    @RequestMapping("/hello")
    @ResponseBody
    public Map<String,Object> map(){
        List<Map<String,Object>> maps= jdbcTemplate.queryForList("select  * from weibo_user ");
        return maps.get(1);
    }

}
复制代码

 结果:

 

自定义第三方数据源----使用druid数据源

步骤:

11引入依赖
22加入数据源的配置
33编写数据源配置类

默认配置文件如果没有配置,则使用默认的数据源

可以通过type去指定数据源类型

2222修改配置文件:加入spring.datasource.type: 指定的数据源

复制代码
spring:
  datasource:
    username: root
    password: 2004
    url: jdbc:mysql://129.204.3.133:3306/students
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
复制代码

测试能否切换:

运行我们之前的测代码就行

 

数据源的其他相关的配置;

 

#最大等待连接中的数量,设置为0为没有限制
spring.datasource.tomcat.max-idle=10

#最大活动连接数
spring.datasource.tomcat.max-active=50

#最大等待毫秒数,单位ms,超过时间会出错误
spring.datasource.tomcat.max-wait=10000

#数据库连接池初始化连接数
spring.datasource.tomcat.initial-size=6

 

 

 图中的黄颜色是不能绑定到数据源当中的,因为没有和下面这个文件里面的属性对象

 

 

debug模式看看

 

因为这是第三方数据源,这时候需要我们自己创建配置类

 33333创建配置类,返回数据源

 

 由于配置文件里面的属性再DruidDataSource累里面有对应的属性,所以可以绑定:

 

 

测试一下:

会报错

 

 加入log4j依赖看看

复制代码
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.13.3</version>
</dependency>
复制代码

重新debug

 

 

配置Druid监控

 

复制代码
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;


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

    //配置Druid监控
    //配置管理后台Servlet
    @Bean
    public ServletRegistrationBean statViewServlet(){
        ServletRegistrationBean bean =new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
        Map<String,String> initParams = new HashMap<>();
        //下面的参数都是 StatViewServlet extends ResourceServlet两个累里面的属性
        initParams.put("loginUsername","admin");
        initParams.put("loginPassword","admin");
//        initParams.put("allow","");//默认允许所有
//        initParams.put("deny","192.212.121.12");
        bean.setInitParameters(initParams);
        return bean;
    }

    //配置一个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");
        bean.setInitParameters(initParams);
        bean.setUrlPatterns(Arrays.asList("/*"));
        return bean;
    }

}
复制代码

 

上面的后台和过滤都是自带的监控

注意:这里一定要加星号,

 结果

 

 

测试一个查询看看

 

 

可以再后台查看

 

posted @ 2020-08-09 21:04  小丑quan  阅读(425)  评论(0)    收藏  举报