SpringBoot开发常用技术整合

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);
    }
}
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

z.haoui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值