202202-28 springboot如何使用@Value获取配置文件的值 使用@Value获取配置文件的值1、创建配置文件(application.properties)spring.activemq.broker-url=tcp://localhost:61616spring.activemq.user=adminspring.activemq.password=adminspring.activemq.in-memory=truespring.activemq.pool.enabled=false2、创建测试类(MyController.java)packagecom.jeff.controller;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.web.bind.annotatio... 继续阅读 >
202202-28 springboot如何使用@ConfigurationProperties封装配置文件 使用@ConfigurationProperties封装配置文件业务场景:把配置文件的信息,读取并自动封装成实体类,可以使用@ConfigurationProperties,把同类的配置信息自动封装成实体类。1、在pom.xml中添加依赖包<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency>2、创建配置文件(application.properties)wx.appid... 继续阅读 >
202202-24 jpa介绍以及在spring boot中使用详解 目录1.什么是jpa呢?2.jpa具有什么优势?2.1标准化2.2容器级特性的支持2.3简单方便2.4查询能力2.5高级特性3.基于注解的使用3.1JPA拥有哪些注解呢?4.代码实战4.1maven依赖4.2配置文件4.3创建实体以及数据访问接口总结1.什么是jpa呢?JPA顾名思义就是JavaPersistenceAPI的意思,是JDK5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。2.jpa具有什么优势?2.1标准化JPA是JCP组织发布的JavaE... 继续阅读 >
202202-21 spring redis 如何实现模糊查找key springredis模糊查找key用法Set<String>keySet=stringRedisTemplate.keys("keyprefix:"+"*");需要使用StringRedisTemplate,或自定义keySerializer为StringRedisSerializer的redisTemplateredis里模糊查询key允许使用的通配符: *任意多个字符 ?单个字符 []括号内的某1个字符源码org.springframework.data.redis.core.RedisTemplate... 继续阅读 >
202202-12 Nacos+Spring Cloud Gateway动态路由配置实现步骤 目录前言一、Nacos环境准备1、启动Nacos配置中心并创建路由配置2、连接Nacos配置中心二、项目构建1、项目结构2、编写测试代码三、测试动态网关配置1、启动服务,观察注册中心2、访问网关,观察服务日志四、总结前言Nacos最近项目一直在使用,其简单灵活,支持更细粒度的命令空间,分组等为麻烦复杂的环境切换提供了方便;同时也很好支持动态路由的配置,只需要简单的几步即可。在国产的注册中心、配置中心中比较突出,容易上手... 继续阅读 >
202202-12 Spring Cloud Gateway自定义异常处理Exception Handler的方法小结 版本:SpringCloud2020.0.3常见的方法有实现自己的DefaultErrorWebExceptionHandler或仅实现ErrorAttributes.方法1:ErrorWebExceptionHandler(仅供示意)自定义一个GlobalErrorAttributes:@ComponentpublicclassGlobalErrorAttributesextendsDefaultErrorAttributes{@OverridepublicMap<String,Object>getErrorAttributes(ServerRequestrequest,ErrorAttributeOptionsoptions){Throwableerror... 继续阅读 >
202202-11 spring boot基于注解的声明式事务配置详解 事务配置1、配置方式一1)开启spring事务管理,在springboot启动类添加注解@EnableTransactionManagement(proxyTargetClass=true);等同于xml配置方式的<tx:annotation-driven/>(注意:1项目中只需配置一次,2需要配置proxyTargetClass=true)2)在项目中需要添加事务的类或方法上添加注解@Transactional(建议添加在方法上),一般使用默认属性即可,若要使用事务各属性可查看spring事务官方文档了解2、配置方式二(指定事... 继续阅读 >
202202-11 如何使用Spring AOP预处理Controller的参数 SpringAOP预处理Controller的参数实际编程中,可能会有这样一种情况,前台传过来的参数,我们需要一定的处理才能使用比如有这样一个Controller@ControllerpublicclassMatchOddsController{@AutowiredprivateMatchOddsServciematchOddsService;@RequestMapping(value="/listOdds",method=RequestMethod.GET,produces={MediaType.APPLICATION_JSON_VALUE})@ResponseBodypublicList<OddsModel>li... 继续阅读 >
202202-11 使用spring boot 整合kafka,延迟启动消费者 springboot整合kafka,延迟启动消费者springboot整合kafka的时候一般使用@KafkaListener来设置消费者,但是这种方式在spring启动的时候就会立即开启消费者。如果有需要根据配置信息延迟开启指定的消费者就不能使用这种方式。参考了类:KafkaListenerAnnotationBeanPostProcessor,我提取了一部分代码。可以根据需要随时动态的开启消费者。还可以很方便的启动多个消费者。为了方便使用,我自定义了一个注解:importorg.springfra... 继续阅读 >
202202-11 基于Spring AOP proxyTargetClass的行为表现总结 SpringAOPproxyTargetClass的行为要点列表形式proxyTargetClasstrue目标对象实现了接口–使用CGLIB代理机制目标对象没有接口(只有实现类)–使用CGLIB代理机制false目标对象实现了接口–使用JDK动态代理机制(代理所有实现了的接口)目标对象没有接口(只有实现类)–使用CGLIB代理机制表格形式proxyTargetClass目标对象特征代理效果... 继续阅读 >
202202-10 Spring Boot实现数据访问计数器方案详解 目录1、数据访问计数器2、代码实现2.1、方案说明2.2、代码2.3、调用1、数据访问计数器 在SpringBoot项目中,有时需要数据访问计数器。大致有下列三种情形:1)纯计数:如登录的密码错误计数,超过门限N次,则表示计数器满,此时可进行下一步处理,如锁定该账户。2)时间滑动窗口:设窗口宽度为T,如果窗口中尾帧时间与首帧时间差大于T,则表示计数器满。 例如使用redis缓存时,使用key查询redis中数据... 继续阅读 >
202202-10 Spring WebFlux实现参数校验的示例代码 请求参数校验,在实际的应用中很常见,网上的文章大部分提供的使用注解的方式做参数校验。本文主要介绍SpringWebfluxFunctionEndpoint使用SpringValidation来校验请求的参数。使用上一篇文章的示例来演示。使用步骤如下:1.创建校验器Validator2.运用校验器3.抛出异常,返回httpstatus400错误PersonValidator.javapackagecom.example.springbootdemo.webflux.restful;importorg.springframework.stereotype.Compone... 继续阅读 >
202201-22 解决spring jpa中update的坑 springjpa中update遇到的坑使用jpa自己编写update语句,遇到问题:1.在同一个service事物中,先执行保存,在执行更新,紧接着执行查询--查询结果为更新前的结果。2.执行自定义update方法结束后执行查询查出结果依然为update前的结果集解决问题所在:自定义update并未清空实体缓存。注解@Modifying加参数eg:@Modifying(clearAutomatically=true)jpa更新问题记录使用jpa去更新:@Modifying(clearAutomatically=true),@Transa... 继续阅读 >
202201-17 spring @Lazy延迟注入的逻辑实现 目录前言一、一个简单的小例子二、源码解读1.注入2.使用逻辑总结前言有时候我们会在属性注入的时候添加@Lazy注解实现延迟注入,今天咱们通过阅读源码来分析下原因一、一个简单的小例子代码如下:@ServicepublicclassNormalService1{@Autowired@LazyprivateMyServicemyService;publicvoiddoSomething(){myService.getName();}}作用是为了进行延迟加载,在NormalService1进行属性注入的时候,如果MyService还没有生... 继续阅读 >
202201-12 解决Spring JPA 使用@transaction注解时产生CGLIB代理冲突问题 SpringJPA使用@transaction注解时产生CGLIB代理冲突在使用JPA进行数据库的删除操作时需要使用@Transactional注解来支持事物:@Modifying@Transactional@Query("deletefromFollowerInfo"+"wherecrmAuth=:crmAuthandinvestUserId=:invUserId")voiddeleteByCrmAuthAndInvUserId(@Param("crmAuth")StringcrmAuth,@Param("invUserId")LonginvUserId);但是,在添加了如上方法后,测试服务... 继续阅读 >
202201-06 spring boot ${}占位符不起作用的解决方案 springboot${}占位符不起作用问题:在pom.xml文件里定义好属性标签,然后在properties或者xml中使用${key}引用,打包之后就会自动替换掉。但是在使用springboot后发现,@可以替换,但是${…}替换不了。分析:springboot设置了默认值。解决:在pom文件中自己定义delimitersspringboot配置文件占位符1、随机数#idea配置文件默认是utf-8person.name=random.uuidperson.age={random.uuid}person.age=... 继续阅读 >