# springbootDemo **Repository Path**: alantop/springboot-demo ## Basic Information - **Project Name**: springbootDemo - **Description**: 该模块记录了springboot在实际应用中的各种demo实例及各种组件的整合实例 为后期springboot项目的开发提供笔记、demo基础 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-01-07 - **Last Updated**: 2022-12-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README [TOC] -------------- springboot基本应用DEMO 该模块记录了springboot在实际应用中的各种demo实例及各种组件的整合实例 为后期springboot项目的开发提供笔记、demo基础 111 # Idea新建项目文件解释、文件哪些可删 image-20210105110149912 ```shell #可删除 HELP.md mvnw mvn.cmd .mvn文件夹 #.gitignore (不用git的话可删除 没影响) 用git做版本控制时 用这个文件控制那些文件或文件夹 不被提交(不用git的话可删除 没影响) .gitignore:分布式版本控制系统git的配置文件,意思为忽略提交 在 .gitingore 文件中,遵循相应的语法,即在每一行指定一个忽略规则。 如:.log、/target/、.idea #HELP.md (**可删除** 没影响) md是一种文档格式 这个就是你项目的帮助文档(**可删除** 没影响) #mvnw:全名是maven wrapper的文件 (**可删除** 没影响) linux上处理mevan版本兼容问题的脚本(**可删除** 没影响) 它的作用是在maven-wrapper.properties文件中记录你要使用的maven版本,当用户执行mvnw clean 命令时,发现当前用户的maven版本和期望的版本不一致,那么就下载期望的版本,然后用期望的版本来执行mvn命令,比如mvn clean命令。 #mvn.cmd:执行mvnw命令的cmd入口 (**可删除** 没影响) windows 上处理mevan版本兼容问题的脚本(**可删除** 没影响) *注:mvnw文件适用于Linux(bash),mvnw.cmd适用于Windows 环境。 #.mvn文件夹:存放mvnw相关文件 存放着maven-wrapper.properties和相关jar包以及名为MavenWrapperDownloader的java文件 #cloud22020.iml (建议保留) 不建议隐藏iml,因为项目名出现中括号是因为iml文件名和项目文件名不一样,需要更改iml文件名,**保持与项目名相同** 有的文件每个导入IDEA的项目都会生成一个项目同名的 .iml文件 用于保存你对这个项目的配置 (删了程序重新导入后还会生成 但由于配置丢失可能会造成程序异常) iml idea 对module 配置信息之意, infomation of module iml是 intellij idea的工程配置文件,里面是当前project的一些配置信息。 iml 文件是IntelliJ IDEA 自动创建的模块文件,用于Java应用开发,存储一些模块开发相关的信息,比如一个Java组件, 插件组件,Maven组件等等, 还可能会存储一些模块路径信息,依赖信息以及别的一些设置。 #.Idea 存放项目的配置信息,包括历史记录,版本控制信息等。其实可以不用理它。 如果觉得看着麻烦的话,我们可以配置隐藏。点击file->Settings->File types,在右下角的Ignore files and folders中可以将.idea隐藏,但是似乎不可以隐藏.iml文件。 #pom.xml:项目对象模型(核心重要) pom.xml主要描述了项目的maven坐标,依赖关系,开发者需要遵循的规则,缺陷管理系统,组织和licenses,以及其他所有的项目相关因素,是项目级别的配置文件。 ``` # idea中项目复制 有的时候需要相同的环境,但是重新开始建又很耗时间,所以很多人想到复制。没错,cv是一种快速的开发方式,在idea中复制项目只需要三步,然就能用,在此记录下。 第一步:复制项目文件夹并改名 image-20210105144027990 第二步:修改.iml文件名称(此处可以不用操作:第三步中修改modules保存即可自动修改该文件名称及内容) iml idea 对module 配置信息之意, infomation of module iml是 intellij idea的工程配置文件,里面是当前project的一些配置信息。 iml 文件是IntelliJ IDEA 自动创建的模块文件,用于Java应用开发,存储一些模块开发相关的信息,比如一个Java组件, 插件组件,Maven组件等等, 还可能会存储一些模块路径信息,依赖信息以及别的一些设置。 进入复制后的目录: image-20210105144206591 然后直接在idea中导入。 **第三步:在idea中修改modules的name和project信息;设置好modules以后,项目下的.iml即更新成功** image-20210105144310475 image-20210105144401398 注:如业务需要,包名也需要进行调整(可以不用改) image-20210105144654690 注:如配置了devtools,此时需要重新配置一下idea自动编译(具体步骤参考:[SpringBoot配置devtools实现热部署](https://www.cnblogs.com/liu2-/p/9118393.html)) ```shell #简单方便起见,整合简洁的复制操作 #第一步 springbootBase 复制并且改名 #第二步 .idea .mvn文件夹及.iml文件直接删除(springbootBase目前均已删除,忽略即可) #第三步 idea直接打开open项目 #第四步 修改modules和project #第五步 如有需要 需要重新配置一下热部署 ``` **第四步:修改pom.xml中的项目名** ![image-20220112175042411](pic/image-20220112175042411.png) # SpringBoot配置devtools实现热部署 spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用。 **devtools的原理** 深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。 使用需要添加以下的配置: ```xml org.springframework.boot spring-boot-devtools true org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-maven-plugin true ``` **说明:** (1) devtools可以实现页面热部署(即页面修改后会立即生效,这个可以直接在application.properties文件中配置spring.thymeleaf.cache=false来实现), 实现类文件热部署(类文件修改后不会立即生效),实现对属性文件的热部署。 即devtools会监听classpath下的文件变动,并且会立即重启应用(发生在保存时机),注意:因为其采用的虚拟机机制,该项重启是很快的 (2)配置了后在修改java文件后也就支持了热启动,不过这种方式是属于项目重启(速度比较快的项目重启),会清空session中的值,也就是如果有用户登陆的话,项目重启后需要重新登陆。 默认情况下,/META-INF/maven,/META-INF/resources,/resources,/static,/templates,/public这些文件夹下的文件修改不会使应用重启,但是会重新加载(devtools内嵌了一个LiveReload server,当资源发生改变时,浏览器刷新)。 **devtools的配置** 在application.properties中配置spring.devtools.restart.enabled=false,此时restart类加载器还会初始化,但不会监视文件更新。 在SprintApplication.run之前调用System.setProperty(“spring.devtools.restart.enabled”, “false”);可以完全关闭重启支持,配置内容: ```properties #热部署生效 spring.devtools.restart.enabled: true #设置重启的目录 #spring.devtools.restart.additional-paths: src/main/java #classpath目录下的WEB-INF文件夹内容修改不重启 spring.devtools.restart.exclude: WEB-INF/** ``` ```yaml spring: devtools: restart: enabled: true #热部署生效 #additional-paths: src/main/java #设置重启的目录 exclude: WEB-INF/** #classpath目录下的WEB-INF文件夹内容修改不重启 ``` **IDEA配置** 当我们修改了Java类后,IDEA默认是不自动编译的,而spring-boot-devtools又是监测classpath下的文件发生变化才会重启应用,所以需要设置IDEA的自动编译:此时设置路径及快捷键为MAC版本idea (1)intelliJ IDEA-Preferences-Compiler-Build Project automatically image-20210105150544432 (2)option + shift + command + /,调出Maintenance(维护)控制台,选择Registry(登记),勾上 Compiler autoMake allow when app running image-20210105150621469 **测试** - 修改类–>保存:应用会重启 - 修改配置文件–>保存:应用会重启 - 修改页面–>保存:应用不会重启,但会重新加载,页面会刷新(原理是将spring.thymeleaf.cache设为false,参考:Spring Boot配置模板引擎) # # # springboot实例项目 ## springbootBase(基础项目供复制) 搭建的一个基础项目,可供之后创建的springboot项目作为基础引用,直接复制改名即可(具体复制方案参考本文上方:idea中项目复制) 该项目目前集成的基础组件有: - 作为基础springboot项目,可供直接复制引用 - 清理IDEA生成springboot项目结构中多余模块 - devtools 热部署 - junit 单元测试 - Log4j2 日志记录模块,支持多环境配置设置 - Lombok 注解工具jar包,省略繁杂代码 ## springboot-Helloworld springboot搭建的基础项目:Helloworld - 描述了springboot的入门基础知识 - 介绍了搭建基础的springboot项目 - 实现了HelloWorld基础请求返回 - 保留了IDEA创建springboot项目最基础的目录结构 - devtools热部署启动 - Junit单元测试 ## springboot-thymeleaf ## springbootJedis(Jedis) 首先我们要知道,Springboot整合Redis有两种方式,分别是Jedis和RedisTemplate,这两者有何区别? Jedis是Redis官方推荐的面向Java的操作Redis的客户端,而RedisTemplate是SpringDataRedis中对JedisApi的高度封装。其实在Springboot的官网上我们也能看到,官方现在推荐的是SpringDataRedis形式,相对于Jedis来说可以方便地更换Redis的Java客户端,其比Jedis多了自动管理连接池的特性,方便与其他Spring框架进行搭配使用如:SpringCache。 在这之前我在低版本的Springboot项目中一直使用Jedis操作Redis,但是我也意识到这种做法已经过时了,所以在升级了Springboot版本后特地在此篇中详细梳理一下,以后项目都会使用这个版本的整合方案,不再使用Jedis方式,不过我还是会再写一篇使用Jedis操作Redis的文章,因为从中能很清楚的看到其基本的工作方式,对Redis连接池的手动管理都能更清晰地体现出来。 自Spring3.1开始,Spring就自带了对缓存的支持。我们可以直接使用Spring缓存技术将某些数据放入本机的缓存中;Spring缓存技术也可以搭配其他缓存中间件(如Redis等)进行使用,将某些数据写入到缓存中间件(缓存中间件可能在其他机器上)中。 ## springbootRedis(RedisTemplate) ## springbootORM **本文是总结的springboot中常用的三种ORM,方便在之后的开发工作中总结使用** **----:-----具体规则详见springbootORM下README.md** ### springbootJPA ### Mybatis:无配置文件注解版 ### Mybatis:极简 xml 版本