springboot与数据访问之jdbc

springboot与数据访问之jdbc

 

 

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

springboot与数据访问之jdbc

 

 

springboot与数据访问之jdbc

 

 

添加依赖,

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

   <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>

 

编写配置文件:

springboot与数据访问之jdbc

 

 

效果:
?    默认是用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、

 

自动配置datasource的源码:

springboot与数据访问之jdbc

 

 springboot与数据访问之jdbc

 

 

 

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

    @Autowired
    DataSource dataSource;

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

测试结果

springboot与数据访问之jdbc

 

 

 

 

 

 

 

测试出现错误:

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();
        }

    }

 

源码中还有一个累

springboot与数据访问之jdbc

 

 

作用:

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

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

只需要:

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

再配置文件中添加:

schema: classpath*:schema.sql 即可


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

springboot与数据访问之jdbc

 

 

简单使用一下:

@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);
    }

}

 

 

springboot与数据访问之jdbc

 

 高级配置---使用druid数据源

 

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

可以通过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

测试能否切换:

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

springboot与数据访问之jdbc

 

 

 

数据源的其他配置;

springboot与数据访问之jdbc

 

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

springboot与数据访问之jdbc

 

 

debug模式看看

springboot与数据访问之jdbc

 

 

这时候需要我们自己创建配置类

 

springboot与数据访问之jdbc

 

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

springboot与数据访问之jdbc

 

 

测试一下:

会报错

springboot与数据访问之jdbc

 

 加入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

springboot与数据访问之jdbc

 

 

 

接下来配置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;
    }

}

 

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

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

springboot与数据访问之jdbc

 

 结果

springboot与数据访问之jdbc

 

 

测试一个查询看看

springboot与数据访问之jdbc

 

 

可以再后台查看

springboot与数据访问之jdbc

 

springboot与数据访问之jdbc

上一篇:数据库候选码


下一篇:JDBC事务管理