
Spring
文章平均质量分 55
Spring的一些个人总结
刘华鹏0304
00后Java工程狮一枚,喜欢瞎琢磨
展开
-
快来,一起复习一下JDK动态代理和CGLib动态代理的区别
1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理2、如果目标对象实现了接口,也可以强制使用CGLIB3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换如果需要强制使用CGLIB来实现AOP,需要配置spring.aop.proxy-target-class=true或@EnableAspectJAutoProxy(proxyTargetClass = true参考。原创 2023-06-01 15:21:52 · 971 阅读 · 0 评论 -
快进来,一起来复习一下单例多例
个人感觉学习知识,要知道他的优缺点。从而考虑在不同场景下的应用。不能死板硬套。原创 2023-05-30 13:49:54 · 175 阅读 · 0 评论 -
Feign的底层原理
2.@FeignClient(value = “CMS_ADMIN”)即制定了服务名称,Feign会从注册中心获取服务列表,并通过负载均衡算法进行服务调用。1.启动类添加@EnableFeignClients注解,Spring会扫描标记了@FeignClient注解的接口,并生成此接口的代理对象。原创 2023-05-25 12:14:51 · 190 阅读 · 0 评论 -
Spring 中的 @Cacheable 缓存注解
第一个问题,首先要搞明白什么是缓存,缓存的意义是什么。对于普通业务,如果要查询一个数据,一般直接select数据库进行查找。但是在高流量的情况下,直接查找数据库就会成为性能的瓶颈。因为数据库查找的流程是先要从磁盘拿到数据,再刷新到内存,再返回数据。磁盘相比于内存来说,速度是很慢的,为了提升性能,就出现了基于内存的缓存。这种基于内存的缓存,由于无法跟磁盘频繁进行存储,所以无法保证数据的完整性,随时有可能丢失,所以架构一般使用数据库加缓存的方式,数据库用来持久化数据,缓存用来处理大流量。原创 2023-03-29 10:33:09 · 1479 阅读 · 0 评论 -
Spring 中事务的嵌套详解
5.1 事务方法访问修饰符不是public,导致事务失效比如 下图中的代码其实如果是JDK的动态代理 就不允许这种情况,因为JDK动态代理需要有接口,而接口中是不能有 私有方法的,如果是CGLIB动态代理的话也是不允许的代理private方法的5.2 如果事务方法是static、final的,同样无法通过动态代理,事务也是不会生效的。Spring的声明式事务是基于动态代理实现的,我们无法重写final修饰的方法;原创 2023-03-29 09:50:05 · 2310 阅读 · 0 评论 -
@Configuration 和 @Component 的区别
@Configuration 中所有带 @Bean 注解的方法都会被动态代理,因此调用该方法返回的都是同一个实例。:调用@Configuration类中的@Bean注解的方法,返回的是同一个示例;而调用@Component类中的@Bean注解的方法,返回的是一个新的实例。原创 2023-02-24 10:30:54 · 921 阅读 · 0 评论 -
SpringBoot读取配置的几种方式
读取application文件在application.yml或者properties文件中添加:info.address=USAinfo.company=Springinfo.degree=high使用@Value注解读取方式@Value("info.address")private String address;@Value("info.company")private String company;@Value("info.degree")private String d原创 2022-05-17 09:36:48 · 1730 阅读 · 0 评论 -
SpringBoot单元测试指定运行环境
1.配置文件直接指定在配置文件中直接指定运行环境spring: profiles: active: dev2.在单元测试的启动项配置-Dspring.profiles.active=dev这种方法可以对同一个类不同方法配置多个环境。粒度比较细小3.直接代码硬配置在类上 @ActiveProfiles(“prod”),作用于整个类。@RunWith(SpringRunner.class)@SpringBootTest@ActiveProfiles("dev")publi原创 2022-02-11 10:19:34 · 8172 阅读 · 0 评论 -
本地和apollo相同的配置相同的key,springboot会优先读取哪个
亲测,如果本地和apollo相同的key,优先获取apollo的。如果需要本地配置读取优先于apollo配置那么就要想办法 把dubbo的注册中心地址切换成本地,就是要高于apollo的配置,可以在 main class 配置启动参数,这个优先级高于 apollo拉取的配置。并且测试类调试的时候,可按照如下参数配置,即可调用本地服务接口进行调试。优先度调整方法转自:https://www.jianshu.com/p/972b92ae6fe2...原创 2022-02-09 14:21:48 · 3332 阅读 · 0 评论 -
@Valid注解作用,为什么@NotNull会失效呢
作用@Valid,主要是用来校验绑定的参数是否符合预订的要求用法:通常用于controller层,入口处bean校验,如:非空校验下面这个例子,就是用于非空校验 @PostMapping("/queryStoreList") @ApiOperation(value = "查询店铺列表") @RequireLogin public Response<List<HapiQueryStoreListResp>> queryStoreList(@Req原创 2022-01-18 13:50:42 · 3800 阅读 · 0 评论 -
SpringBoot自动装配原理
1.@SpringBootApplication注解我们发现自己的boot项目都有这个注解。进入里面可以发现有三个注解。@SpringBootConfiguration:我们点进去以后可以发现底层是Configuration注解,说白了就是支持JavaConfig的方式来进行配置(使用Configuration配置类等同于XML文件)。@EnableAutoConfiguration:开启自动配置功能@ComponentScan:这个注解,学过Spring的同学应该对它不会陌生,就是原创 2021-07-26 11:04:56 · 1857 阅读 · 2 评论 -
springCloud熔断怎么使用?
1.开启熔断# 开启熔断feign.hystrix.enabled=true2.feign客户端@FeignClient(name = "java-xiaoliu-support",fallback = ChannelFeignClientFallback.class)public interface ChannelFeignClient {}3.降级类@Componentpublic class ChannelFeignClientFallback implements Chann原创 2021-07-06 14:57:39 · 3640 阅读 · 0 评论 -
Feign和Ribbon的区别
feign和ribbon是Spring Cloud的Netflix中提供的两个实现软负载均衡的组件,Ribbon和Feign都是用于调用其他服务的,方式不同。Feign则是在Ribbon的基础上进行了一次改进,采用接口的方式。feign 和 ribbon 是 Spring Cloud 的 Netflix 中提供的两个实现软负载均衡的组件,Ribbon 和 Feign 都是用于调用其他服务的,方式不同。Feign 则是在 Ribbon 的基础上进行了一次改进,采用接口的方式,将需要调用的其他服务的方法定义成转载 2021-06-21 15:20:25 · 3496 阅读 · 0 评论 -
@PathVariable和@RequestParam的区别?
首先我们看一下请求样式的不同:@PathVariable:/app/query/business/month这里的month 是占位符。 以下是服务端的接收@RequestMapping (value ="/app/query/business/{date}" , method = RequestMethod. GET )@ResponseBodypublic String queryBusiness( @PathVariable ( "date" ) String date ) @Reque原创 2021-05-11 14:24:24 · 2709 阅读 · 0 评论 -
编程式事务和声明式事务的区别
声明式事务:就是在aop的基础上,受aop管理的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过基于@Transactional注解的方式),便可以将事务规则应用到业务逻辑中。编程式事务:所谓编程式事务指的是通过编码方式实现事务,即类似于JDBC编程实现事务管理。管理使用Transac.原创 2021-03-05 15:36:26 · 6004 阅读 · 0 评论 -
SpringCloud,Feign远程调用某个服务的超时设置
起因:有个接口里面包了四个接口,去调用别人的服务,其中有一个接口可能会很慢,导致前端的超时机制触发,这个接口的所有参数置空。目的:feign调用服务超时调节解决方案:在接口所在服务配置文件中配置feignfeign: client: config: #default 默认所有服务。如果需要更改,直接换成调用方的服务名 default: connect-timeout: 10000 read-timeout: 20000 .原创 2021-02-23 11:09:05 · 4143 阅读 · 4 评论 -
springboot并发编程CountDownLatch配合异步线程池使用
1. 首先在项目配置异步线程池,如下:@EnableAsync // 开启异步任务@Configurationpublic class TaskPoolConfig { @Bean("taskExecutor") // 线程池名称 public Executor taskExecutor() { // 使用Spring封装的异步线程池 ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecuto原创 2020-12-29 16:11:22 · 4712 阅读 · 1 评论 -
@Transactional注解用法
checked异常(Exception):表示无效,不是程序中可以预测的。比如无效的用户输入,文件不存在,网络或者数据库链接错误。这些都是外在的原因,都不是程序内部可以控制的。必须在代码中显式地处理。比如try-catch块处理,或者给所在的方法加上throws说明,将异常抛到调用栈的上一层。继承自java.lang.Exception(java.lang.RuntimeException除外)。unchecked异常(RuntimeException):表示错误,程序的逻辑错误。是Runtime原创 2020-10-28 10:18:23 · 4755 阅读 · 3 评论 -
Ribbon和Nginx的区别
服务器端负载均衡 Nginxnginx 是客户端所有请求统一交给 nginx,由 nginx 进行实现负载均衡请求转发,属于服务器端负载均衡。既请求由 nginx 服务器端进行转发。客户端负载均衡 RibbonRibbon 是从 eureka 注册中心服务器端上获取服务注册信息列表,缓存到本地,然后在本地实现轮询负载均衡策略。既在客户端实现负载均衡。应用场景的区别:(1)Nginx适合于服务器端实现负载均衡比如 Tomcat ,Ribbon适合与在微服务中RPC远程调用实现本地服务负载.原创 2020-10-27 10:12:05 · 4820 阅读 · 0 评论 -
@Aspect注解使用场景
小刘的切面主要用于日志挡板。1.首先springboot中pom引入jar <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>2.要想把一个类变成切面类,需要两步,① 在类上使用 @Compo原创 2020-10-22 16:48:50 · 3732 阅读 · 4 评论 -
Java常用元注解
三. 常用元注解Target:描述了注解修饰的对象范围,取值在java.lang.annotation.ElementType定义,常用的包括:METHOD:用于描述方法PACKAGE:用于描述包PARAMETER:用于描述方法变量TYPE:用于描述类、接口或enum类型Retention: 表示注解保留时间长短。取值在java.lang.annotation.RetentionPolicy中,取值为:SOURCE:在源文件中有效,编译过程中会被忽略CLASS:随源文件一起编译在class文原创 2020-09-25 14:17:49 · 2600 阅读 · 0 评论 -
Springcloud启动报错 java.lang.NoSuchMethodError:org.springframework.boot.builder.SpringApplicationBuild
搭建Springcloud的时候出现以下错误:java.lang.NoSuchMethodError: org.springframework.boot.builder.SpringApplicationBuilder.([Ljava是由于spring boot版本兼容性导致的,在pom.xml中修改配置文件,修改前:<parent> <groupId>org.springframework.boot</groupId> <artifactId原创 2020-06-11 16:17:21 · 2907 阅读 · 0 评论 -
@ConditionalOnProperty注解控制配置文件是否生效
近期,小刘在自己项目上发现一个注解,@ConditionalOnProperty注解。突然发觉自己不知道,特意来总结一下。我们的场景是这样的:有一个挡板服务【主要是起到日志兜底的作用】,提供给所有服务。每个服务可以用也可以不用。我们这个feignclient上就有这个注解:@Retention(RetentionPolicy.RUNTIME)@Target({ ElementType.TYPE, ElementType.METHOD })@Documented@Conditional(OnPr原创 2020-09-25 10:03:42 · 3727 阅读 · 0 评论