目录
解释 :@ConfigurationProperties(prefix = "spring.datasource")
一、SpringBoot整合MyBatis
1.坐标
【属于第三方的启动器 :要version】
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
解释:
此时的项目:已经集成了 web启动器 mysql数据源 test单元测试
Spring
SpringMVC
Mybatis
2、写配置yml文件
----- 配置数据源[基础版的]
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC
username: root
password: SunXinR
3.写代码:
实体类 dao
第一种写法 :---加上@Mapper
新注解
有点类似repository注解【持久层 只注入】
Mapper映射器不仅要有spring做注入【运行时所需要的类】
还需要在mybatis容器做注册
所以:现在用@Mapper替换@repository
第二种写法: ---@MapperScan
以包为单元做:批量注入+注册
位置:不在映射器上
而是在启动类上 :@MapperScan(basePackages = {"com.xin.dao"})
或者:@MapperScan("com.xin.springboot_redis02.dao")
eg:
@SpringBootApplication
@MapperScan(basePackages = {"com.xin.dao"})
public class SpringbootData02MybatisApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootData02MybatisApplication.class, args);
}
}
这两个注解选一个就好,不用都写上
4.测试
注意:
按照规范:
表字段下划线,实体类属性小驼峰
在yml中配置:开启自动驼峰映射【默认是false】
type-aliases-package:起别名【映射时不用写完全限定名】
mybatis:
configuration:
map-underscore-to-camel-case: true
type-aliases-package: com.xin.pojo
测试:
@SpringBootTest
class SpringbootData02MybatisApplicationTests {
@Autowired(required = false)
AccountMapper accountMapper;
@Test
void contextLoads() {
List<Account> accounts = accountMapper.findAll();
for (Account account : accounts) {
System.out.println(account);
}
}
}
二、SpringBoot切换数据源
SpringBoot自带的数据源
@SpringBootTest
class SpringbootDataDruidApplicationTests {
@Autowired
DataSource dataSource;
@Test
public void source() throws SQLException {
System.out.println(dataSource.getClass());
System.out.println(dataSource.getConnection());
}
}
结果:
更换数据源--druid
1、坐标
<!-- druid坐标 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.8</version>
</dependency>
2、yml文件配置
在dataSource同级目录下
配置type属性: 作用:给当前数据源一个类型
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC
username: root
password: SunXinR
type: com.alibaba.druid.pool.DruidDataSource
3、配置类
@Configuration
public class DruidConfig {
//注入数据源
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource(){
return new DruidDataSource();
}
}
解释 :@ConfigurationProperties(prefix = "spring.datasource")
在项目的某个@Configuration配置类中通过@Bean注解在某个方法上:
作用:使用配置文件中相应的属性初始化该bean的属性
作用详细解释:
1.加载了yml文件中spring.datesource的相关信息,
2.并将内容获取过来,
3.关联给DruidDateSource的实例对象对应的属性
4.将数据源注入容器
总体流程:
springBoot就会去查看:
当你注入了数据源,
此时:它提供的HiKariDataSource不在是唯一的数据源时,会使用人工注入的数据源【实现替换】
三、Druid监控平台
引言:
项目上线后,如何去监控项目的运行状态
原来:日志【不是很智能】
解决:继承第三方的监控平台【会生成对应的UI界面,可以看到系统的运行状态】
为项目上线之后作准备
解释Druid监控平台:
应用:数据库+Dao层的监控
解释:Druid毕竟是数据源,智能体现在数据访问层
能帮我们统计出那一时刻那个用户执行那个Sql,查询结果,并发量,查询结果,从而作SQL优化
步骤:
1. 根据第二大点更换数据源为Druid数据源
2.在yml文件中配置过滤器,否则不生效
解释:
stat是做统计的过滤器
wall防火墙过滤器
3、配置类【和web有呼应】
servlet三大组件的第二种配置方式
3.1、注入数据源
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource(){
return new DruidDataSource();
}
3.2、servlet的注册类【制作监控页面】
Druid提供了好了一个StatViewServlet:
作用:画监控页面的
需要提供:Servlet的账号密码
我们只需要做配置 ---只能用@Bean
@Bean
public ServletRegistrationBean registrationBean(){
//1.创建servlet注册类
ServletRegistrationBean<StatViewServlet> servletRegistrationBean = new ServletRegistrationBean<StatViewServlet>();
//2.创建制作页面的servlet
StatViewServlet statViewServlet = new StatViewServlet();
//3.绑定servlet
servletRegistrationBean.setServlet(statViewServlet);
servletRegistrationBean.setUrlMappings(Arrays.asList("/druid/*"));
//4.参数绑定
Map<String,String> maps = new HashMap<String,String>();
maps.put(StatViewServlet.PARAM_NAME_USERNAME,"admin");
maps.put(StatViewServlet.PARAM_NAME_PASSWORD,"123");
maps.put(StatViewServlet.PARAM_NAME_ALLOW,"");//白名单
maps.put(StatViewServlet.PARAM_NAME_DENY,"192.168.0.12");//黑名单
servletRegistrationBean.setInitParameters(maps);
return servletRegistrationBean;
}
3.3、过滤器的注册类【编写过滤规则】
WebStatFilter过滤器:
作用:做统计
要告诉它什么请求需要过滤器【统计请求的访问次数等等】
什么资源不做过滤,不做统计
WebStatFilter过滤器是做统计的
@Bean
public FilterRegistrationBean filterRegistrationBean(){
FilterRegistrationBean<WebStatFilter> bean = new FilterRegistrationBean<WebStatFilter>();
bean.setFilter(new WebStatFilter());
//所有请求进行监控处理
bean.setUrlPatterns(Arrays.asList("/*"));
Map<String, String> initPrams = new HashMap<>();
//添加不需要忽略的格式信息
initPrams.put(WebStatFilter.PARAM_NAME_EXCLUSIONS, "*.js,*.css,/druid/*");
bean.setInitParameters(initPrams);
return bean;
}
四、 SpringBoot监控
SpringBoot自带监控功能Actuator
步骤:
1.坐标【监控平台】
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2.启动项目
访问项目路径【http://localhost:8080/actuator】即可