SpringBoot项目开发常用技术整合

目录
  • 1 创建一个springboot demo
    • 1.1 创建Restful接口
  • 2 接口返回通用JSON对象
    • 2.1 构建通用返回对象JSONResult
    • 2.2 使用Jackson
  • 3 SpringBoot开发环境热部署
  • 4 资源文件属性配置
    • 4.1 资源文件中的属性配置与映射到实体类
    • 4.2 Server和Tomcat配置(详细配置参考Gitee)
  • 5 SpringBoot整合模板引擎
    • 5.1 集成freemarker
    • 5.2 集成thymeleaf
      • 5.2.1 集成i18n属性配置
  • 6 全局捕获异常
  • 7 集成mybatis以及分页
    • 7.1 mybatis-generator的使用
    • 7.2 tkmybatis的一些用法
  • 8 声明式事务支持
  • 9 集成Redis
  • 10 集成定时功能
  • 11 异步任务
  • 12 配置拦截器

1 创建一个springboot demo

pom.xml添加springboot相关依赖。

1.1 创建Restful接口

springmvc构造并且返回一个json对象:

  • 在类上加@Controller注解
  • 在方法上加@ResponseBody

springboot构造并且返回一个json对象:

  • 在类上加@RestController注解(@RestController = @Controller + @ResponseBody)

2 接口返回通用JSON对象

2.1 构建通用返回对象JSONResult

参考gitee代码

public class JSONResult {
    private Integer status; // 响应状态
    private String msg; // 响应消息
    private Object data; // 数据

    /*静态工厂方法*/
    public static JSONResult build(Integer status, String msg, Object data) {
        return new JSONResult(status, msg, data);
    }

    public static JSONResult ok(Object data) {
        return new JSONResult(data);
    }
}

2.2 使用Jackson

使用Jackson对象pojo对象属性进行处理,例如隐藏、格式化输出、默认值。

public class User {

    private String name;

    @JsonIgnore
    private String password;
    private Integer age;
    @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss", locale = "zh", timezone = "GMT+8")
    private Date birthday;

    @JsonInclude(JsonInclude.Include.NON_NULL)
    private String desc;
}

3 SpringBoot开发环境热部署

devtools可以实现页面热部署(即页面修改后会立即生效,可以直接在application.properties文件中配置spring.thymeleaf.cache=false来实现),实现类文件热部署(类文件修改后不会立即生效),实现对属性文件的热部署。
即devtools会监听classpath下的文件变动,并且会立即重启应用(发生在保存时机),注意:因为其采用的虚拟机机制,该项重启是很快的 。

(1)base classloader (Base类加载器):加载不改变的Class,例如:第三方提供的jar包。
(2)restart classloader(Restart类加载器):加载正在开发的Class。
为什么重启很快,因为重启的时候只是加载了在开发的Class,没有重新加载第三方的jar包。

默认情况下,/META-INF/maven,/META-INF/resources,/resources,/static,/templates,/public这些文件夹下的文件修改不会使应用重启,但是会重新加载(devtools内嵌了一个LiveReload server,当资源发生改变时,浏览器刷新)。

依赖

<!--热部署-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <!-- optional=true, 依赖不会传递, 该项目依赖devtools;
        之后依赖boot项目的项目如果想要使用devtools, 需要重新引入 -->
    <optional>true</optional>
</dependency>

配置

#热部署生效
spring.devtools.restart.enabled=true
#设置重启的目录
spring.devtools.restart.additional-paths=src/main/java
#classpath目录下的WEB-INF文件夹内容修改不重启
spring.devtools.restart.exclude=WEB-INF/**
#spring.devtools.restart.exclude=static/**,public/**

如果IDEA devtools热部署没有生效,进行以下操作。

  1. 开启自动编译:Files——Settings——Build,Execution,Deployment——Compiler
  2. 使用shift+ctrl+alt+/,选择Registry。

4 资源文件属性配置

4.1 资源文件中的属性配置与映射到实体类

// com.lzp.opensource.name=lzp

@Configuration
@1(prefix = "com.lzp.opensource")
@PropertySource(value = "classpath:resource.properties")
public class Resource {
    private String name;
    private String website;
    private String language;
}

4.2 Server和Tomcat配置(详细配置参考Gitee)

server.port=8088
server.tomcat.uri-encoding=UTF-8

5 SpringBoot整合模板引擎

5.1 集成freemarker

添加依赖、配置,准备好前端页面放到配置dir目录下。测试代码:

/**
 * 测试向页面注入属性
 *
 * @param modelMap
 * @return
 */
@RequestMapping("/index")
public String index(ModelMap modelMap) {
    modelMap.addAttribute("resource", resource);
    return "freemarker/index";
}

/**
 * 测试多层路径,不需要加后缀
 *
 * @return
 */
@RequestMapping("/center")
public String center() {
    return "freemarker/center/center";
}

5.2 集成thymeleaf

############################################################
# thymeleaf 静态资源配置
############################################################
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.content-type=text/html
# 关闭缓存, 即时刷新, 上线生产环境需要改为true
spring.thymeleaf.cache=false

## 设置静态文件目录,js、css等
spring.mvc.static-path-pattern=/static/**

内容包含:

  • 对象属性获取与页面属性设置 th:id
  • html内容替换 th:text/utext
  • 根元素设置 th:object
  • 超链接 th:href
  • form th:action="@{/th/postform}"
  • 语法:比较、循环遍历、switch

5.2.1 集成i18n属性配置

i18n对程序来说,在不修改内部代码的情况下,能根据不同语言及地区显示相应的界面。

############################################################# i18n 资源配置############################################################spring.messages.basename=i18n/messages# 缓存时间 单位 sspring.messages.cache-duration=1spring.messages.encoding=UTF-8

指定目录下配置属性

roles.manager=managerroles.superadmin=lzp

6 全局捕获异常

页面跳转形式:接口直接返回一个页面ModelAndView。

ajax形式:返回统一响应对象,前端解析对象获取数据。

统一返回异常的形式

@ControllerAdvicepublic class ExceptionErrorHandler {    /**     * 异常跳转页面     */    public static final String ERROR_VIEW = "error";    @ExceptionHandler(value = Exception.class)    public Object errorHandler(HttpServletRequest request,                               HttpServletResponse response,                               Exception e) throws Exception {        // 后台打印日志        e.printStackTrace();        if (isAjax(request)) {            // 返回ajax响应            return JSONResult.errorException(e.getMessage());        } else {            // 返回页面            ModelAndView mav = new ModelAndView();            mav.addObject("exception", e);            mav.addObject("url", request.getRequestURL());            // 把错误页面返回给前端,而不是使用springboot自带的页面            mav.setViewName(ERROR_VIEW);            return mav;        }    }    /**     * 判断请求是否是ajax请求     *     * @param httpRequest     * @return     */    public static boolean isAjax(HttpServletRequest httpRequest) {        return (httpRequest.getHeader("X-Requested-With") != null                && "XMLHttpRequest"                .equals(httpRequest.getHeader("X-Requested-With").toString()));    }}

7 集成mybatis以及分页

7.1 mybatis-generator的使用

  1. 添加mybatis、mysql、数据源、tkmybatis、pagehelper依赖。如果用hikari,默认支持不需要引用依赖。
  2. 添加application.properties相关配置。
  3. 配置generatorConfig.xml pojo、mapper、xml、表等
  4. 使用GeneratorDisplay生成文件。

Application添加mapper扫描配置

//扫描 mybatis mapper 包路径@MapperScan(basePackages = "com.lzp.mapper")// 扫描指定位置@ComponentScan({"com.lzp", "org.n3r.idworker"})@SpringBootApplicationpublic class Application {    public static void main(String[] args) {        SpringApplication.run(Application.class, args);    }}

7.2 tkmybatis的一些用法

使用通用Mapper可以节省很多代码

public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T> {}public interface SysUserMapper extends MyMapper<SysUser> {}

调用

userMapper.insert(user);userMapper.updateByPrimaryKeySelective(user);@Overridepublic List<SysUser> queryUserList(SysUser user) {    // 条件    Example example = new Example(SysUser.class);    Example.Criteria criteria = example.createCriteria();    criteria.andLike("username", "%" + user.getUsername() + "%");    return userMapper.selectByExample(example);}

8 声明式事务支持

@Transactional(propagation = Propagation.REQUIRED)@Overridepublic void saveUserTransactional(SysUser user) {    userMapper.insert(user);    int i = 1 / 0;    user.setIsDelete(1);    userMapper.updateByPrimaryKeySelective(user);}

REQUIRED 如果没有事务,则创建事务;已有则加入到当前事务。

SUPPORTS 如果已有事务,加入当前事务;没有也可以。

9 集成Redis

添加pom和application.properties配置

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

使用StringRedisTemplete操作数据。

10 集成定时功能

// 启动定时操作
@EnableScheduling
public class Application {...}

调度类

@Component
public class SchedulerJob {

    @Scheduled(fixedRate = 3000)
    public void printLog() {
        System.out.println("每隔3秒");
    }

    @Scheduled(cron = "0/1 * * * * ?")
    public void printLogInterval() {
        System.out.println("每隔1秒");
    }
}

11 异步任务

Spring Boot异步执行使用场景

  • 发送短信、发送邮件
  • App消息推送
  • 节省运维淩晨发布任务时间提供效率
//开启异步调用方法
@EnableAsync
public class Application {

结合

@Component
public class AsyncTask {

    @Async
    public Future<Boolean> doTask11() throws Exception {
        long start = System.currentTimeMillis();
        Thread.sleep(1000);
        long end = System.currentTimeMillis();
        System.out.println("任务1耗时:" + (end - start) + "毫秒");
        return new AsyncResult<>(true);
    }
}

12 配置拦截器

拦截器,访问某个请求前后进行拦截。

注册配置

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Bean
    public UserTokenInterceptor userTokenInterceptor() {
        return new UserTokenInterceptor();
    }

    /**
     * 注册拦截器
     *
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(userTokenInterceptor())
                .addPathPatterns("/testIntercept")
                .addPathPatterns("/hello")
                .addPathPatterns("/shopcart/add")
    }
}

UserTokenInterceptor参考详细代码。

代码地址

源码地址:https://gitee.com/dtyytop/initialdemo

到此这篇关于SpringBoot项目开发常用技术整合的文章就介绍到这了,更多相关SpringBoot开发内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot +Vue开发考试系统的教程

    一.考试系统简介 新鲜出炉的一款SpringBoot +Vue的考试系统,支持多种题型:选择题.多选题.判断题.填空题.综合题以及数学公式.支持在线考试,教师在线批改试卷. 二.项目架构 后端技术栈 SpringBoot: SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的创建.运行.调试.部署等. Mybatis: 一个持久层的框架,与数据库进行交互,将数据持久化到关系型数据库中 Shiro: 一个功能强大且易于使用的Java安全框架,进行身份验证

  • SpringBoot+Vue开发之Login校验规则、实现登录和重置事件

    一.Login校验规则 1.校验规则写法可参考Element-ui官网文档 https://element.eleme.cn/#/zh-CN/component/form 2.Login.vue页面  <template> <div class="login_container"> <!-- 登录块 --> <div class="login_box"> <!-- 头像 --> <div class=

  • 使用SpringBoot开发Restful服务实现增删改查功能

    在去年的时候,在各种渠道中略微的了解了SpringBoot,在开发web项目的时候是如何的方便.快捷.但是当时并没有认真的去学习下,毕竟感觉自己在Struts和SpringMVC都用得不太熟练.不过在看了很多关于SpringBoot的介绍之后,并没有想象中的那么难,于是开始准备学习SpringBoot. 在闲暇之余的时候,看了下SpringBoot实战以及一些大神关于SpringBoot的博客之后,开始写起了我的第一个SpringBoot的项目.在能够对SpringBoot进行一些简单的开发Re

  • 浅谈SpringBoot项目如何让前端开发提高效率(小技巧)

    社会分工越来越细,对于工程类研发来说,全栈是越来越少了.这是时代的进步,也是个体的悲哀. 今天要分享的小技巧,或许能够大幅提高你的开发效率.你可以用省下来的时间打个盹,浏览个美女写真什么的. 本篇文章涉及的知识点有 Swagger 为了文档 Nginx 为了效率 众所周知, java 项目的启动速度就像沙子里走路.要是你的前端模块也很大,有一大堆 node_modules , SpringBoot 会毫不犹豫的给你打包进去.每次修改前端页面,都需要打包才能调试,真是等的媳妇都跑了.可惜的是, v

  • SpringBoot开发案例之配置Druid数据库连接池的示例

    前言 好久没有更新Spring Boot系列文章,你说忙么?也可能是,前段时间的关注点也许在其他方面了,最近项目中需要开发小程序,正好采用Spring Boot实现一个后端服务,后面会把相关的代码案例分享出来,不至于大家做小程序后端服务的时候一头雾水. 在Spring Boot下默认提供了若干种可用的连接池(dbcp,dbcp2, tomcat, hikari),当然并不支持Druid,Druid来自于阿里系的一个开源连接池,它提供了非常优秀的监控功能,下面跟大家分享一下如何与Spring Bo

  • springboot对接支付宝支付接口(详细开发步骤总结)

    最近需要对接支付宝的支付接口,官方文档写得内容有点分散,整理了一下发布出来,用作记录,同时也希望对不了解情况的人有所帮助,这里以电脑端的网页支付为例. 开发主要分为三个步骤:一.生成私钥公钥.二.建立应用.三.沙箱环境.四.接口开发 一.生成私钥公钥 生成密钥的官网文档:官网文档 官方文档讲得已经很详细,按照步骤来即可,记得保存好公钥与私钥,下面需要用到 二.建立应用 1.首先进入蚂蚁金服开放平台的首页,通过支付宝账户登录,登录的时候要选择一个身份,这个选自研开发者吧,反正后面可以拓展 2.在蚂

  • 使用maven开发springboot项目时pom.xml常用配置(推荐)

    如题,记录一些平常开发用的pom文件细节 1.使用parent父类引用,解决依赖版本号不确定时自动匹配的问题 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.7.RELEASE</version> <relativePath/>

  • SpringBoot项目开发常用技术整合

    目录 1 创建一个springboot demo 1.1 创建Restful接口 2 接口返回通用JSON对象 2.1 构建通用返回对象JSONResult 2.2 使用Jackson 3 SpringBoot开发环境热部署 4 资源文件属性配置 4.1 资源文件中的属性配置与映射到实体类 4.2 Server和Tomcat配置(详细配置参考Gitee) 5 SpringBoot整合模板引擎 5.1 集成freemarker 5.2 集成thymeleaf 5.2.1 集成i18n属性配置 6

  • Android项目开发常用工具类LightTaskUtils源码介绍

    目录 LightTaskUtils概述 LightTaskUtils截图 LightTaskUtils源码 版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl LightTaskUtils概述 LightTaskUtils是一个轻量级的线程管理工具. LightTaskUtils截图 LightTaskUtils截图如下: LightTaskUtils源码 LightTaskUtils源码如下: import android.os.Handl

  • SpringBoot项目打包war包时无法运行问题的解决方式

    目录 序 SpringBoot项目打包 jar 包 和 tomcat 包 实际问题及解决方式 问题 解决方法 end 序 现实的情况下遇见过该问题刚好记录一下! SpringBoot项目打包 首先默认创建的maven springBoot项目进行代码的clean 和 install进行项目打包的时候默认是使用jar 包的形式进行打包的,如果需要进行war 包打包部署的话就需要修改相应的 数据内容了 jar 包 和 tomcat 包 jar 包打完之后进行部署的时候使用 java -jar 的启动

  • springboot项目整合注册功能模块开发实战

    目录 工程简介 准备工作: 第一步:注册功能的实现 1.1持久层的设计 1.2注册功能-业务层 1.3控制层 1.4前端页面的设计 注册功能实现完成 工程简介 准备工作: 项目所用到的html界面以及sql文件链接如下: 百度网盘获取地址: 链接: https://pan.baidu.com/s/1CcbQWP8RNqyy3ieib1osLg?pwd=t1qu 提取码: t1qu 第一步:注册功能的实现 1.1持久层的设计 1.1.1规范需要执行的SQL语句 1.用户的注册工作,相当于在做数据的

  • Springboot项目与vue项目整合打包的实现方式

    我的环境 * JDK 1.8  * maven 3.6.0  * node环境 1.为什么需要前后端项目开发时分离,部署时合并? 在一些公司,部署实施人员的技术无法和互联网公司的运维团队相比,由于各种不定的环境也无法做到自动构建,容器化部署等.因此在这种情况下尽量减少部署时的服务软件需求,打出的包数量也尽量少.针对这种情况这里采用的在开发中做到前后端独立开发,打包时在后端springboot打包发布时将前端的构建输出一起打入,最后只需部署springboot的项目即可,无需再安装nginx服务器

  • SpringBoot使用Atomikos技术整合多数据源的实现

    Atomikos是一个为Java平台提供增值服务的并且开源类事务管理器,如果将事务统一注册到Atomikos中,则可以统一管理.常用于后台管理系统的多数据库操作. 多数据源的划分方式 方式: a.按包名 b.按注解区分 Springboot默认集成事务,只主要在方法上加上@Transactional即可,不需要开启@EnableTransactionManagement注解 如果多个数据库,则每个方法都需要单独设置事务管理器@Transactional(transactionManager =

  • SpringBoot项目整合FastDFS+Nginx实现图片上传功能

    目录 FastDFS概述 Fastdfs原理 安装Fastdfs 整合Nginx模块 安装Nginx SpringBoot整合Fastdfs FastDFS概述 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适合以文件为载体的在线服务,如相册网站.视频网站等等. FastDFS为互联网量身定制,充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用.高性能等指标,使用Fa

  • springBoot项目集成quartz开发定时任务案例及注意事项

    目录 quartz下载.安装 实战案例 常见问题及解决方案 quartz下载.安装 Quartz是完全由java开发的一个开源的任务日程管理系统,任务进度管理器就是一个在预先确定的时间到达时,负责执行(或者通知)一段程序或功能的系统,即定时执行某个任务.Quartz用一个小Java库发布文件(.jar文件),这个库文件包含了所有Quartz核心功能.这些功能的主要接口(API)是Scheduler接口.它提供了简单的操作,例如:将任务纳入日程或者从日程中取消,开始/停止/暂停日程进度. 上图是q

  • SpringBoot Web开发之系统任务启动与路径映射和框架整合

    目录 本章概要 启动系统任务 CommandLineRunner ApplicationRunner 整合Servlet与Filter和Listener 路径映射 本章概要 启动系统任务 整合 Servlet.Filter 和 Listener 路径映射 启动系统任务 有一些特殊的任务需要在系统启动时执行,例如配置文件加载,数据库初始化等操作.如果没有使用 Spring Boot ,这些问题可以在 Listener 中解决.Spring Boot 对此提供了两种解决方案 CommandLineR

随机推荐