202010-15 详解Spring Boot最新版优雅停机的方法 什么是优雅停机先来一段简单的代码,如下:@RestControllerpublicclassDemoController{@GetMapping("/demo")publicStringdemo()throwsInterruptedException{//模拟业务耗时处理流程Thread.sleep(20*1000L);return"hello";}}当我们流量请求到此接口执行业务逻辑的时候,若服务端此时执行关机(kill),springboot默认情况会直接关闭容器(tomcat等),导致此业务逻辑执行失败。在一些业务场景下:会出现数据... 继续阅读 >
202010-15 spring5新特性全面介绍 前方:对于很多开发人员来说,目前大都还在使用spring4的时候,而spring5早已经发布。虽然你可能暂时还没有使用到spring5,但还是需要对其有个大概的了解。Spring5于2017年9月发布了通用版本(GA),它标志着自2013年12月以来第一个主要SpringFramework版本。它提供了一些人们期待已久的改进,还采用了一种全新的编程范例,以反应式宣言中陈述的反应式原则为基础。这个版本是很长时间以来最令人兴奋的SpringFramewor... 继续阅读 >
202010-13 Spring如何处理表单提交 今天我们来讲一个最简单的表单提交处理的例子,通过提交一个表单给朋友打一声招呼!看这边文章之前,你至少应该了解基于Spring的Web开发的基础知识,当然,你还是应该准备好开发环境:IDE+Java环境(JDK1.7或以上版本)Maven3.0+(Eclipse和IdeaIntelliJ内置,如果使用IDE并且不使用命令行工具可以不安装)准备POM文件POM.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM... 继续阅读 >
202010-13 Spring如何处理表单提交 今天我们来讲一个最简单的表单提交处理的例子,通过提交一个表单给朋友打一声招呼!看这边文章之前,你至少应该了解基于Spring的Web开发的基础知识,当然,你还是应该准备好开发环境:IDE+Java环境(JDK1.7或以上版本)Maven3.0+(Eclipse和IdeaIntelliJ内置,如果使用IDE并且不使用命令行工具可以不安装)准备POM文件POM.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM... 继续阅读 >
202010-13 Spring OAuth2.0 单元测试解决方案 为什么需要单元测试单元测试拥有保证代码质量、尽早发现软件Bug、简化调试过程、促进变化并简化集成、使流程更灵活等优势。单元测试是针对代码单元的独立测试,核心是“独立”,优势来源也是这种独立性,而所面临的不足也正是因为其独立性:既然是“独立”,就难以测试与其他代码和依赖环境的相互关系。单元测试与系统测试是互补而非代替关系。单元测试的优势,正是系统测试的不足,单元测试的不足,又恰是系统测试的优势。不能将... 继续阅读 >
202010-13 spring boot实现profiles动态切换的示例 具体做法:1、首先在pom中添加profiles:<profiles><profile><id>dev</id><activation><activeByDefault>true</activeByDefault></activation><properties><spring.profiles.active>dev</spring.profiles.active></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional... 继续阅读 >
202010-13 Spring 环境下实现策略模式的示例 背景最近在忙一个需求,大致就是给满足特定条件的用户发营销邮件,但是用户的来源有很多方式:从ES查询的、从csv导入的、从MongoDB查询…..需求很简单,但是怎么写的优雅,方便后续扩展,就存在很多门道了。我们的项目是基于SpringBoot开发的,因此这篇文章也会基于SpringBoot作为基础框架,教你如何使用Spring依赖注入的特性,优雅的实现策略模式。1.简单粗暴最简单粗暴直接的方式莫过于if...else…了,伪代码... 继续阅读 >
202010-13 在Spring Boot中从类路径加载文件的示例 资源加载器使用Java,您可以使用当前线程的classLoader并尝试加载文件,但是SpringFramework为您提供了更为优雅的解决方案,例如ResourceLoader。您只需要自动连接ResourceLoader,然后调用getResource(„somePath“)方法即可。在SpringBoot(WAR)中从资源目录/类路径加载文件的示例在以下示例中,我们从类路径中加载名为GeoLite2-Country.mmdb的文件作为资源,然后将其作为File对象检索。@Service("geolocationservice")... 继续阅读 >
202010-13 在Spring Boot中从类路径加载文件的示例 资源加载器使用Java,您可以使用当前线程的classLoader并尝试加载文件,但是SpringFramework为您提供了更为优雅的解决方案,例如ResourceLoader。您只需要自动连接ResourceLoader,然后调用getResource(„somePath“)方法即可。在SpringBoot(WAR)中从资源目录/类路径加载文件的示例在以下示例中,我们从类路径中加载名为GeoLite2-Country.mmdb的文件作为资源,然后将其作为File对象检索。@Service("geolocationservice")... 继续阅读 >
202010-10 解决Spring boot 嵌入的tomcat不启动问题 此文章记录一次springboot通过main方法启动无法成功的问题UnregisteringJMX-exposedbeansonshutdown问题如下,因为已经解决用的别人的截图但是效果是一样的百度了一圈都说tomcat没有配置,但实际xml有如下配置<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></dependency>问题:eclipsemaven自动下jar包时下载的不全,有部分文件丢失,但是控制台并没... 继续阅读 >
202010-10 Spring Cloud Gateway不同频率限流的解决方案(每分钟,每小时,每天) SpringCloudGateway简介SpringCloudGateway是SpringCloud的一个全新项目,该项目是基于Spring5.0,SpringBoot2.0和ProjectReactor等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的API路由管理方式。SpringCloudGateway作为SpringCloud生态系统中的网关,目标是替代Zuul,在SpringCloud2.0以上版本中,没有对新版本的Zuul2.0以上最新高性能版本进行集成,仍然还是使用的Zuul2.0之前的非Re... 继续阅读 >
202010-10 spring security在分布式项目下的配置方法(案例详解) 分布式项目和传统项目的区别就是,分布式项目有多个服务,每一个服务仅仅只实现一套系统中一个或几个功能,所有的服务组合在一起才能实现系统的完整功能。这会产生一个问题,多个服务之间session不能共享,你在其中一个服务中登录了,登录信息保存在这个服务的session中,别的服务不知道啊,所以你访问别的服务还得在重新登录一次,对用户十分不友好。为了解决这个问题,于是就产生了单点登录:**jwt单点登录:**就是用户在登录服... 继续阅读 >
202010-10 浅谈Spring中单例Bean是线程安全的吗 Spring容器中的Bean是否线程安全,容器本身并没有提供Bean的线程安全策略,因此可以说Spring容器中的Bean本身不具备线程安全的特性,但是具体还是要结合具体scope的Bean去研究。Spring的bean作用域(scope)类型1、singleton:单例,默认作用域。2、prototype:原型,每次创建一个新对象。3、request:请求,每次Http请求创建一个新对象,适用于WebApplicationContext环境下。4、session:会话,同一个会话共享一个实例,不同会话使... 继续阅读 >
202010-10 Spring Boot如何支持嵌入式Servlet容器 SpringBoot支持Tomcat、Jetty和Undertow三种Servlet容器嵌入到Web应用程序中,开发者使用starter即可方便嵌入,默认情况下,嵌入服务器的访问端口为8080。Servlets、Filters&Listeners这些组件可以同组件扫描注册,即把他们定义为SpringBean。默认情况下,如果只有一个servlet,则把它映射到/;如果有多个servlet,则加上beanname作为前缀然后映射到/*。如果默认策略不能满足你,你可以通过ServletRegistrationBean、FilterRe... 继续阅读 >
202010-10 Spring Boot如何整合FreeMarker模板引擎 POM<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId></dependency>项目结构src/+-main/+-java/|+-com|+-controller/||+-IndexController.class|+-Application.class+-resources/... 继续阅读 >
202010-10 IntelliJ IDEA 的 Spring 项目如何查看 @Value 的配置和值(方法详解) 当你打开项目或者项目中的文件的时候,如果你有Spring的Value的配置,Intellij将会自动将参数替换为值。如果你单击上面的值,那么这个配置参数将会显示为配置的参数名。如果你还想显示值的话,你需要重新打开这个文件或者项目。有没有什么快捷键可以快速进行切换。快捷键这个配置是在Intellij的Code>Folding中进行配置的。快捷键是是 Ctrl+NumberPad+快捷键是是 Ctrl+NumberPad-NumberPad+,这个键是... 继续阅读 >