SpringBoot简单实现JDBC及Druid

本文介绍了如何在SpringBoot项目中使用JDBC进行简单数据库操作,并详细阐述了集成Druid数据源的步骤,包括添加依赖、配置以及监控功能的实现。通过Druid,不仅可以监控数据库访问性能,还能替换传统连接池并提供数据库密码加密和SQL执行日志等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、SpringBoot-JDBC

简单的用springboot实现一下jdbc

这里我加了jdbc依赖及web依赖

		<!--    JDBC-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!--    web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

配置文件链接数据库
如果数据库是8以上记得加上时区

# 连接数据库
spring:
  datasource:
    username: root
    password: 123
    url: jdbc:mysql://localhost:3306/test?userUnicode=true&charcterEncoding=utf-8&serverTimezone=UTC
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource

在这里你可以测试一下自己默认数据源及数据库连接

 @Autowired
    DataSource dataSource;
    @Test
    void contextLoads() throws SQLException {
        //  查看默认数据源:class com.zaxxer.hikari.HikariDataSource
        System.out.println(dataSource.getClass());
        //  获得数据库连接
        Connection connection = dataSource.getConnection();

        System.out.println(connection);

        connection.close();
    }

创建controller类
不需要实体类就直接实现CRUD

package com.java.ym.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Map;

/**
 * @Author: YuMi
 * @Date: 2020/11/5 17:07
 * ----------------------
 * @Comments:
 */
@RestController
public class JDBCController {

    @Autowired
    JdbcTemplate jdbcTemplate;

    //  查询数据库所有的信息
    //  没有实体类,怎么获取 Map
    @GetMapping("/user")
    public List<Map<String,Object>> userList(){
        String sql = "select * from user";
        List<Map<String, Object>> mapList = jdbcTemplate.queryForList(sql);
        return mapList;
    }

    @GetMapping("addUser")
    public String addUser(){
        String sql = "insert into user(name,pwd) values('林叽霸','123')";
        jdbcTemplate.update(sql);
        return "update-ok";
    }
}

测试结果
在这里插入图片描述

在这里插入图片描述
这里我就测试一个查询

二、Druid

首先导入依赖:

<!--    druid-->
        <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.1</version>
        </dependency>

        <!--    log4j-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>

这里就用上面的示例:
先看一下配置,在原有的配置上加了一些druid配置

# 连接数据库
spring:
  datasource:
    username: root
    password: 123
    url: jdbc:mysql://localhost:3306/test?userUnicode=true&charcterEncoding=utf-8&serverTimezone=UTC
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource

    # springboot默认是不注入这些属性,需要自己绑定
    # 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

    # 配置监控统计拦截器的filter,stat:监控统计,log4j,日志记录,wall:防御sql注入
    # 如果允许时报错,java.lang.ClassNotFoundException:org.apache.log4j.Priority
    # 则导入log4j依赖即可,Maven地址:https://mvnrepository.com/artifact/log4j/log4j
    filters: stat,wall,log4j
    maxPoolPreparedStatementPerConnectionSize: 20
    userGlobalDataSourceStat: true
    connectionProperties: druid.stat.mergeSql=trueldruid.stat,slowSqlMillis=500

创建配置类

package com.java.ym.config;

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.servlet.Filter;
import javax.sql.DataSource;
import java.util.HashMap;

/**
 * @Author: YuMi
 * @Date: 2020/11/5 18:54
 * ----------------------
 * @Comments:   配置类
 */
@Configuration
public class DruidConfig {

    //  配置文件包前缀
    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druidDataSource(){
        return new DruidDataSource();
    }


    //  后台监控
    //  因为springboot内置了servlet容器,所以才没有web.xml,替代方法ServletRegistrationBean
    @Bean
    public ServletRegistrationBean registrationBean(){

        ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");

        //  后台需要有人登录,账号密码配置
        HashMap<String, String> initMap = new HashMap<>();

        //  增加配置(登录key是固定的loginUsername && loginPassword)
        initMap.put("loginUsername","admin");
        initMap.put("loginPassword","123");

        //  允许谁能访问,如果为空的话谁都能访问,也可以指定谁访问
        initMap.put("allow","");

        //  禁止谁能访问  initMap.put("","");


        //  设置初始化参数
        registrationBean.setInitParameters(initMap);
        return registrationBean;
    }

    //  filter 过滤器
    @Bean
    public FilterRegistrationBean filterRegistrationBean(){
        FilterRegistrationBean<Filter> filterRegistrationBean = new FilterRegistrationBean<>();
        filterRegistrationBean.setFilter(new WebStatFilter());

        //  可以过滤哪些请求?
        HashMap<String, String> filterMap = new HashMap<>();
        //  这些不进行统计
        filterMap.put("exclusions","*.js,*.css,/druid/*");

        filterRegistrationBean.setInitParameters(filterMap);

        return filterRegistrationBean;
    }
}

运行后:
在这里插入图片描述
在这里可是试着用其他密码登录试试(当然是登不进去的),因为在配置类里指定了用户名和密码.
进去后页面就是这样子
在这里插入图片描述
在这里插入图片描述
在这里就可以看到我上面刚才执行的查询语句被监控到了,还有一个增加,再试一下。
在这里插入图片描述
在这里可以看到我执行的增加方法也被监控到了.

**Druid可以做什么? **

  1. 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。
  2. 替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。
  3. 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。
  4. SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。

Druid在线工具:https://tool.oschina.net/apidocs/apidoc?api=druid0.26

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值