Spring Boot
学会SpringBoot,抛弃繁琐配置,拥抱变化
绅士jiejie
理想的生活,就是生活的理想!
展开
-
基于kaptcha生成验证码
kaptcha生成验证码原创 2022-09-18 21:36:28 · 442 阅读 · 0 评论 -
spring boot关闭actuator路径
spring boot关闭actuator路径原创 2022-08-31 21:57:26 · 12614 阅读 · 5 评论 -
CommandLineRunner运行原理
CommandLineRunner运行原理原创 2022-07-21 21:41:38 · 344 阅读 · 0 评论 -
spring boot admin关闭某些中间件的健康检查
spring boot admin关闭某些中间件的健康检查原创 2022-06-15 21:32:08 · 1312 阅读 · 0 评论 -
SpringBoot Admin Server使用HTTPS协议访问页面无法正常显示
SpringBoot Admin Server使用HTTPS协议访问页面无法正常显示原创 2022-05-16 21:02:36 · 1554 阅读 · 0 评论 -
SpringBoot Admin Server经过SLB后协议从https变为了http
SpringBoot Admin Server经过SLB后协议从https变为了http原创 2022-05-16 21:01:42 · 770 阅读 · 0 评论 -
spring boot admin server添加安全配置
spring boot admin server添加安全配置原创 2022-05-13 22:56:03 · 1129 阅读 · 0 评论 -
spring.factories什么格式
spring.factories主要用来将第三方jar包的类,注入到spring容器中,其实就是file文件格式,放在META-INF文件夹下即可,然后图标自然会变,或者可以下载些spring boot懒人依赖的源码,直接拷贝它的META-INF文件夹过来做修改也行。...原创 2021-12-30 22:10:27 · 948 阅读 · 2 评论 -
FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes.
上传文件报如上错误,原因如下:Spring Boot工程内嵌的tomcat限制了请求的文件大小,官方默认每个文件的最大为1Mb,单次请求的文件的总数不能大于10Mb。解决方法:修改文件受限配置,如下:spring: servlet: multipart: max-file-size: 10MB max-request-size: 100MB之后即可上传成功。...原创 2021-08-18 14:56:51 · 1240 阅读 · 0 评论 -
用@JsonIgnore注解来忽略一些不想传递给前台的属性
有时候后端从数据库搜出些字段,有些字段是需要经过处理,然后赋值给另外一些字段上传到前端做展示,此事那些原来的字段对于前台来说就是没有意义的,是多余的回传字段,可以在这些字段上加上@JsonIgnore注解,在返回给前端数据时,这些字段将会被排除。...原创 2020-12-14 22:05:28 · 1770 阅读 · 0 评论 -
Spring Boot多文件上传
先简单的写个页面upload.html,用来模拟多文件上传的操作,内容如下:<!DOCTYPE html><html lang="en" xmlns:th="http://www.w3.org/1999/xhtml"><head> <meta charset="UTF-8"> <title>多文件上传</title></head><body><form th:action="@{原创 2020-12-03 12:04:55 · 295 阅读 · 0 评论 -
Spring boot自定义配置实现自动提示
平时我们在配置文件application.yml中写上我们所需的配置信息时,idea都会先给出友好的自动提示,方便我们快速操作,同时也能避免打错单词,如下:这些提示都是内置的,在我们引入的jar包中是存在有这些配置相关文件的,就先简单看看spring.application.name的自动提示是来自哪个文件,如下:可以发现spring.application.name属性被定义在了META-INF文件夹下的additional-spring-configuration-metadata.json文件原创 2020-12-02 19:07:47 · 620 阅读 · 0 评论 -
Spring Boot configuration annotation processor not found in classpath
场景:在Spring Boot项目的resources文件夹下新建一个META-INF文件夹,然后在META-INF文件夹下新建一个spring-configuration-metadata.json文件,用来自定义一些配置项,然后打开spring-configuration-metadata.json文件就报了如下错误:解决方法:在pom.xml中引入如下依赖: <dependency> <groupId>org.springframe原创 2020-12-02 11:59:15 · 267 阅读 · 1 评论 -
Spring Boot读取资源文件
资源文件一般都是用来定义各种提示文字信息的,同时配合上资源文件,还能够实现国际化。先在resources下新建一个i18n文件夹,用来放置资源文件,然后接着定义3个资源文件:Messages.properties:目前该文件里不维护任何信息,不过Messages.properties配置文件确是必须要存在的,否则将无法实现资源文件的读取,会报错。Messages_en_US.properties:英文版提示文字信息,维护信息如下:message=hello world!name=welcome.原创 2020-12-01 18:38:26 · 586 阅读 · 2 评论 -
生产环境屏蔽swagger
只需要在swagger的配置类上增加@Profile( )注解,指定环境变量,即可屏蔽生产环境上的swagger,如下:先使用dev环境,访问swagger,结果如下:再使用test环境,访问swagger,结果如下:最后切换成生产环境,访问swagger,结果如下:可以发现此时页面直接就报错了,什么信息都没有被展示出来。总结swagger的配置类使用上@Profile( )注解,即可实现生产环境屏蔽swagger。...原创 2020-11-25 12:04:25 · 3167 阅读 · 0 评论 -
换一个swagger的前端皮肤
原来的swagger的前端皮肤展示如下:其实感觉也还好,但是如果控制器类多了,那审美就会有点疲劳了,所以可以试着换一换swagger的前端皮肤,换成一种更符合我们操作习惯的前端皮肤。怎么换?可以直接引用swagger-bootstrap-ui的最后一个版本1.9.6或者使用knife4j-spring-ui。这里就用swagger-bootstrap-ui的最后一个版本1.9.6来做演示,依赖如下:<dependency> <groupId>com.gith原创 2020-11-23 12:03:59 · 465 阅读 · 0 评论 -
不使用@EnableTransactionManagement注解就能使用事务
@EnableTransactionManagement注解作用?使用@EnableTransactionManagement注解可以开启事务支持,然后在方法上添加注解@Transactional即可实现事务。但是其实现在不加@EnableTransactionManagement注解也是可以实现事务的,为什么呢?先跟到@SpringBootApplication注解中,可以发现一个自动装配的注解@EnableAutoConfiguration,如下:跟进@EnableAutoConfig.原创 2020-11-22 22:24:57 · 4803 阅读 · 7 评论 -
简单了解一下Spring MVC的执行流程
客户端发送请求,Spring MVC把该请求提交给DispatcherServletDispatcherServlet开始轮询HandlerMapping,通过请求的url路径找到能够处理请求的ControllerDispatcherServlet把请求提交给目标ControllerController开始处理业务逻辑,然后返回一个ModelAndView对象DispatcherServlet轮询ViewResolver视图解析器,找到ModelAndView对象对应的视图对象视图对象负责渲染,.原创 2020-08-14 21:26:02 · 120 阅读 · 0 评论 -
Spring Boot使用Redis-RedisTemplate这个类是怎么来的?
Spring Boot有一个很重要的特性就是自动装配,简单的理解就是Spring Boot会根据开发者导入的依赖,默认注入一些类来支持操作。类似Spring Boot整合Redis时,只需简单的在配置文件中写上Redis的服务器的地址密码等,然后直接使用RedisTemplate即可操作redis了。那么RedisTemplate这个类是怎么被注入IOC容器的呢?看看Redis的相关配置类RedisAutoConfiguration:@ConditionalOnMissingBean注解用来表示当原创 2020-08-13 18:45:51 · 669 阅读 · 0 评论 -
了解下多个拦截器的执行顺序
定义3个拦截器,如下:WebInterceptor1:import org.springframework.stereotype.Component;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;import javax.servle原创 2020-08-12 22:07:48 · 1138 阅读 · 0 评论 -
Spring Boot-获取请求头中的参数
head中的Accept参数如下:代码demo:@GetMapping("/getHead")@ResponseBodypublic void getHead(@RequestHeader("Accept") String accept) { System.out.println(accept);}访问接口,输出结果结果如下:Spring Boot可以通过@RequestHeader注解来获取请求头参数。...原创 2020-08-12 22:03:45 · 7566 阅读 · 0 评论 -
如果有版本号,可以试着设置在请求头参数中
如果开发中,接口有版本号,有时会直接加在接口路径上,如get /v1/student/id ,其中v1是版本号,student是学生信息,1则是学生编号,但是如果使用的是REST风格,这样的表达方式是错误的,因为在REST风格中资源的URI是唯一的,所以如果需要设置版本号,可以试着设置在请求头的参数中,如下:Accept: version = 1.0PS:以上结论是书上看到的,之前也是习惯把版本号写在路径上,看到这个结论,做个记录,有机会可以尝试下。...原创 2020-08-12 22:02:37 · 989 阅读 · 0 评论 -
了解Redis的Lua脚本简易使用
Redis的事务是弱事务,而且Redis提供的计算能力也不够强大,所以Redis在2.6版本后提供了Lua脚本的支持,而Lua脚本除了有更强大的计算能力,还能保证操作的原子性,因此如果碰到高并发场景,需要保证数据一致性,那么使用Lua脚本就恰到好处了。Redis运行Lua的两种方法直接发送Lua到Redis服务器执行把Lua发送到Redis,然后Redis对Lua脚本做缓存,返回一个SHA1的32位编码回来,之后只需要发送SHA1和相关的参数给Redis就可以执行了。第二种方案为什么选择返原创 2020-08-11 23:59:39 · 2871 阅读 · 0 评论 -
Redis怎么执行带参数的Lua脚本
开发中一般使用spring封装好的RedisTemplate去执行redis命令,那么看看RedisTemplate的execute()方法,发现有好几个重载的execute()方法,有一个重载的execute()方法可以执行带参数的Lua脚本,具体如下:public <T> T execute(RedisScript<T> script, RedisSerializer<?> argsSerializer, RedisSerializer<T> resul原创 2020-08-11 23:58:33 · 3070 阅读 · 2 评论 -
了解一下@SpringCloudApplication注解
@SpringCloudApplication注解信息如下:@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootApplication@EnableDiscoveryClient@EnableCircuitBreakerpublic @interface SpringCloudApplication {}可以发现@SpringCloudApplica原创 2020-08-11 23:57:04 · 1453 阅读 · 0 评论 -
Spring Boot-了解下Redis的发布订阅操作
先定义两个消息监听器,分别用来监听不同主题的消息用来监听主题topic消息的监听器TopicMessageListener,如下:import org.springframework.data.redis.connection.Message;import org.springframework.data.redis.connection.MessageListener;import org.springframework.stereotype.Component;@Componentpu.原创 2020-08-10 22:39:59 · 331 阅读 · 0 评论 -
简单了解Spring使用redis的事务
先简单了解下redis事务是怎么实现的,在Redis中使用事务,通常的命令组合是watch…multi…exec,watch命令是用来监控redis的一些键,multi命令是开始事务,这个命令被执行开始事务后,之后的操作命令会被存放在一个队列中,命令操作不会马上执行,exec命令是用来执行事务的,不过它在队列命令执行前会判断被watch监控的redis的键的数据是否发生过变化,如果它认为发生了变化,那么Redis会取消事务,否则就执行事务,而Redis在执行事务时,要么就全执行,要么就全部不执行,而且不会被原创 2020-08-10 22:24:35 · 449 阅读 · 0 评论 -
如何避免RedisTemplate多次获取的是不同的连接
如何避免RedisTemplate多次获取的是不同的连接,反过来的意思就是让同一个redis连接可以执行多个方法,这样就可以避免RedisTemplate获取的是不同连接了。使用RedisCallback或者SessionCallback接口类,代码demo如下:public void userRedisCallback() { redisTemplate.execute((RedisConnection redisConnection) -> { System.out.p原创 2020-08-10 22:22:08 · 1041 阅读 · 0 评论 -
Redis的key和value被序列化为特殊字符串或乱码问题解决
使用redis存入key为a,value为a的键值对时,通过redis的桌面管理器查看到的结果如下:可以发现key和value值都不是单纯的a,都包含了一些特殊的字符串,或者redis的桌面管理器换一种显示方式还会乱码,如下:通过修改RedisTemplate的序列化器来解决以上问题,写一个配置类RedisConfig,如下:import org.springframework.beans.factory.annotation.Autowired;import org.springframewo原创 2020-08-10 22:20:32 · 4413 阅读 · 1 评论 -
Spring Boot整合Redis
导入如下依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <!--排除redis的异步客户端lettuce--> <exclusions> <exclusion>原创 2020-08-10 22:18:27 · 200 阅读 · 0 评论 -
简单了解下Spring的传播级别NESTED是怎么实现的
传播级别NESTED的作用是在当前方法调用子方法时,如果子方法发生异常,只回滚子方法执行过的SQL,而不回滚当前方法的事务 。那该传播级别是怎么做到只回滚子方法执行过的SQL,而不回滚当前方法的事务的呢?大部分的数据库,可以在一段sql语句中设置一个标志位,如果后面的代码执行出现了异常,那么也只会把数据回滚到这个标志位所对应的数据状态,然后就不会再回滚了,所以在标志位之前对数据做的操作还会保留着。该标志位在数据库的概念被称为保存点,但是不是所有的数据库都支持保存点技术,所以当数据库不能支持保存点技术时,原创 2020-08-10 12:08:24 · 835 阅读 · 0 评论 -
了解一下事务的几种传播行为
以下是事务的几种传播行为的枚举,如下:package org.springframework.transaction.annotation;public enum Propagation { //支持事务,它是事务默认的传播行为,如果当前存在事务,就沿用当前事务,否则就新建一个事务运行子方法 REQUIRED(0), //支持事务,如果当前存在事务,就沿用当前事务,如果不存在,则继续采用无事务的方式运行子方法 SUPPORTS(1), //必须使用事务,如果当原创 2020-08-10 12:07:52 · 361 阅读 · 0 评论 -
使用TypeHandler转换枚举类型
先创建一个枚举类型,如下:public enum SexEnum { man(0, "男"), woman(1, "女"); private Integer code; private String codeName; SexEnum(Integer code, String codeName) { this.code = code; this.codeName = codeName; } public stat原创 2020-08-06 22:28:12 · 876 阅读 · 0 评论 -
怎么获取数据库连接池类型
注入一个类DataSourceShow,如下:import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.stereotype.Component;import javax.sql.D原创 2020-08-06 22:15:45 · 621 阅读 · 0 评论 -
Spring Boot-通过@ImportResource注解引入配置Bean的XML
有一个接口类Animal,如下:public interface Animal { void eat();}有一个实现类Cat,如下:@Servicepublic class Cat implements Animal { public Cat() { System.out.println("延迟依赖注入"); } @Override public void eat() { System.out.println("猫吃鱼原创 2020-08-06 22:14:23 · 1022 阅读 · 0 评论 -
Spring Boot-延迟依赖注入
有一个接口类Animal,如下:public interface Animal { }接口类Animal有一个实现类Cat,如下:import org.springframework.stereotype.Service;@Servicepublic class Cat implements Animal { public Cat() { System.out.println("延迟依赖注入"); }}有一个测试依赖注入的类,注入了Anima原创 2020-08-06 22:05:23 · 2119 阅读 · 0 评论 -
使用@Primary和@Qualifier灵活注入bean
如果一个接口有多个实现类,如下:一个Animal接口类:public interface Animal { void eat();}一个实现类Dog,如下:import org.springframework.context.annotation.Primary;import org.springframework.stereotype.Service;@Servicepublic class Dog implements Animal { @Override p原创 2020-08-06 12:23:16 · 646 阅读 · 0 评论 -
@Autowired的搜索规则
有一个Animal接口类如下:public interface Animal { void eat();}有一个Cat类实现了Animal接口,如下:import org.springframework.stereotype.Service;@Servicepublic class Cat implements Animal { @Override public void eat() { }}还有一个Dog类实现了Animal接口,如下:impor原创 2020-08-06 12:19:43 · 701 阅读 · 1 评论 -
Spring Boot-修改启动banner
先看看Spring Boot启动是默认的banner,如下:在resources文件夹下新增一个banner.txt文件,然后在里面写上自己想要使用的banner文本,我也是从网上搜了个有趣的banner,如下分享一下:////////////////////////////////////////////////////////////////////// _ooOoo_ ////原创 2020-08-06 12:17:15 · 290 阅读 · 0 评论 -
Spring Boot-异步线程池的使用
定义一个配置类,实现AsyncConfigurer接口,如下:import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.annotation.AsyncConfigurer;import org.springframew原创 2020-08-05 20:34:13 · 338 阅读 · 0 评论