JDBCTample方式访问数据库 和使用druid数据源

原先在spring中,配置数据源信息,将数据源导入到jdbctample即可。

再使用springtample


    <bean id="Datasource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="url" value="jdbc:mysql:///user_db"></property>
        <property name="username" value="root"></property>
        <property name="password" value="mysql"></property>
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
    </bean>
 
    <bean id="JdbcTample" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="Datasource"></property>
    </bean>
package com.hxut.rj92.zyk.dao;
 
import com.hxut.rj92.zyk.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
 
import javax.sql.DataSource;
import java.util.Arrays;
import java.util.List;
 
@Component
public class UserdaoImpl implements Userdao{
    @Autowired
 
JdbcTemplate jdbcTemplate;
 
    @Override
    public int add_dao(Student student) {
 
        int a= jdbcTemplate.update(" insert  student values(?,?,?);", new Object[]{student.getName(), (Integer)student.getId(), student.getLoc()});
        return a;
    }
    @Override
 

 在springboot中,只要设置数据源的url 驱动名  用户名 密码等信息,如果ioc中有数据源就使用ioc中的,如果没有默认会使用hikaridatasource数据源,jdbctample自动填充数据源,直接@AutoWired导入即可

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/shixun6.7?useSSL=false
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: mysql
    type: com.zaxxer.hikari.HikariDataSource
#  当查询出错时,等待的秒数 设置jdbctample的属性
  jdbc:
    template:
      query-timeout: 3
package com.atguigui.conntroller;

import com.atguigui.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.sql.ResultSet;
import java.util.List;

//RestController相当于   @Controller +@ResponseBody
@RestController
public class springbootcontroller {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @RequestMapping("/hello")
    public String handele01()
    {

         List<User> users= jdbcTemplate.query("select * from user",new BeanPropertyRowMapper<User>(User.class));
        for(User user:users)
        {
            System.out.println(user);
        }
         return "success";
    }
}

 spring jdbctample方式访问数据库_仰望星空的快乐的博客-CSDN博客

druid数据源

官方文档:

常见问题 · alibaba/druid Wiki · GitHub

1.配置

在springboot中,如果ioc容器中没有数据源,则会使用默认的spring框架自带的hikari数据源

如果ioc容器中有数据源,就会使用该数据源

所以我们要使用自己的数据源,只要设置好数据源相关信息,并放进ioc容器中即可

配置数据源相关信息有两种方式,一种是直接在注册数据源的时候配置好数据源信息


    @Bean
    public DataSource getdatasource() throws SQLException {
        DruidDataSource druidDataSource = new DruidDataSource();
       druidDataSource.setUrl("jdbc:mysql://localhost:3306/cakedemo");
        druidDataSource.setUsername("root");
        druidDataSource.setPassword("mysql");
        druidDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        druidDataSource.setFilters("stat");
        return druidDataSource;
    }

另一种是读取applicationcontext.yaml中的数据源配置信息

    @ConfigurationProperties("spring.datasource")
    @Bean
    public DataSource getdatasource() throws SQLException {
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setFilters("stat");
        return druidDataSource;
    }
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/cakedemo
    username: root
    password: mysql
    driver-class-name: com.mysql.jdbc.Driver

将数据源放进ioc容器后,就会自动使用ioc容器中的数据源

2.开启监控

 官方写的是xml配置方式,需要给一个filters属性值为stat    配置之后自动加载

我们是注解方式,就是设置druidDataSource.setFilters("stat");

所有的druidDataSource.set..  不管是什么属性,都可以在yaml中进行配置

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/cakedemo
    username: root
    password: mysql
    driver-class-name: com.mysql.jdbc.Driver
#      druidDataSource.setFilters("stat,wall");
    filters: stat,wall
    max-active: 12

设置好之后要添加一个servlet,拦截请求,跳转到该监控界面,如下


    @Bean
    public ServletRegistrationBean statViewServlet() {
        //StatViewServlet是druid连接池的监控页面,将它作为servlet拦截后要跳转的界面
        StatViewServlet statViewServlet = new StatViewServlet();
        ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<StatViewServlet>(statViewServlet, "/druid/*");
//因为这个页面有数据库的连接信息,应该保密,所以可以给这个页面添加用户名和密码
        registrationBean.addInitParameter("loginUsername","admin");
        registrationBean.addInitParameter("loginPassword","123");
        return registrationBean;
    }

执行数据库查询语句,在浏览器输入http://localhost:8080/druid/*,就可以看到数据库操作相关的大致信息

3.监控web应用  查看哪一个请求对数据库执行了什么操作(在2的基础上)

哪一个web请求,执行了什么东西(对数据库进行了什么操作),

要统计所有的请求,所以是一个拦截了所有请求的拦截器,但是像.js.css等静态文件不被拦截

这是官方的写法 

 我们就是注册一个拦截器,把官方的   WebStatFilter  配置进拦截器,并设置拦截的url和放行的url

 @Bean
    public FilterRegistrationBean getwebStatFilter() {
        WebStatFilter webStatFilter = new WebStatFilter();
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(webStatFilter);
        filterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));
        filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }

 再次请求时就可以看到请求和数据库访问之间的关系

 4.spring监控   监听某个接口的实现类的访问数据情况(在2的基础上)

   @Bean
    public DruidStatInterceptor druid_stat_interceptor()
    {
        return  new DruidStatInterceptor();
    }
    @Bean
    public BeanTypeAutoProxyCreator druid_type_proxyCreator()
    {
        BeanTypeAutoProxyCreator beanTypeAutoProxyCreator=new BeanTypeAutoProxyCreator();
               //监听的是Indexinterface接口
        beanTypeAutoProxyCreator.setTargetBeanType(Indexinterface.class);
        beanTypeAutoProxyCreator.setInterceptorNames( "druid_stat_interceptor");
        return  beanTypeAutoProxyCreator;
    }

 实现了Indexinterface接口的会显示在上面,没实现就不显示

5.数据库的防火墙  哪些sql语句不能执行,查看哪些数据库的表不能被访问

(在2的基础上)

就是一个wall,在向ioc中添加数据源时添加 wall 即可

 @ConfigurationProperties("spring.datasource")
    @Bean
    public DataSource getdatasource() throws SQLException {
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setFilters("stat,wall");
        return druidDataSource;
    }

7.上面的配置可以简化

在pom.xml中引入 druid -springboot-starter

在application.yaml中配置相关信息即可,注意druid是和哪个标签对齐的,写错了没有提示。

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


    druid:
      aop-patterns: com.atguigu.admin.*
      filters: stat,wall     # stat开启基本的sql监控和显示功能,默认路径是http://localhost:8080/druid/*    wall开启防火墙

      stat-view-servlet:
        enabled: true    #开启sql监控功能,设置用户名和密码,让重置按钮失效
        login-username: admin
        login-password: admin
        resetEnable: false

      web-stat-filter:  # 监控web,哪个链接做了什么数据库操作
        enabled: true
        urlPattern: /*
        exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'


      filter:
        stat:    # 对上面filters里面的stat的详细配置,当超过1000毫秒未相应的查询,当作是慢查询
          slow-sql-millis: 1000
          logSlowSql: true
          enabled: true

        wall:
          enabled: true #开启防火墙
          config:
            drop-table-allow: false  #禁用掉sql删除表的语句

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值