与数据库相关的有三个重要部分,数据源、事物、JDBC
一、整合JDBC场景
1.1基本配置与测试
首先,导入jdbc启动器、驱动:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
配置文件:
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://192.168.66.11:3306/db2010?useUnicode=true&characterEncoding-utr-8&useSSL=false
username: root
password: 1qaz@WSX
测试:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
@SpringBootTest(classes = Application.class)
class JDBCTest {
@Autowired
private JdbcTemplate jdbcTemplate;
@Test
void contextLoads() {
List<Map<String, Object>> maps = jdbcTemplate.queryForList("select * from payment ");
Iterator<Map<String, Object>> iterator = maps.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
如果对于自动配置的原理已经懂了,看到这里就结束了。
为什么要自己导入驱动呢?因为springboot也不清楚我们到底是mysql还是oracle的驱动,或者其它的驱动。
导入了场景启动器之后,我们发现,数据源、事物、JDBC都有了:
1.2自动配置分析
首先,找到jdbc自动配置的位置:
自动配置相关的类:
- DataSourceAutoConfiguration 数据源相关
- DataSourceTransactionManagerAutoConfiguration 事物相关
- JdbcTemplateAutoConfiguration JDBC相关
DataSourceAutoConfiguration 数据源自动配置分析:
所以,jdbc启动器场景默认使用的是Hikari
数据源
当然,我们也可以通过type来改变这个默认数据源,我们点进去这个源码看一看:
而在DataSourceProperties
中,这个配置类就映射了配置文件:
二、自定义整合druid数据源
druid官网:https://github.com/alibaba/druid
先引入依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.17</version>
</dependency>
配置类:
@Configuration
public class MyDataSourceConfig {
//默认的自动配置是容器中没有数据源,才会配置默认的
//现在我们这里自己配置了数据源,那么,使用的就是我们自己配置的
//配置文件绑定spring.datasource,这里面配置的会和类中的属性绑定
@ConfigurationProperties("spring.datasource")
@Bean
public DataSource getDataSource(){
DruidDataSource druidDataSource = new DruidDataSource();
return druidDataSource;
}
}
测试一下,看看我们使用的是不是druid数据源
@Slf4j
@SpringBootTest(classes = Application.class)
public class DruidDatasourceTest {
@Autowired
private DataSource dataSource;
@Test
void test(){
log.info(String.valueOf(dataSource.getClass()));
}
}
结果是druid数据源。
配置监控页面
/**
* 配置druid监控页功能
*/
@Bean
public ServletRegistrationBean statViewServlet(){
StatViewServlet statViewServlet = new StatViewServlet();
ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<>(statViewServlet,"/druid/*");
return registrationBean;
}
访问:http://localhost:8080/druid/index.html
开启SQL监控和防火墙
spring:
datasource:
#开启SQL监控、防火墙
filters: stat,wall
@Autowired
private JdbcTemplate jdbcTemplate;
@RequestMapping("sql")
public void sql(){
List<Map<String, Object>> maps = jdbcTemplate.queryForList("select * from payment ");
Iterator<Map<String, Object>> iterator = maps.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
发送一个该请求:http://localhost:8080/sql
我们再来看监控页面,这时sql监控和防火墙就有数据了:
配置web应用监控
/**
* 配置web应用监控
*/
@Bean
public FilterRegistrationBean webStatFilter(){
WebStatFilter webStatFilter = new WebStatFilter();
FilterRegistrationBean<WebStatFilter> registrationBean = new FilterRegistrationBean<>(webStatFilter);
//拦截路径
registrationBean.setUrlPatterns(Arrays.asList("/*"));
registrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.css,*.ico,/druid/*" );
return registrationBean;
}
再次发送/sql请求,我们看web应用监控页和uri监控,发现都有数据了:
配置登录账号密码
三、使用start整合druid数据源
先将上面自定义整合中的相关配置了注释掉
基础用法
引入依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.17</version>
</dependency>
配置:
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://192.168.66.11:3306/db2010?useUnicode=true&characterEncoding-utr-8&useSSL=false
username: root
password: 1qaz@WSX
druid:
aop-patterns: com.learning.springboot.* #监控SpringBean
filters: stat,wall # 底层开启功能,stat(sql监控),wall(防火墙)
stat-view-servlet: # 配置监控页功能
enabled: true
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的详细配置
slow-sql-millis: 1000
logSlowSql: true
enabled: true
wall:
enabled: true
config:
drop-table-allow: false
自动配置分析
1、由源码可以看到,我们的这个配置类是在springboot官方的数据源配置类之前生效的
2、配置文件还是和之前的前缀一样,使用的是springboot官方的配置
3、监控相关配置