spring boot 数据库访问

一、基本使用

导入jdbc启动器:

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

可以看下,导入后自动导入了那些包:

可以看到,没有导入驱动,主要是因为不清楚接下来需要操作说明数据库,所有没有导入。

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

spring boot会自动导入 版本为8的驱动,使用者需要根据自己的实际情况对版本进行维护。

修改版本的2种方式:

  • 直接引入版本,使用maven的就近原则
  • 重新声明<mysql.version>,使用maven的属性就近原则 

二、自动配置原理

  • DataSourceAutoConfiguration 数据源的自动配置
    • 修改数据源相关配置,配置文件中修改 spring.datasource 开头的即可
    • 数据库连接池,当没有配置的时候会自动配置
    • 底层配置好的数据源是 HikariDataSource 连接池
  • DataSourceTransactionManagerAutoConfiguration 事务自动配置
  • JdbcTemplateAutoConfiguration 数据库操作配置
  • JndiDataSourceAutoConfiguration JNDI自动配置
  • XADataSourceAutoConfiguration  分布式事务相关配置 

三、使用Druid数据源

在spring boot中使用第三方功能的时候,无非以下两种方式

  • 自定义方式,引入jar包和相关配置(在spring boot中可以使用配置类)
  • 寻找改功能的spring boot 启动器(starter) jar包

引入druid的依赖:

 <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.17</version>
        </dependency>

配置数据源和监控,在数据源中set的相关属性,在配置文件中一样可以处理:

package com.example.demo.conf;

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;

@Configuration
public class MyDataSourceConfig {

    /**
     * 默认数据源自动配置,是判断容器中没有数据源才用默认的
     * @return
     */
    @ConfigurationProperties("spring.datasource")//跟spring.datasource 中的属性绑定
    @Bean
    public DataSource dataSource() throws Exception{
        //很多属性
        DruidDataSource druidDataSource = new DruidDataSource();
        //加入监控功能,防火墙
        druidDataSource.setFilters("stat,wall");
        return druidDataSource;
    }

    /**
     * 增加Druid监控servlet
     * @return
     */
    @Bean
    public ServletRegistrationBean statViewServlet(){
        StatViewServlet statViewServlet = new StatViewServlet();
        ServletRegistrationBean<StatViewServlet> statViewServletServletRegistrationBean = new ServletRegistrationBean<>(statViewServlet, "/druid/*");
        statViewServletServletRegistrationBean.addInitParameter("loginUsername", "admin");
        statViewServletServletRegistrationBean.addInitParameter("loginPassword", "admin");
        return statViewServletServletRegistrationBean;
    }

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

}

访问项目的druid监控主页:

四、使用druid启动器 - starter

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.17</version>
        </dependency>

自动配置:

自动配置类中导入了如下相关类:

  • DruidSpringAopConfiguration.class:监控spring 组件的
  • DruidStatViewServletConfiguration.class:开启监控页
  • DruidWebStatFilterConfiguration.class:配置了web url 监控
  • DruidFilterConfiguration.class:容器中放入相关的组件

配置文件:

 引入启动器之后,就可以使用配置文件进行配置,可以查看官方文件进行配置

猜你喜欢

转载自blog.csdn.net/liming0025/article/details/120925382