一、基本使用
导入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:容器中放入相关的组件
配置文件:
引入启动器之后,就可以使用配置文件进行配置,可以查看官方文件进行配置