Spring Boot
文章平均质量分 59
Spring Boot 为Spring推出的的微框架,具有一定的应用前景,本栏以入门学习及应用开发进行各方面进行介绍和讲解。
catoop
性格开朗外向,积极进取充满热情,为人诚恳做事用心,爱好手工实践和大自然。有较强的自学意识创新意识和进取精神。喜欢分享技术收获,虽然是一个知识的搬运工,但对技术孜孜不倦,什么都想搞什么都想做的劲头小伙,善于灵活的运用技术优雅的解决问题,善于表达乐于沟通,一切只因心中那殿力量努力向上。
展开
-
SpringBoot 注解 @AutoConfiguration 在 2.7 版本中被新增(使用方法)
自 Spring Boot 2.7.0 版本起,关于自动配置进行了较大调整,要特别注意,主要内容如下。原创 2024-09-26 19:08:54 · 433 阅读 · 0 评论 -
Oralce TIMESTAMP 类型转换为 JSON 失败 | oracle.sql.TIMESTAMP 问题
通过设置属性,可以使 oracle 的 timestamp 类型字段以类型返回,不设置时默认false,返回,可能会导致序列化时类型转换失败等问题。(END)原创 2024-04-12 17:49:50 · 505 阅读 · 0 评论 -
springboot 注入配置文件中的集合 List、Map
注意:如果map的key是0开头的,在自动注入map后,前面的0会被自动去除,这个要特别注意,你可以使用。如果实在不想单独出来一个Java类,你直接把。2、application.yml 配置文件。那么我们如何注入集合呢,这里我们需要使用。来将key包括起来,来避免0被去除的问题。的 Java 类上也是可以的,3、创建对应的Java对象。4、注入Java对象使用。原创 2023-11-02 13:39:27 · 1799 阅读 · 0 评论 -
Spring @DependsOn 和 @ConditionalOnBean 的区别
最终两个实例都会创建,它用来控制当前Bean 一定在 DependsOn 所指向的Bean后面实例化。只有当所指向的Bean的实例存在时,才创建当前Bean,否则不创建。即要么都有,要么都无。1、都是当前bean实例化依赖另外的bean实例。在 Spring 中,注解。原创 2023-10-09 19:23:13 · 691 阅读 · 0 评论 -
SpringBoot - Google EventBus、AsyncEventBus
EventBus 顾名思义,事件总线,是一个轻量级的发布/订阅模式的应用模式,最初设计及应用源与 google guava 库。相比于各种 MQ 中间件更加简洁、轻量,它可以在单体非分布式的小型应用模块内部使用(即同一个JVM范围)。原创 2023-08-30 17:47:27 · 1181 阅读 · 0 评论 -
Spring Boot 禁用内嵌的 Web容器(Tomcat)
默认情况下,Spring Boot会将Tomcat作为默认的嵌入式容器,如果你希望将 springboot 打包部署到其他外部容器中(例如 WebLogic)。除了可以在 pom 中排除 tomcat 依赖这种方法之外,还可以在不拍除依赖的情况下,通过配置来禁用已经打包进 springboot 的内嵌 Web 容器。原创 2023-05-24 10:12:33 · 856 阅读 · 0 评论 -
Spring Boot 配置文件配置自动提示 Configuration Processor
*** 测试配置类*/@Data@Component/*** 唯一ID*//*** 名称*//*** 标志位*/其中属性上面的Java注释最终会自动生成到元数据文件中,所以请严格添加注释描述。原创 2023-04-03 20:30:42 · 1882 阅读 · 0 评论 -
Spring Boot 接口统一前缀 path-prefix
需求如题,想给一个 spring boot 项目的所有请求路径添加统一前缀,可以通过 context-path 来配置。但是在同时存在静态资源和 Controller 接口的项目中,如果希望静态资源从根路径访问,并且所有接口拥有统一路径前缀,则需要通过 Spring 层面来解决这个问题(context-path 是 web 容器层面的,如果配置它则会把静态资源都包含进去)。如上URL示例中,希望放在 springboot 根目录 static 中的静态资源能直接通过根路径访问。也可以是多级路径,例如。原创 2023-03-20 16:13:32 · 7357 阅读 · 0 评论 -
Spring Boot JDBC 参数别名 SQL(NamedParameterJdbcTemplate)
如果是某项目使用的原生 Spring 框架,没有使用 springboot 自动配置,在尝试直接注入。除此之外,Spring 还提供了另外一种可以为参数定义别名来为 SQL 提供参数的方式,就是使用。时发现 spring 容器中没有该类对象时。则可以通过自行构造对象的方法来实例化对象,可以使用。上文我们使用 JdbcTemplate 来操作数据库SQL,在 SQL 语句中传递参数使用。总结就是添加相关依赖,然后配置 properties 文件的数据源,最后直接注入。,本文简述在 SQL 中使用别名参数。原创 2023-01-09 19:31:04 · 865 阅读 · 0 评论 -
springboot 部署到 weblogic 中 jar 包冲突
其中存放了一些第三方的默认的 jar 包,项目启动过程中默认是先加载这里的 jar 包,再加载项目工程中的 jar 包,因为你无法保证项目工程中的 jar 包和 weblogic 中的 jar 包版本刚好一致,所以就因为 jar 包版本不一致出现了比较常见的类加载冲突的问题。某项目,客户要求使用已有的 weblogic 部署已经开发好的 springboot,于是乎对 springboot 进行了部分配置的调整,主要包括去除 tomcat 依赖,增加启动类的处理。经过定位,weblogic 有个目录。...原创 2022-08-09 10:33:13 · 1561 阅读 · 0 评论 -
spring webflux 和 webservice 同一个工程
基于 SpringBoot 创建一个 SOAP WebService 服务的步骤之前发布过在 springboot 中基于 jaxws 发布 WebService 的文章,是基于注解式的(cxf封装过的starter)。如果你的 springboot 使用的是 reactor 的 webflux 模式开发的,使用那种方式会出现不兼容的问题。本文示例是在应用 webflux 的 springboot 中发布 WebService。1.初始化一个原始的 springboot 工程创建一个基础的 spr原创 2022-05-09 19:54:32 · 468 阅读 · 1 评论 -
SpringBoot 发布 WebService
使用 SpringBoot 发布一个 WebService 很简单,主要分为三步:1、添加依赖 <!-- WebService --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web-services</artifactId> </dependency>原创 2022-04-07 15:00:49 · 1738 阅读 · 0 评论 -
Spring @Configuration proxyBeanMethods=false
开门见山,本文没有原理只有结果,要点如下:1、proxyBeanMethods=true,Full 全模式,如不指定则默认为 true,@Bean 修饰的方法会被代理。2、proxyBeanMethods=false,Lite 轻量级模式,@Bean 修饰的方法不会被代理。。3、仔细观察 proxyBeanMethods 这个词语,顾名思义,是代理方法的(仅指代被 @Bean 注解的方法哦),所以它的作用肯定是跟当前这个 @Configuration 中的 Bean方法有关的。4、在同一个 @Con原创 2021-11-04 12:29:03 · 3110 阅读 · 1 评论 -
SpringBoot 自定义starter @AutoConfigureBefore、@AutoConfigureAfter、@AutoConfigureOrder 不生效问题
如题,关于 @Configuration 三大件 @AutoConfigureBefore、@AutoConfigureAfter、@AutoConfigureOrder 的具体详解,本文不做赘述,可自行科普。本文目的是为了陈述一个使用这三大件注解时非常容易触发的一个问题点 “如题,不生效” 的结论,直接说结论,就知道如何避免了。本文发生的问题,主要是在你编写一个自己的 starter 包的时候容易出现。本文所有代码的前提场景是自定义 starter 时候出现这样的问题,如果你不是自定义 star原创 2021-11-04 12:10:54 · 1480 阅读 · 0 评论 -
springboot 打包后乱码
症状开发工具里启动运行,访问页面查看数据,中文显示正常。然后进行 mvn 打包,打包后,通过 java -jar xxx.jar 在 cmd 中启动后,浏览器访问页面,数据内容显示乱码。解决方法启动 springboot jar 包的时候,增加一个编码参数java -Dfile.encoding=UTF-8 -jar xxx.jar产生乱码问题的原因可能有很多,这个方法可能刚好对症下药解决你的问题,也可能不能,但是可以确定的是,它肯定是刚好能解决一种乱码场景问题的方法。试一试吧,但愿能解决原创 2021-10-28 13:33:44 · 8608 阅读 · 0 评论 -
springboot 日志 logging.file.name、logging.file.path和actuator/logfile
首先对 logging.file.name 和 logging.file.path 进行一下说明,但是它俩的区别并不是本文的重点。1、logging.file.name 设置具体输出的日志名称,可以是绝对路径或者基于当前运行目录的相对路径,例如:logging.file.name=app.log、logging.file.name=/var/log/hello-service/app.log2、logging.file.path 设置输出的日志被写入到的目录,默认文件名为 spring.log,例如:l原创 2021-08-05 17:11:42 · 7946 阅读 · 3 评论 -
Linux ssh localhost 免密登录(基于JSch实现webssh场景)
背景看到这个标题,你可能很奇怪,已经登录到Linux上了,为什么还要 ssh localhost,这个问题要从一个需求说起。需求是这样的:某一个springboot开发的带有界面的管理后台,有一个功能需求叫 “SSH控制台”,要求点击这个功能的时候,呈现一个黑色的和我们日常使用其他 shell 工具看到的界面一样的界面,并且要自动连接到这个 springboot 所在的 Linux 控制台,要点是自动进入,不需要输入任何host和账号密码。效果如下截图:浏览器前端这个效果,是通过 xterm.原创 2021-07-07 17:21:43 · 1852 阅读 · 2 评论 -
SpringBoot Nacos 读取不到配置(版本2.4.6)
现象按照官方文档 https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html 进行配置后,抛异常报错,无法获取配置。所有依赖配置如下:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"原创 2021-06-03 20:14:59 · 6260 阅读 · 7 评论 -
Sleuth 3.x 版本 MDC parentId 到 logback
关于 sleuth 是什么,以及它的 traceId、spanId、parentId 这3个字段的作用,这里就不做赘述了,本文是为了解决一个需求场景:在 logback 中输出 parentId。因为官方默认只讲 traceId 和 spanId 包装进了 Scope 中,所以在 MDC 中国获取不到 parentId,好在官方为我们留了很多后门,让我们可以巧妙的通过接口的方式来添加和自定义其他属性(本文虽然只是添加了 parentId,但是更重要的是给大家提供一个思路,以便于可以添加其他自定义属性)。原创 2021-04-07 13:57:02 · 1462 阅读 · 0 评论 -
Spring Cloud Sleuth 配置说明
名称默认值说明spring.sleuth.async.configurer.enabledtrue启用默认的AsyncConfigurer.spring.sleuth.async.enabledtrue启用检测与异步相关的组件,以便在线程之间传递跟踪信息.spring.sleuth.async.ignored-beans{@link java.util.concurrent.Executor} Bean名称列表,应忽略这些名称,而不应将它们包装在跟踪表示中...原创 2021-04-07 13:01:51 · 2845 阅读 · 0 评论 -
基于OAuth的PKCE授权码模式(增强安全)
假设某一个原生客户端(即没有服务端的纯桌面应用程序、安卓、IOS等)需要接入第三方OAuth2.0的需求(code 授权码模式)。首先按照OAuth2.0授权码模式的标准,需要按如下顺序工作:这个客户端首先需要请求OAuth提供商的获取code的URL。服务提供商弹出登录页面。用户登录或确认授权。原生客户端截获服务提供商 redirect_uri 地址并获取code。原生客户端使用 code 调用服务提供商的接口换取 token。那么问题来了,第5步的时候,大家都知道使用 code 换取原创 2021-02-25 14:48:54 · 6526 阅读 · 2 评论 -
SpringBoot 集成 WebSocket
整体集成起来非常简单,示例如下:1、创建一个基础的 springboot 工程(略)2、配置 pom 依赖<!--WebSocket--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId></dependency><!-原创 2021-01-14 11:07:13 · 962 阅读 · 4 评论 -
Prometheus 报错 Error refreshing service Unexpected response code: 503 解决办法
现状使用 Prometheus 通过 consul 对 springboot 微服务实例指标进行采集,然后准备显示到指标图中,主要包括了如下几个步骤:微服务仍然使用的是 eureka,因 Prometheus 仅支持 consul 自动发现微服务实例,所以对 eureka 集成了 consul。微服务 springboot 添加 Prometheus 依赖。Prometheus 添加基于 consul 的采集配置(连接到 eureka)。启动 Prometheus 采集指标,出现了本文标题的错误原创 2020-11-19 09:14:24 · 2668 阅读 · 0 评论 -
SpringCloud Ribbon 负载均衡策略 和 listOfServers
介绍画了一个示意图,整体表达一下 Feign 和 Ribbon 在微服务调用中的关系和角色。Ribbon 是一个客户端负载均衡器,它可以在客户端配置 ribbonServerList(服务端列表)或者直接从注册中心获取服务列表,然后根据负载均衡规则(目前系统提供了7种规则)以实现均衡负载。Feign 是一个使用起来比较方便的 HTTP 客戶端,它用起來就好像调用本地方法一样,默认基于 RestTemplate 进行 HTTP 接口调用。对于 Ribbon 的负载均衡策略,系统默认提供了7种规原创 2020-11-13 17:26:05 · 7254 阅读 · 0 评论 -
maven 子模块排除 spring-boot-maven-plugin
场景有maven项目A项目A下面有模块B、C、D、E、Fmaven A 配置了插件 spring-boot-maven-plugin 希望其下的所有模块都自动执行现在新增了一个模块 G,模块 G 不希望继承执行这个插件在不锈钢 maven A 的情况下,按照如下配置可以对 G 禁用不执行插件 spring-boot-maven-pluginMaven A的配置如下 <build> <plugins> <plugin> <group原创 2020-09-21 15:42:18 · 4238 阅读 · 0 评论 -
在idea中直接构建并运行docker到服务器
步骤服务器配置docker远程连接创建springboot demo工程创建Dcokerfile文件配置idea的docker运行配置编译springboot构建并运行docker截图下面是截图,按照上面的步骤顺序对应服务器配置dockervim /usr/lib/systemd/system/docker.service添加 -H tcp://0.0.0.0:2375 如下ExecStart=/usr/bin/dockerd -H fd:// --containerd=/ru原创 2020-09-21 15:04:48 · 2386 阅读 · 0 评论 -
Hystrix Feign 父子线程数据传递、Feign Header的添加
问题场景微服务A通过feign调用微服务B使用了Hystrix并开启了线程池隔离模式,所以A调用B的请求会单独起一个子线程的方式去调用现在需要将微服务A中ThreadLocal里的数据,放入feign请求B时的http header中(这里的http请求会在子线程中)要解决如上问题,需要做两件事情找到可以给feign调用添加header的切入点,在这里获取主线程ThreadLocal中的数据并添加到header中找到Hystrix开启新的子线程的切入点,在线程执行run方法的先后分别做数据原创 2020-09-18 17:20:10 · 3093 阅读 · 1 评论 -
Spring Cloud Gateway 处理重复Header的方法(CORS policy: The ‘Access-Control-Allow-Origin‘ header has a……
问题现状首先发现问题的原始点是浏览器进行 ajax 请求的时候出现跨域问题,经查看请求报文和错误确定是 Access-Control-Allow-Origin 出现了多个值(浏览器目前是不允许的),其原因是是在 gateway 中配置过了 Access-Control-Allow-Origin,后端服务的开发人员也配置了 Access-Control-Allow-Origin,导致 response 在响应的时候 Access-Control-Allow-Origin 出现了多个值(不管两个值相同还是不同原创 2020-08-30 18:33:12 · 7359 阅读 · 8 评论 -
springboot docker 输出日志乱码问题
问题就是这么个问题,日志中文乱码,一串问号。解决方案:通过添加启动参数设定编码,如下java $JAVA_OPTS -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom -jar app.jar其他参数是我自己使用的,注意其中设置编码的2个参数 -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UT原创 2020-08-03 19:02:32 · 2943 阅读 · 1 评论 -
SpringBoot 关于Feign的超时时间配置
无独有偶,我今天也遇到了一个关于 feign 超时时间配置的问题。今天项目现场提过来一个问题 “公司发过来的封装好的 springboot 项目中的 feign 调用超时时间需要修改”,细问之后,具体的需求场景是这样的:1、首先要对 feign 的超时时间做设置2、然后具体的要求是,只要对某一个微服务的其中一个接口进行特殊配置,对其余的所有接口做一个统一配置公司 feign 版本 spring-cloud-starter-openfeign 2.2.3.RELEASE基于 @FeignClien原创 2020-07-30 20:09:56 · 19210 阅读 · 0 评论 -
Spring Boot 配置文件加载的优先级和指定多个外部配置文件
项目配置很多,所以对配置归类到了不同的配置文件中,如下:springboot 默认加载的配置文件为 application.properties ,为了正常加载其他配置文件,在启动类上做了如下引用处理:@SpringBootApplication@PropertySources({ @PropertySource(value = "mybatis.properties", ignoreResourceNotFound = true), @PropertySource(value = "co原创 2020-07-28 17:40:23 · 4006 阅读 · 1 评论 -
SpringBoot 2.x 多数据源动态数据源,升级优化实现
背景:1、四年多之前我写过一块多数据源的,随着框架的升级,技术的进步,已经不能很好的满足需求2、现在自身对这块又重新进行了回忆,发现很多内容可以优化改造3、公司项目中现在又有此需求,所以对此进行了重要代码的优化改造结果:就优化结果来看,个人觉得几乎已经接近完美,优化升级事项说明1、完善连接池参数实现,调整了参数配置文件的配置,采用数组方式兼容yml文件2、支持为每个数据源分别配置连接池参数3、注解 @TargetDataSource 更名为 @DataSource4、支持类级别、方法级别、原创 2020-05-28 18:14:36 · 1711 阅读 · 1 评论 -
Springboot Mybatis 输出SQL
配置文件配置如下:# 控制台输出SQL语句,调试用mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl注意:正式环境不推荐使用!(END)原创 2020-05-26 18:59:15 · 1110 阅读 · 2 评论 -
jacoco+maven+sonar+springboot 单元测试代码覆盖率统计
如题,你能看到本文,说明你应该对本文涉及的框架和组件已经初步了解。总的来说,本文所述集成方案是对代码的单元测试用例执行覆盖率进行检测统计,主要是用来对开发人员单元测试用例编写程度的一种检测。其整体过程大概可以分为:1、使用 jacoco 代理,在 maven 执行之前植入 jacoco 代理。2、maven 对项目进行编译打包,并自动执行单元测试用例(如 junit)。3、测试用例执行...原创 2020-02-19 17:09:46 · 7023 阅读 · 7 评论 -
Spring Boot 集成 Prometheus
Prometheus是一个根据应用的metrics来进行监控的开源工具。其原理使用主动采集服务暴露的指标接口的方式拉取指标数据,所以需要给需要被监控的服务暴露数据指标接口,对于SpringBoot服务,集成起来非常简单,如下:一、为pom添加依赖 <!-- prometheus --> <dependency> <groupId>org.spri...原创 2020-01-14 10:44:51 · 4101 阅读 · 0 评论 -
SpringBoot mybatis批量插入数据库(去重场景)
本文记录一个实例:1、用户邀请码表,里面存邀请码和关联的用户编号,每次有用户注册,就领取(关联)一个邀请码。邀请码都是系统提前生成空挡在表里待分配的(不要问为什么,目前业务就是这样设计的)。2、系统初始化的时候,或者空闲的邀请码快不够用的时候,会需要追加生成一批邀请码入库。一般系统上线的时候直接入库几十万或者几百万妥妥了。代码实现步骤:1、在 Controller 请求,调用Service...原创 2019-07-05 09:12:02 · 10599 阅读 · 0 评论 -
SpringBoot validator 完美实现+统一封装错误提示
1、杜绝通篇 if else 参数判断!!!2、普通参数方式3、实体对象参数方式效果参数不合法,自动使用统一异常返回错误,例如:{ "code": "-3", "message": "参数{age}最小18"}实现代码代码一次性给全,主要包含如下几个Java类,拿过去拷贝到项目中就能用:1、ValidatorController2、ValidatorVo3、...原创 2019-07-10 19:23:21 · 21799 阅读 · 3 评论 -
Spring日志输出级别的热更新
这个问题是我曾经的一个问题,虽然比较容易解决,但是一直没有去写下来。问题是这样的:一般在开发环境下使用DEBUG级别的日志输出是为了方便查看问题,而在线上一般都使用INFO、WARN、ERROR级别的日志,主要记录业务操作或者错误的日志。下面两种场景:1、针对上面问题所述的情况,我们正常的操作是这样的:》开发的时候本地修改日志输出级别,如果打的包是上生产环境的包(不管你用手工还是CI打包...原创 2019-07-03 09:29:36 · 3556 阅读 · 0 评论 -
SpringBoot之Dockerfile应用
本文只是做一个示例,所以不做太多详解,基本都是一看就明白的一、创建工程文件1、正常创建一个springboot工程2、创建一个TestController测试类,用户在我们部署docker之后访问验证使用3、创建Dockerfile文件如图:二、打包和测试1、先单纯的打包工程,验证测试类是否能正常访问#打包mvn clean package -Dmaven.test.skip=...原创 2019-04-28 23:47:09 · 17956 阅读 · 4 评论 -
SpringBoot AOP 记录WEB请求日志
接上一篇文章: http://blog.csdn.net/catoop/article/details/71541612实现AOP的切面主要有以下几个要素:使用@Aspect注解将一个java类定义为切面类 使用@Pointcut定义一个切入点,可以是一个规则表达式,比如下例中某个package下的所有函数,也可以是一个注解等。 根据需要在切入点不同位置的切入内容 使用@Before在切入点原创 2017-05-10 17:52:29 · 11831 阅读 · 4 评论