SpringBoot2系列一:基础入门_war 包 servletcontextlistener @enablescheduling-程序员宅基地

技术标签: SpringBoot  JavaWeb  

一、概述

      Spring Boot设计目的是用来简化新Spring应用的初始搭建以及开发过程。Spring Boot并不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式。

二、特性
①创建独立的Spring应用程序
②嵌入的Tomcat,无需部署WAR文件
③简化Maven配置
④自动配置Spring
⑤提供生产就绪型功能,如指标,健康检查和外部配置
⑥开箱即用,没有代码生成,也无需XML配置。
三、注解说明
@SpringBootApplication          Spring Boot项目的核心注解,主要目的是开启自动配置;
@Configuration 作用于类上,相当于一个xml配置文件,配置Spring
@Bean 作用于方法上,相当于xml配置中的<bean>
@ComponentScan 默认扫描@SpringBootApplication所在类的同级目录以及它的子目录。
@PropertySource("classpath:env.properties") 读取外部的配置文件,通过@Value注解获取值
@Transactional 申明事务
四、SpringBoot目录文件结构讲解
src/main/java:存放代码
src/main/resources
static:    存放静态文件,比如 css、js、image, (访问方式 http://localhost:8080/js/main.js)
templates: 存放静态页面jsp,html,tpl
config:   存放配置文件,application.properties
五、SpringBoot默认加载文件的路径
/META-INF/resources/
/resources/
/static/
/public/
       SpringBoot默认配置
spring.resources.static-locations = classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/ 
六、Spring Boot热部署
①添加依赖            
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-devtools</artifactId>
</dependency>
②Compiler 勾选中左侧的Build Project automatically
③idea设置Auto-Compile,然后 Shift+Ctrl+Alt+/,选择Registry
勾选compiler.automake.allow.when.app.running
④不被热部署的文件
  1、/META-INF/maven, /META-INF/resources, /resources, /static, /public, or /templates
  2、指定文件不进行热部署 spring.devtools.restart.exclude=static/**,public/**
  3、手工触发重启 spring.devtools.restart.trigger-file=trigger.txt
  改代码不重启,通过一个文本去控制
七、自定义启动Banner
①访问http://patorjk.com/software/taag/#p=display&h=3&v=3&f=4Max&t=itcast%20Spring%20Boot
②拷贝生成的字符到一个文本文件中,并且将该文件命名为banner.txt
③将banner.txt拷贝到项目的resources目录中
八、全局配置文件(application.properties或application.yml)
server.port=8088
server.servlet-path=*.html
server.tomcat.uri-encoding=UTF-8 
logging.level.org.springframework=DEBUG

更多点击参见官网地址

九、Starter pom

spring-boot-starter 核心Spring Boot starter,包括自动配置支持,日志和YAML
spring-boot-starter-amqp          对高级消息队列协议的支持,通过spring-rabbit实现
spring-boot-starter-aop 对面向切面编程的支持,包括spring-aop和AspectJ
spring-boot-starter-data-elasticsearch 对Elasticsearch搜索擎的支持,包括spring-data-elasticsearch
spring-boot-starter-data-jpa          对Java持久化API的支持,包括spring-data-jpa,spring-orm和Hibernate
spring-boot-starter-jdbc          对JDBC数据库的支持
spring-boot-starter-redis          对REDIS键值数据存储的支持,包括spring-redis
spring-boot-starter-data-redis
spring-boot-starter-security          对spring-security的支持
spring-boot-starter-test          对常用测试依赖的支持,包括JUnit, Hamcrest和Mockito,spring-test
spring-boot-starter-velocity          对Velocity模板引擎的支持
spring-boot-starter-activemq
spring-boot-starter-freemarker
spring-boot-starter-thymeleaf
spring-boot-starter-web 对全栈web开发的支持,包括Tomcat和spring-webmvc
spring-boot-starter-webflux
(更多配置见百度)
十、常用json框架
(1)JavaBean序列化为Json,性能:
Jackson > FastJson > Gson > Json-lib 
(2)jackson处理相关注解
指定字段不返回:@JsonIgnore
指定日期格式:   @JsonFormat(pattern="yyyy-MM-dd hh:mm:ss",locale="zh",timezone="GMT+8")
空字段不返回:   @JsonInclude(Include.NON_NUll)
指定别名: @JsonProperty
十一、SpringBoot使用任务调度
(1)使用步骤:
①启动类里面 @EnableScheduling开启定时任务,自动扫描
②定时任务业务类 加注解 @Component被容器扫描
③定时执行的方法加上注解 @Scheduled(fixedRate=2000) 定期执行一次
(2)常用定时任务表达式配置和在线生成器
cron 定时任务表达式 @Scheduled(cron="*/1 * * * * *") 表示每秒
1)crontab 工具  https://tool.lu/crontab/
fixedRate: 定时多久执行一次(上一次开始执行时间点后xx秒再次执行;)
fixedDelay: 上一次执行结束时间点后xx秒再次执行
fixedDelayString:  字符串形式,可以通过配置文件指定
(3)异步定时任务
启动类里面使用@EnableAsync注解开启功能,自动扫描
定义异步任务类并使用@Component标记组件被容器扫描,异步方法加上@Async
①要把异步任务封装到类里面,不能直接写到Controller
②增加Future<String> 返回结果 AsyncResult<String>("task执行完成");  
③如果需要拿到结果 需要判断全部的 task.isDone()
十二、SpringBoot拦截器、过滤器、监听器
(1)SpringBoot启动默认加载的Filter 
characterEncodingFilter
hiddenHttpMethodFilter
httpPutFormContentFilter
requestContextFilter
(2)Filter优先级
Ordered.HIGHEST_PRECEDENCE
Ordered.LOWEST_PRECEDENCE
(3)自定义Filter
1)使用Servlet3.0的注解进行配置
2)启动类里面增加 @ServletComponentScan,进行扫描
3)新建一个Filter类,implements Filter,并实现对应的接口
4) @WebFilter 标记一个类为filter,被spring进行扫描 
urlPatterns:拦截规则,支持正则
6)控制chain.doFilter的方法的调用,来实现是否通过放行
  不放行,web应用resp.sendRedirect("/index.html");
场景:权限控制、用户登录(非前端后端分离场景)等
(4)Servlet3.0的注解自定义原生Listener监听器
自定义Listener(常用的监听器 servletContextListener、httpSessionListener、servletRequestListener)
@WebListener
public class RequestListener implements ServletRequestListener {


@Override
public void requestDestroyed(ServletRequestEvent sre) {
	// TODO Auto-generated method stub
	System.out.println("======requestDestroyed========");
}


@Override
public void requestInitialized(ServletRequestEvent sre) {
	System.out.println("======requestInitialized========");
	
}
(5)自定义拦截器
1)implements WebMvcConfigurer
@Configuration
public class CustomWebMvcConfigurer implements WebMvcConfigurer  {
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(new LoginIntercepter()).addPathPatterns("/api2/*/**");
		//.excludePathPatterns("/api2/xxx/**");
		WebMvcConfigurer.super.addInterceptors(registry);
	}
}
2)自定义拦截器 HandlerInterceptor
preHandle:调用Controller某个方法之前
postHandle:Controller之后调用,视图渲染之前,如果控制器Controller出现了异常,则不会执行此方法
afterCompletion:不管有没有异常,这个afterCompletion都会被调用,用于资源清理
3)按照注册顺序进行拦截,先注册,先被拦截
(6)对比
  • Filter是基于函数回调 doFilter(),而Interceptor则是基于AOP思想
  • Filter在只在Servlet前后起作用,而Interceptor够深入到方法前后、异常抛出前后等
  • Filter依赖于Servlet容器即web应用中,而Interceptor不依赖于Servlet容器所以可以运行在多种环境。
  • 在接口调用的生命周期里,Interceptor可以被多次调用,而Filter只能在容器初始化时调用一次。
  • Filter和Interceptor的执行顺序:过滤前->拦截前->action执行->拦截后->过滤后
十三、两种部署方式jar和war
(1)jar包方式启动
添加 maven插件,执行打包即可,启动命令:    java -jar **.jar &
<build>
<plugins>
	<plugin>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-maven-plugin</artifactId>
	</plugin>
</plugins>
</build>
(2)war包方式启动
a.在pom.xml中将打包形式 jar 修改为war  <packaging>war</packaging>
b.添加构建项目名称 <finalName>xdclass_springboot</finalName>
c.修改启动类
public class XdclassApplication extends SpringBootServletInitializer {
	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
		return application.sources(XdclassApplication.class);
	}

	public static void main(String[] args) throws Exception {
		SpringApplication.run(XdclassApplication.class, args);
	}
}
d. 打包项目,启动tomcat
十四、SpringBoot多环境配置
①不同环境使用不同配置
例如数据库配置,在开发的时候,我们一般用开发数据库,而在生产环境的时候,我们是用正式的数据
②配置文件存放路径
classpath根目录的“/config”包下
classpath的根目录下
③spring boot允许通过命名约定按照一定的格式(application-{profile}.properties)来定义多个配置文件  
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhou870498/article/details/80685774

智能推荐

shell脚本自动获取配置本机静态IP脚本_shell修改静态ip-程序员宅基地

文章浏览阅读212次。让用户选择是否配置静态,yes配置、no不配置。自动获取ip、掩码、网关、dns。_shell修改静态ip

WCH-LINK使用方法-程序员宅基地

文章浏览阅读3.5k次,点赞2次,收藏6次。1.USB-TTL模式,芯片的TXD脚和wchlink的RX脚连接,芯片的RXD脚和wchlink的TX脚连接,且两者共地连接,无需共电源(共电源反而失效),即可完成收发,数据收发时灯并不会闪烁。2.下载模式,切换成arm内核的下载模式的方法:断电时连接TX和GND,上电后断开TX和GND,蓝灯亮为ARM模式,蓝灯灭为RISC-V模式。_wch-link

linux+ls+的路径,linux+ls+文件路径-程序员宅基地

文章浏览阅读205次。在使用内置模块的时候需要导入,例如import abc,则导入abc模块,当然模块也可以自己写,相当于一个类,后面放到类里说,这个因为环境闲置,有些无法执行,只能理解了os系统操作import osos.system('ls') #调用系统命令,并返回执行结果,os.system('dir')....os.popen('ls') #和system相似,system会直接把结果打印到屏幕上,pope..._linux ls文件路径

嵌入式大杂烩周记 | 第 10 期-程序员宅基地

文章浏览阅读655次。大家好,我是杂烩君。嵌入式大杂烩周记主要是一些实用项目学习分享,每周一篇,每篇一个主题。内容主要来源于我们之前收集的资料:https://gitee.com/zhengnianli/EmbedSummary本期主角:inih inih:一个C 语言编写的 INI 文件解析器。配置文件的格式有很多,如JSON、INI等。JSON之前分享过了:例说嵌入式实用知识之JSON数据..._嵌入式大杂烩微信

SetTimer() ---定时器的使用_c语言settimer怎么设置两个定时器-程序员宅基地

文章浏览阅读2.5w次,点赞2次,收藏13次。http://www.bokele.com/?CH=Log&ArticleID=32370 定时器的使用:三种方法如果您需要在整个程序执行期间都使用定时器,那么您将得从WinMain函数中或者在处理WM_CREATE消息时呼叫SetTimer,并在退出WinMain或响应WM_DESTROY消息时呼叫KillTimer。根据呼叫SetTimer时使用的参数,可以下列三种方法之一使用定时器。方法一这是最方便的一种_c语言settimer怎么设置两个定时器

盲海---The Ocean of the Blind_盲海下载-程序员宅基地

文章浏览阅读2.7k次。译序:因为偶尔看到这篇科幻小说,读完觉得蛮有趣味,想象丰富,文中对于声纳、通讯手段以及深海潜水等细节描写入微,读来饶有趣味,所以用好些天的闲暇时间翻译了出来,以便更多朋友观赏,本人翻译水平有限,如果发现错误,请告知我,如果要转载也请首先告知我,并注明出处,保留此序。本文不得用于商业用途译者保留中文翻译版权。This passage is freely distributable, yo_盲海下载

随便推点

PDMAN中设置外键约束_在pdmaner软件中如何添加外键-程序员宅基地

文章浏览阅读4k次,点赞2次,收藏3次。PDman下载地址:下载地址:https://gitee.com/robergroup/pdman官网地址:http://www.pdman.cn/#/创建表查看关系图设置表外键选中user表,出现边侧小点,选中需要设置外键的字段边上的点,拖动连接另一张表的字段,选中连接线可设置表对应关系..._在pdmaner软件中如何添加外键

病毒分析与防护实验1——注册表操作_注册表实验-程序员宅基地

文章浏览阅读3.8k次,点赞13次,收藏19次。E01814234郭佳明——注册表操作实验名称:病毒分析与防护——注册表操作实验环境VMware workstation proWindows 10 虚拟机实验目的了解病毒传播的常见行为了解注册表在病毒行为设置中的作用实验原理注册表是windows操作系统中使用的中央分层数据库,存储用户、应用程序和硬件设备配置系统所需要的信息。这些信息以树状结构存储在注册表(数据库)中。包括:用户的配置文件、安装的应用程序以及应用程序创建的文档类型、文件夹和应用程序图等、系统上存在哪些硬件_注册表实验

2023-11-28 事业-代号s-shein招商发布会-记录与分析-程序员宅基地

文章浏览阅读978次,点赞25次,收藏21次。既然花费了如此多的精力来处理这场发布会, 那么必然是有深刻的原因来采取如此行动。需要对其中的细节做深入的研究, 以作为更为深刻的反思, 以及未来的规划._shein招商

Mixly+点灯科技+小爱同学智能插座_米思齐第三方库-程序员宅基地

文章浏览阅读9.2k次,点赞5次,收藏62次。Mixly+点灯科技+小爱同学智能插座疫情了,时间多的很。游戏也玩累了,电影也没的看了。无聊至极!得!!!出来搞点事情吧。哈哈哈。Mixly出了新版本(正式版1.1.3)这个版本很稳定也很好用,最最主要的是添加了点灯的三方模块(开始我玩点灯时也想做个这个库的模块,就因本人犯懒没搞,自更新了新版本后发现已有,那咱就可以开心的玩耍了)。点赞!这货对于编程菜鸟简直就是神器。例如本人。嘿嘿切入正题整点干货!今天主要玩的就是米思齐三方点灯模块.需要硬件: esp8266 01 模块1个esp8266 0_米思齐第三方库

[附源码]计算机毕业设计Python+uniapp小型企业人力资源管理APPmw867(程序+lw+APP+远程部署)_uniapp 人力资源系统-程序员宅基地

文章浏览阅读26次。Python3.7.7+Django+Mysql5.7+pip list+HBuilderX(Vscode也行)+uni+Vue+Pychram社区版。[附源码]计算机毕业设计Python+uniapp小型企业人力资源管理APPmw867(程序+lw+APP+远程部署)2. 前端:uni+css+javascript+jQuery+easyUI+highcharts。其他版本理论上也可以。Django + uni小程序 +Python+Mysql 等等组成,B/S模式等等。或者 Mac OS;_uniapp 人力资源系统

泛统计理论初探——线性判别分析LDA简介_统计学lda-程序员宅基地

文章浏览阅读1k次。统计学习-线性判别分析方法简介线性判别分析方法简介LDA是常见的降维算法,全称是Linear Discriminant Analysis,即线性判别分析。这种方法和主成分分析法都是一种降维的方法,区别在于主成分分析方法是无监督方法,而LDA是一种有监督的方法。LDA的核心思想其实是将数据进行映射,把之前分布的数据映射为一簇一簇的数据,使得一簇数据内部的数据距离尽量的小,而一簇数据与另一簇数据之..._统计学lda