SpringBoot简介
1、微框架,与Spring4一起诞生
2、可以快速上手,整合了一些子项目(开源框架或者第三方开源库),SpringBoot已经做好封装,只要引入就能使用
3、可以依赖很少的配置就十分快速地搭建并且运行项目
@Controller和@RestController的区别:
@RestController注解相当于@ResponseBody+@Controller
1)如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面或者html,配置的视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return里的内容
2)如果需要返回到指定页面,则需要用@Controller配合视图解析器InternalResourceViewResolver才行
注意:如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解
SpringBoot特点
1、基于Spring,使开发者快速入门,门槛很低(Spring全家桶一员)
2、SpringBoot可以创建独立运行的应用而不依赖于容器,不需要打包成war包,可以放入tomcat中直接运行
3、提供maven极简配置,缺点是会引入很多不需要的包
4、根据项目来依赖,从而配置Spring,需要什么配什么
5、提供可视化的相关功能,方便监控,比如性能,应用的健康程度等
6、简化配置,不用再看过多的xml
7、为微服务SpringCloud铺路,SpringBoot可以整合很多各式各样的框架来构建微服务,比如dubbo,thrift等等
SpringBoot使用场景
1、有Spring的地方都行
2、J2EE/web项目
3、微服务
SpringBoot热部署(devtools)
1、实现页面热部署(即页面修改后立即生效,这个可以直接在application.properties文件中配置spring.thymeleaf.cache=false)
2、实现类文件热部署(类文件修改后不会立即生效),实现对属性文件的热部署,即devtools会监听classpath下的文件变动,并且会立即重启应用(发生在保存时机)
注意:因为其采用的虚拟机机制,该项重启是很快的
(1)base classloader(Base类加载器):加载不改变的Class,例如:第三方提供的jar包
(2)restart classloader(Restart类加载器):加载正在开发的Class
为什么重启很快,因为重启的时候只是加载了在开发的Class,没有重新加载第三方的jar包
#application.properties配置文件
#热部署生效
spring.devtools.restart.enabled=true
#页面热部署
#关闭缓存,即时刷新
#spring.freemarker.cache=false
spring.thymeleaf.cache=true
#类文件热部署
#设置重启的目录,添加那个目录的文件需要restart
spring.devtools.restart.additional-paths=src/main/java
SpringBoot配置全局的异常捕获
1、页面跳转形式
2、ajax形式
3、统一返回异常的形式(同时兼容web与ajax)
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = Exception.class)
public Object defaultExceptionHandler(HttpServletRequest request,
HttpServletResponse response, Exception e) throws Exception {
e.printStackTrace();
if(isAjax(requset)) {
//BaseResponse是高复用服务器返回对象
return new BaseResponse(e.getStatus(), e.getMessage());
} else {
ModelAndView mav = new ModelAndView();
mav.addObject("exception", e);
mav.addObject("url", request.getRequsetURL());
mav.setViewName(EROOR_VIEW);
return mav;
}
}
public static boolean isAjax(HttpServletRequest request {
return (httpRequest.getHeader("X-Requested-With") != null
&& "XMLHttpRequest"
.equals(httpRequest.getHeader("X-Requested-With").toString));
}
}
SpringBoot整合mybatis
1、使用generatorConfig生成mapper以及pojo(可省略该步骤)
2、pom.xml中需要引入相关依赖
3、资源文件中对mybatis进行配置
#application.properties配置文件
#配置数据源 使用阿里巴巴的druid数据源
spring.datasource.url=jdbc:mysql://localhost:3306/example
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.druid.initial-size=1
spring.datasource.druid.min-idle=1
spring.datasource.druid.max-active=20
spring.datasource.druid.test-on-borrow=true
spring.datasource.druid.stat-view-servlet.allow=true
#mybatis配置
mybatis.type-aliases-package=com.example.pojo
mybatis.mapper-locations=classpath:mapper/*.xml
#通用Mapper配置
#继承Mapper<T>作为通用Mapper的接口,只要继承MyMapper接口就可以使用基本的增删改查操作了
mapper.mappers=com.example.utils.MyMapper
mapper.not-empty=false
mapper.identity=MYSQL
#分页插件配置
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodArguments=true
pagehelper.params=count=countSql
4、实现基于mybatis的CRUD功能(启动类添加@MapperScan注解:Mapper类扫描)
5、整合mybatis-pagehelper实现分页
开启分页并且传入两个参数(第几页,一页分几条数据):PageHelper.startPage(page, pageSize);
6、自定义mapper的实现
7、引入事务执行回滚
SpringBoot使用事务非常简单,首先在启动类上添加@EnableTransactionManagement注解开启事务支持,然后在访问数据库的Service方法上添加注解@Transactional即可。
@Transactional()参数说明
1)@Transactional 不写参数的情况下,开启事务,方法运行成功提交。运行失败抛出RuntimeException及其子类的时候回滚
2)@Transactional(rollbackFor = Exception.class)将回滚异常的级别提高的Exception级别,一般用该参数,比较稳妥,避免framework级别异常导致的回滚失败
3)@Transactional(propagation = Propagation.NOT_SUPPORTED, readOnly = true)//不开启事务的方法
其他说明
1)@Transactional为org.framework.transactional,而不是javax.transactional
2)一般情况下,事务注解要写在最核心的Service上,而不是Controller
3)可以在类的级别上,说明事务,说明该类下的所有方法都开启事务
SpringBoot整合redis
1、pom.xml中需要引入相关依赖
2、资源文件中对redis进行配置
#redis配置
#redis数据库索引(默认为0)
spring.redis.database=1
#redis服务器地址
spring.redis.host=192.168.1.191
#redis服务器连接端口
spring.redis.port=6379
#redis服务器连接密码(默认为空)
spring.redis.password=
#连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=1000
#连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
#连接池中的最大空闲连接
spring.redis.pool.max-idle=10
#连接池中的最小空闲连接
spring.redis.pool.min-idle=2
#连接超时时间(毫秒)
spring.redis.timeout=0
3、引入redis工具类(SpringBoot使用已封装好的redis工具类RedisTemplate进行操作)
SpringBoot整合定时任务task
1、使用注解@EnableScheduing开启定时任务,会自动扫描
2、定义@Component作为组件被容器扫描执行,给定时任务方法添加@Scheduled注解
例如:@Scheduled(cron="...")
定时任务表达式生成地址:http://cron.qqe2.com
SpringBoot整合异步任务以及使用场景
1、使用注解@EnableAsync开启异步,会自动扫描
2、定义@Component作为组件被容器扫描执行,给异步任务方法添加注解@Async
异步执行使用场景:
1、发送短信;2、发送邮件;3、App消息推送;4、节省运维凌晨发布任务时间提供效率
SpringBoot拦截器的使用
1、使用注解@Configuration配置拦截器
2、继承WebMvcConfigurerAdapter
3、重写addInterceptors添加需要的拦截器地址
@Configuration
public class WebMvcConfigurer extends WebMvcConfigurerAdapter {
@Override
public void addInterceptions(InterceptorRegistry registry) {
//拦截器按照顺序执行
//ExampleInterceptor是自定义的拦截器
registry.addInterceptor(new ExampleInterceptor()).addPathPatterns("/example/**");
super.addInterceptors(registry);
}
}