目录
1.1 数据源的自动配置——HikariDataSource
1.2.4 开启数据源监控功能——StatViewServlet
课程链接:https://www.bilibili.com/video/BV19K4y1L7MT?p=60&spm_id_from=pageDriver
一、sql
1.1 数据源的自动配置——HikariDataSource
1.1.1 导入jdbc
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
starter-data-jdbc帮我们导入了以下依赖

但是官方没有导入数据驱动,因为官方并不知道我们要使用的数据源是什么。
我们以mysql为例,作为数据源驱动导入,如果不指定版本号,官方默认指定的版本为8.0.22
默认版本:<mysql.version>8.0.22</mysql.version>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
1.1.2 分析自动配置
DataSourceAutoConfiguration ——数据源的自动配置。帮我们配置好数据源连接池等
- 1. 如果希望修改数据源相关的配置,修改spring.datasource即可,原因如下图

- 2. 数据库连接池,如果用户自己容器中没有DataSource,官方会为其进行配置。实现代码:
-
@Configuration(proxyBeanMethods = false) @Conditional(PooledDataSourceCondition.class) @ConditionalOnMissingBean({ DataSource.class, XADataSource.class }) //当没有这些组件时 @Import({ DataSourceConfiguration.Hikari.class, DataSourceConfiguration.Tomcat.class, DataSourceConfiguration.Dbcp2.class, DataSourceConfiguration.OracleUcp.class, DataSourceConfiguration.Generic.class, DataSourceJmxConfiguration.class }) protected static class PooledDataSourceConfiguration - 3. 底层配置好的连接池是:HikariDataSource
DataSourceAutoConfiguration源码截图:

DataSourceTransactionManagerAutoConfiguration: 事务管理器的自动配置,帮助我们配置好事务信息

JdbcTemplateAutoConfiguration: JdbcTemplate的自动配置,可以来对数据库进行crud
- 1. 可以修改这个配置项@ConfigurationProperties(prefix = "spring.jdbc") 来修改JdbcTemplate
- 2. @Bean@Primary JdbcTemplate;容器中有这个组件

XADataSourceAutoConfiguration: 分布式事务相关配置

1.1.3 修改配置项
spring:
datasource:
url: jdbc:mysql://localhost:3306/db_account
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
jdbc:
template:
query-timeout: 3
1.1.4 测试
@Slf4j
@SpringBootTest
class Boot05WebAdminApplicationTests {
@Autowired
JdbcTemplate jdbcTemplate;
@Test
void contextLoads() {
Long aLong = jdbcTemplate
.queryForObject("select count(*) from account_tbl", Long.class);
log.info("记录总数:{}",aLong);
}
}
1.2 使用Druid数据源
1.2.1 原因
Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。
Druid提供了WallFilter,它是基于SQL语义分析来实现防御SQL注入攻击的。
Druid提供了Log4jFilter、CommonsLogFilter和Slf4jFilter进行日志记录
Druid提供了多种监测连接泄漏的手段
连接Oracle数据库,打开PSCache,在其他的数据库连接池都会存在内存占用过多的问题,Druid是唯一解决这个问题的连接池。
1.2.2 创建数据源
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.17</version>
</dependency>
1.2.3 编写数据源配置类
@ConfigurationProperties("spring.datasource) ——与yaml中datasource中配置的数据源信息进行绑定,这样数据源的配置信息可以实现不在代码中写死
@Configuration
public class MyDataSourceConfig {
//默认的自动配置是判断容器中没有才会配c@ConditionalonMissin
//与yaml中datasource中配置的数据源信息进行绑定,
//这样数据源的配置信息可以实现不在代码中写死
@ConfigurationProperties("spring.datasource")
@Bean
public DataSource dataSource( ){
DruidDataSource druidDataSource = new DruidDataSource();
return druidDataSource;
}
}
spring:
datasource:
url: jdbc:mysql://localhost:3306/db_account
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
1.2.4 开启数据源监控功能——StatViewServlet
StatViewServlet的用途包括:
- 提供监控信息展示的html页面
- 提供监控信息的JSON API
使用示例
@Configuration
public class MyDataSourceConfig {
//默认的自动配置是判断容器中没有才会配c@ConditionalonMissin
//与yaml中datasource中配置的数据源信息进行绑定,
//这样数据源的配置信息可以实现不在代码中写死
@ConfigurationProperties("spring.datasource")
@Bean
public DataSource dataSource() throws SQLException{
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setFilters("stat"); //开启数据库性能监控
return druidDataSource;
}
/**
配置drukid的监控页功能
*/
@Bean
public ServletRegistrationBean statViewServlet(){
StatViewServlet statViewServlet = new StatViewServlet();
ServletRegistrationBean<StatViewServlet> registrationBean =
new ServletRegistrationBean<>(statViewServlet, "/druid/*");
return registrationBean;
}
}

系统中所有filter:
| 别名 | Filter类名 |
| default | com.alibaba.druid.filter.stat.StatFilter |
| stat | com.alibaba.druid.filter.stat.StatFilter |
| mergeStat | com.alibaba.druid.filter.stat.MergeStatFilter |
| encoding | com.alibaba.druid.filter.encoding.EncodingConvertFilter |
| log4j | com.alibaba.druid.filter.logging.Log4jFilter |
| log4j2 | com.alibaba.druid.filter.logging.Log4j2Filter |
| slf4j | com.alibaba.druid.filter.logging.Slf4jLogFilter |
| commonlogging | com.alibaba.druid.filter.logging.CommonsLog |
1.2.5 官方starter,简化上述操作
引入druid-starter
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.17</version>
</dependency>
配置示例
spring:
datasource:
url: jdbc:mysql://localhost:3306/db_account
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
druid:
aop-patterns: com.atguigu.admin.* #监控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
SpringBoot配置示例
https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
1.3 整合MyBatis操作
1.3.1 使用配置模式引入mybatis
引入步骤:
- 导入mybatis官方starter
- 编写mapper接口。标准@Mapper注解
- 编写sql映射文件并绑定mapper接口
- 在application.yaml中指定Mapper配置文件的位置,以及指定全局配置文件的信息 (建议;配置在mybatis.configuration)
第一步:引入依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
该starter引入的依赖如下:

mybatis的jar包一加载,就会引入MybatisAutoConfiguration等相关配置
分析下MybatisAutoConfiguration:
第二步:指定配置文件以及全局映射文件
mybatis使用时,需要进行相关的配置(可以不写全局;配置文件,所有全局配置文件的配置都放在configuration配置项中即可)。如下:
# 配置mybatis规则
mybatis:
# config-location: classpath:mybatis/mybatis-config.xml #全局配置文件位置
mapper-locations: classpath:mybatis/mapper/*.xml #sql映射文件位置
configuration:
map-underscore-to-camel-case: true
下面是一个全局配置文件的例子。如果不写全局配置文件,相关的配置信息需要在yaml配置文件的mybatis.configuration标签下进行配置即可。:
< ?xml version="1.0" encoding="UTF-8" ?>
< !DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http: //mybatis.org/dtd/ mybatis-3-config.dtd">
<configuration>
<settings>
<!-- 开启驼峰命名,用于数据库字段与实体字段间产生映射关系 -->
<setting name= "mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>
相应的数据库xml文件内容示例:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.atguigu.admin.mapper.AccountMapper">
<select id="getAcct" resultType="com.atguigu.admin.bean.Account">
select * from account_tbl where id=#{id}
</select>
</mapper>
1.3.2 使用注解模式引入mybatis
@Mapper
public interface CityMapper {
@Select("select * from city where id=#{id}")
public City getById(Long id);
}
1.3.3 引入mybatis的最佳实战
- 引入mybatis-starter
- 配置application.yaml中,指定mapper-location位置即可
- 编写Mapper接口并标注@Mapper注解
- 简单方法直接注解方式
- 复杂方法编写mapper.xml进行绑定映射
- @MapperScan("com.atguigu.admin.mapper") 简化,其他的接口就可以不用标注@Mapper注解
1.4 整合 MyBatis-Plus 完成CRUD
1.4.1 介绍
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
建议安装 MybatisX 插件
1.4.2 整合MyBatis-Plus
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
该依赖帮外卖引入了mybatis包以及jdbc包

该依赖为我们引入了如下配置(详见截图):
- MybatisPlusAutoConfiguration 配置类,MybatisPlusProperties 配置项绑定。mybatis-plus:xxx 就是对mybatis-plus的定制
- SqlSessionFactory 已自动配置好。底层是容器中默认的数据源
- mapperLocations 自动配置好。默认值为 classpath*:/mapper/**/*.xml;任意包的类路径下的所有mapper文件夹下任意路径下的所有xml都是sql映射文件。 建议以后sql映射文件,放在 mapper下
- 容器中也自动配置好了 SqlSessionTemplate
- @Mapper 标注的接口也会被自动扫描;建议直接 @MapperScan("com.atguigu.admin.mapper") 批量扫描就行

二、NoSQL
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。
Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
2.1 redis
2.1.1 基本配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
该依赖为我们引入了以下依赖:

通过源码可以看一下官方为我们引入的redis相关配置:
- RedisAutoConfiguration 自动配置类。RedisProperties 属性类 --> spring.redis.xxx是对redis的配置
- 连接工厂是准备好的。LettuceConnectionConfiguration、JedisConnectionConfiguration
- 自动注入了RedisTemplate<Object, Object> : xxxTemplate;
- 自动注入了StringRedisTemplate;k:v都是String
- key:value
- 底层只要我们使用 StringRedisTemplate、RedisTemplate就可以操作redis

2.1.2 连接redis
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 导入jedis-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
spring:
redis:
host:
port: 6379
password:
client-type: jedis
jedis:
pool:
max-active: 10

本文详细介绍了如何在Spring Boot中配置数据源,包括使用HikariDataSource的自动配置,以及切换到Druid数据源的步骤,包括配置Druid数据源、开启监控功能。此外,还讲解了MyBatis的配置模式和注解模式,以及如何整合MyBatis-Plus进行CRUD操作。最后,简要提及了Redis的基本配置和连接。

数据访问&spm=1001.2101.3001.5002&articleId=117826131&d=1&t=3&u=2238e4f422f14be6aa12e94a1acfefc8)
8370

被折叠的 条评论
为什么被折叠?



