零基础快速入门SpringBoot2.0教程 (二)
一、SpringBoot2.x使用Dev-tool热部署简介:介绍什么是热部署,使用springboot结合dev-tool工具,快速加载启动应用官方地址:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#using-boot-devtools核心依赖包:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency>添加依赖后,在ide里面重启应用,后续修改后马上可以生效classloader不被热部署的文件1、/META-INF/maven, /META-INF/resources, /resources, /static, /public, or /templates2、指定文件不进行热部署 spring.devtools.restart.exclude=static/**,public/**3、手工触发重启 spring.devtools.restart.trigger-file=trigger.txt改代码不重启,通过一个文本去控制https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#using-boot-devtools-restart-exclude注意点:生产环境不要开启这个功能,如果用java -jar启动,springBoot是不会进行热部署的二、SpringBoot2.x配置文件讲解简介:SpringBoot2.x常见的配置文件 xml、yml、properties的区别和使用xml、properties、json、yaml1、常见的配置文件 xx.yml, xx.properties,1)YAML(Yet Another Markup Language)写 YAML 要比写 XML 快得多(无需关注标签或引号)使用空格 Space 缩进表示分层,不同层次之间的缩进可以使用不同的空格数目注意:key后面的冒号,后面一定要跟一个空格,树状结构application.properties示例server.port=8090 server.session-timeout=30 server.tomcat.max-threads=0 server.tomcat.uri-encoding=UTF-8 application.yml示例server: port: 8090 session-timeout: 30 tomcat.max-threads: 0 tomcat.uri-encoding: UTF-8 2、默认示例文件仅作为指导。 不要将整个内容复制并粘贴到您的应用程序中,只挑选您需要的属性。3、参考:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#common-application-properties如果需要修改,直接复制对应的配置文件,加到application.properties里面三、SpringBoot注解配置文件自动映射到属性和实体类实战简介:讲解使用@value注解配置文件自动映射到属性和实体类1、配置文件加载方式一1、Controller上面配置@PropertySource({"classpath:resource.properties"})2、增加属性@Value("${test.name}")private String name;方式二:实体类配置文件步骤:1、添加 @Component 注解;2、使用 @PropertySource 注解指定配置文件位置;3、使用 @ConfigurationProperties 注解,设置相关属性;4、必须 通过注入IOC对象Resource 进来 , 才能在类中使用获取的配置文件值。@Autowiredprivate ServerSettings serverSettings;例子:@Configuration@ConfigurationProperties(prefix="test")@PropertySource(value="classpath:resource.properties")public class ServerConstant {常见问题:1、配置文件注入失败,Could not resolve placeholder解决:根据springboot启动流程,会有自动扫描包没有扫描到相关注解, 默认Spring框架实现会从声明@ComponentScan所在的类的package进行扫描,来自动注入,因此启动类最好放在根路径下面,或者指定扫描包范围spring-boot扫描启动类对应的目录和子目录2、注入bean的方式,属性名称和配置文件里面的key一一对应,就用加@Value 这个注解如果不一样,就要加@value("${XXX}")四、SpringBoot个性化启动banner设置和debug日志简介:自定义应用启动的趣味性日志图标和查看调试日志1、启动获取更多信息 java -jar xxx.jar --debug2、修改启动的banner信息1)在类路径下增加一个banner.txt,里面是启动要输出的信息2)在applicatoin.properties增加banner文件的路径地址 spring.banner.location=banner.txt3)官网地址 https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-banners五、SpringBoot2.x配置全局异常实战讲解:服务端异常讲解和SpringBoot配置全局异常实战1、默认异常测试 int i = 1/0,不友好2、异常注解介绍@ControllerAdvice 如果是返回json数据 则用 RestControllerAdvice,就可以不加 @ResponseBody//捕获全局异常,处理所有不可知的异常@ExceptionHandler(value=Exception.class)六、SpringBoot2.x配置全局异常返回自定义页面简介:使用SpringBoot自定义异常和错误页面跳转实战1、返回自定义异常界面,需要引入thymeleaf依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>2、resource目录下新建templates,并新建error.htmlModelAndView modelAndView = new ModelAndView();modelAndView.setViewName("error.html");modelAndView.addObject("msg", e.getMessage());return modelAndView;https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-error-handling七、SpringBoot启动方式讲解和部署war项目到tomcat9
简介:SpringBoot常见启动方式讲解和部署war项目Tomcat1、ide启动2、jar包方式启动maven插件:<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>如果没有加,则执行jar包 ,报错如下java -jar spring-boot-demo-0.0.1-SNAPSHOT.jarno main manifest attribute, in spring-boot-demo-0.0.1-SNAPSHOT.jar如果有安装maven 用 mvn spring-boot:run项目结构example.jar|+-META-INF| +-MANIFEST.MF+-org| +-springframework| +-boot| +-loader| +-<spring boot loader classes>+-BOOT-INF+-classes| +-mycompany| +-project| +-YourClasses.class+-lib+-dependency1.jar+-dependency2.jar目录结构讲解https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#executable-jar-jar-file-structure3、war包方式启动1)在pom.xml中将打包形式 jar 修改为war <packaging>war</packaging>构建项目名称 <finalName>xdclass_springboot</finalName>2)tocmat下载 https://tomcat.apache.org/download-90.cgi3)修改启动类public class XdclassApplication extends SpringBootServletInitializer {@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder application) {return application.sources(XdclassApplication.class);}public static void main(String[] args) throws Exception {SpringApplication.run(XdclassApplication.class, args);}}4)打包项目,启动tomcat4、启动容器介绍和第三方测试数据讲解使用Jmter测试工具测试性能,QPS,TPS,RThttps://examples.javacodegeeks.com/enterprise-java/spring/tomcat-vs-jetty-vs-undertow-comparison-of-spring-boot-embedded-servlet-containers/八、深入SpringBoot过滤器和Servlet3.0配置过滤器实战简介:讲解SpringBoot里面Filter讲解和使用Servlet3.0配置自定义Filter实战filter简单理解:人--->检票员(filter)---> 景点1、SpringBoot启动默认加载的Filter characterEncodingFilterhiddenHttpMethodFilterhttpPutFormContentFilterrequestContextFilter2、Filter优先级Ordered.HIGHEST_PRECEDENCEOrdered.LOWEST_PRECEDENCE低位值意味着更高的优先级 Higher values are interpreted as lower priority自定义Filter,避免和默认的Filter优先级一样,不然会冲突注册Filter的bean FilterRegistrationBean同模块里面有相关默认Filterweb->servlet->filter3、自定义Filter1)使用Servlet3.0的注解进行配置2)启动类里面增加 @ServletComponentScan,进行扫描3)新建一个Filter类,implements Filter,并实现对应的接口4) @WebFilter 标记一个类为filter,被spring进行扫描 urlPatterns:拦截规则,支持正则6)控制chain.doFilter的方法的调用,来实现是否通过放行不放行,web应用resp.sendRedirect("/index.html");场景:权限控制、用户登录(非前端后端分离场景)等1、 官网地址:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-embedded-container-servlets-filters-listeners九、Servlet3.0的注解原生Servlet实战讲解:使用 Servlet3.0的注解自定义原生Servlet和Listener1、自定义原生Servlet@WebServlet(name = "userServlet",urlPatterns = "/test/customs")public class UserServlet extends HttpServlet{@Overridepublic void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.getWriter().print("custom sevlet");resp.getWriter().flush();resp.getWriter().close();}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req, resp);}}十、Servlet3.0的注解原生Listener监听器实战简介:监听器介绍和Servlet3.0的注解自定义原生Listener监听器实战1、自定义Listener(常用的监听器 servletContextListener、httpSessionListener、servletRequestListener)@WebListenerpublic class RequestListener implements ServletRequestListener {@Overridepublic void requestDestroyed(ServletRequestEvent sre) {// TODO Auto-generated method stubSystem.out.println("======requestDestroyed========");}@Overridepublic void requestInitialized(ServletRequestEvent sre) {System.out.println("======requestInitialized========");}十一、SpringBoot2.X拦截器实战及新旧配置对比简介: 讲解拦截器使用,Spingboot2.x新版本配置拦截拦截器和旧版本SpringBoot配置拦截器区别讲解1、@Configuration继承WebMvcConfigurationAdapter(SpringBoot2.X之前旧版本)SpringBoot2.X 新版本配置拦截器 implements WebMvcConfigurer2、自定义拦截器 HandlerInterceptorpreHandle:调用Controller某个方法之前postHandle:Controller之后调用,视图渲染之前,如果控制器Controller出现了异常,则不会执行此方法afterCompletion:不管有没有异常,这个afterCompletion都会被调用,用于资源清理3、按照注册顺序进行拦截,先注册,先被拦截拦截器不生效常见问题:1)是否有加@Configuration2)拦截路径是否有问题 ** 和 * 3)拦截器最后路径一定要 “/**”, 如果是目录的话则是 /*/Filter是基于函数回调 doFilter(),而Interceptor则是基于AOP思想Filter在只在Servlet前后起作用,而Interceptor够深入到方法前后、异常抛出前后等依赖于Servlet容器即web应用中,而Interceptor不依赖于Servlet容器所以可以运行在多种环境。在接口调用的生命周期里,Interceptor可以被多次调用,而Filter只能在容器初始化时调用一次。Filter和Interceptor的执行顺序过滤前->拦截前->action执行->拦截后->过滤后
可结合之前的博文2018最新SpringBoot2.0教程(零基础入门)观看理解
更多学习资料可参考:https://xdclass.net/html/course_catalogue.html?video_id=4
https://ke.qq.com/course/299498
转载于:https://www.cnblogs.com/xdclass/p/9569584.html
零基础快速入门SpringBoot2.0教程 (二)相关推荐
- 零基础快速入门SpringBoot2.0教程 (三)
一.SpringBoot Starter讲解 简介:介绍什么是SpringBoot Starter和主要作用 1.官网地址:https://docs.spring.io/spring-boot/doc ...
- CSS零基础快速入门(详细教程)
1,CSS概述 CSS是层叠样式表,由Cascading Style Sheets简称而来. CSS的功能为:能够对网页中元素位置的排版进行像素级精确控制,实现美化页面的效果,并且能够做到页面的样式和 ...
- HTML零基础快速入门(详细教程)
1,HTML代码特点 <html><head></head><body>hello world!</body> </html> ...
- python海龟教程_Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 7. 条件循环...
条件循环能够让程序在条件成立时(即为真时)重复执行循环体中的语句.如果条件一直成立(即永远不会为假),则循环会一直进行下去,不会停止.如果初始时,条件不成立,则循环 1 次也不会执行.Python 中 ...
- 【PR】零基础快速入门教程
[PR]零基础快速入门教程 PR(Premiere)能做什么? PR欢迎界面及新建项目 工作区及窗口说明 导入文件 建立序列 视频剪辑 添加字幕 导出视频 使用软件:Premiere2020 新年卷起 ...
- python爬虫实践——零基础快速入门(四)爬取小猪租房信息
上篇文章我们讲到python爬虫实践--零基础快速入门(三)爬取豆瓣电影 接下来我们爬取小猪短租租房信息.进入主页后选择深圳地区的位置.地址如下: http://sz.xiaozhu.com/ 一,标 ...
- 零基础快速入门web学习路线(含视频教程)
下面小编专门为广大web学习爱好者汇总了一条完整的自学线路:零基础快速入门web学习路线(含视频教程)(绝对纯干货)适合初学者的最新WEB前端学习路线汇总! 在当下来说web前端开发工程师可谓是高福利 ...
- ROS2零基础快速入门
ROS2入门最快需要多少时间?3天: ROS2开发一款基础机器人需要多久?3个星期: ROS2怎么才能算"精通"?不可能,3年也不行-- 如何判断一款通用性软件成熟并可以投入精力去 ...
- Linux零基础快速入门篇
推荐教程:Linux零基础快速入门到精通 操作系统概述 操作系统是计算机软件的一种,它主要负责:作为用户和计算机硬件之间的桥梁,调度和管理计算机硬件进行工作而计算机,如果没有操作系统,就是一堆无法使用 ...
最新文章
- 如何用JavaScript的回调函数做出承诺
- java rect 旋转_处理(Java可视化语言):使用rectMode(CENTER)而不是rectMode(CORNER)旋转矩形,留下奇数衰落轨迹效果...
- python内存管理变量_Python变量内存管理
- ITK:转换三角网格为二进制图像
- ArcGIS网络分析之Silverlight客户端最近设施点分析(四)
- linux c之判断字符串是不是以另一字符串开始或者结尾
- 家用电脑改成无盘服务器,怎么把自己家电脑硬盘弄成无盘
- 【ElasticSearch 】ElasticSearch监控工具 cerebro
- 手机端放在线条中间的标题
- Qt中采用多线程实现Socket编程
- 1068. Find More Coins (30)
- 软件测试人员工作计划怎么写,软件测试个人工作计划.docx
- windows update 离线包下载
- ROS2中的行为树 BehaviorTree
- [渝粤教育] 扬州市职业大学 液压与气动技术 参考 资料
- mysql 分组去重只保留最新创建时间的数据
- 贷款买房怎么做才划算?贷款买房注意事项
- spark解析csv文件_Spark:解析CSV文件并按列值分组
- 迷你播放器--第一阶段(3)--MediaPlayer的封装
- 夕阳红旅游团第四周报告