springboot
文章平均质量分 84
lvyuanj
1.精通 Java 语言,熟悉SSH等常见开源框架,对 JVM 、多线程、网络IO、锁机制有深入理解及实践经验;熟悉开源服务框架(Netty /Spring/ MyBatis)等
2.熟悉MySQL数据库及原理,熟练使用SQL语句及优化,对数据库事务、锁、索引有深入理解;熟悉微服务(Spring Boot/ Spring Cloud等),熟悉各种消息中间件(RabbitMQ/RocketMQ/Kafka等),熟悉Zookeeper、Etcd等服务发现和配置共享的开源项目
展开
-
深入理解Feign之源码解析
Feign是受到Retrofit,JAXRS-2.0和WebSocket的影响,它是一个jav的到http客户端绑定的开源项目。Feign的主要目标是将Java Http 客户端变得简单。Feign的源码地址:https://github.com/OpenFeign/feign。原创 2024-06-06 15:22:29 · 544 阅读 · 0 评论 -
如何设计权限管理模块
二、方便扩展,当系统要对新的东西进行权限控制时,我只需要建立一个新的关联表“权限XX关联表”,并确定这类权限的权限类型字符串即可。但是通过上面我们也发现问题了,如果用户的数量非常大的时候,就需要给系统的每一个用户逐一授权(分配角色),这是件非常繁琐的事情,这时就可以增加一个用户组,每个用户组内有多个用户,除了给单个用户授权外,还可以给用户组授权,这样一来,通过一次授权,就可以同时给多个用户授予相同的权限,而这时用户的所有权限就是用户个人拥有的权限与该用户所在组所拥有的权限之和。16.角色与权限关联表。原创 2024-06-06 15:20:18 · 522 阅读 · 0 评论 -
SpringBoot启动流程分析之准备应用上下文refreshContext()(八)
所以在该方法内只设置了SerializationId,该id是在准备应用上下文时调用ContextIdApplicationContextInitializer时设置的id,在setSerializationId方法中,使用id做key,new了一个弱引用对象为value,添加到了serializableFactories中,DefaultListableBeanFactory为被弱引用对象;此方法可以被调用任意次数,但将用相应的实际属性源替换为StubPropertySource一次且仅一次。原创 2024-06-05 11:04:07 · 1406 阅读 · 0 评论 -
SpringBoot启动流程分析之准备应用上下文prepareContext()(七)
1、应用上下文后置处理2、调用ApplicationContextInitializer接口实现类对象的initialize方法3、发布ApplicationContextInitializedEvent事件4、打印启动日志5、注册两个单例bean(springApplicationArguments、springBootBanner)6、设置是否允许bean定义重写7、加载主类8、发布ApplicationPreparedEvent事件。原创 2024-06-04 09:16:53 · 1005 阅读 · 0 评论 -
JSON数据提取
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。json.loads json字符串 转 Python数据类型json.dumps Python数据类型 转 json字符串json.load json文件 转 Python数据类型json.dump Python数据类型 转 json文件。原创 2024-06-03 15:34:00 · 928 阅读 · 0 评论 -
Mybatis数据加密解密
类注解,将注解放在实体类上/*** 需要加解密的类注解*/@Inherited字段注解,将注解放在实体字段上/*** 加密字段注解*/@Inherited有了这两个注解,我们可以在我们可以标记我们要处理的实体和实体中的字段。原创 2024-06-01 09:34:53 · 1409 阅读 · 0 评论 -
SpringBoot启动流程分析之创建应用上下文AnnotationConfigServletWebServerApplicationContext(六)
会创建Log对象;调用堆信息:初始化BeanFactoryPostProcessors 的List集合调用栈信息在构造方法中实例化一个ServletContextResourcePatternResolver,参数就是AnnotationConfigServletWebServerApplicationContext在构造方法中调用的方法是子类GenericWebApplicationContext重写后的方法。原创 2024-06-01 09:29:25 · 823 阅读 · 0 评论 -
SpringBoot启动流程分析之设置系统属性spring.beaninfo.ignore、自定义banner图(五)
参考目录在resources目录下新建一个banner.txt文件或者你也可以直接放一张图片到resources目录下,名字是banner.jpg(gif|png)。我的banner.txt内容如下。可以到这个网站去生成banner图:生成banner图。原创 2024-05-30 09:47:02 · 818 阅读 · 0 评论 -
JAVA实现人工智能,采用框架SpringAI
SpringAI是AI工程师的一个应用框架,它提供了一个友好的API和开发AI应用的抽象,旨在简化AI应用的开发工序,例如开发一款基于ChatGPT的对话应用程序。项目地址文档地址目前该项目已经集成了OpenAI、Azure OpenAI、HuggingFace、Ollama等API。不过,对于集成了OpenAI接口的项目,只要再搭配One-API项目,就可以调用目前主流的大语言模型了。在介绍如何使用Spring AI开发一个对话接口之前,我先介绍下ChatGPT应用的开发原理。原创 2024-05-30 09:22:46 · 2661 阅读 · 0 评论 -
eureka 加入密码认证 springboot-admin 加入密码认证
2. application.properties 配置如下 用户名和密码。1. pom.xml 加入依赖。原创 2024-05-23 09:21:47 · 331 阅读 · 0 评论 -
SpringBoot启动流程分析之ApplicationEnvironmentPreparedEvent事件发布(四)
org.springframework.boot.SpringApplication#run(java.lang.String…)构建环境1、创建ConfigurableEnvironment对象从UML类图看出:StandardServletEnvironment 继承StandardEnvironment 实现ConfigurableWebEnvironmentStandardEnvironment 继承AbstractEnvironment 中构造函数中customizePrope原创 2024-05-23 09:18:37 · 1201 阅读 · 0 评论 -
SpringBoot启动流程分析之命令行参数args的封装解析(三)
补充一下:命令行参数在cmd中添加如下,先在项目根目录执行mvn clean install ,然后到target目录或者在jar包前面加上target目录都行,执行图片中的命令运行, 图片是从我后面文章复制过来的,主要是说明命令行参数在cmd中怎么加。可以看到args参数在构造方法中在作为参数放到了DefaultApplicationArguments的静态内部类Source的构造方法中进一步封装,至于下面的全局变量args放的就是原始的args参数。可以通过getSourceArgs方法得到。原创 2024-05-18 09:12:38 · 608 阅读 · 0 评论 -
SpringBoot @AllArgsConstructor和final 代替 @Autowired
Springboot官方建议使用final来修饰成员变量,然后通过构造方法来进行注入原因:final修饰的成员变量是不能够被修改的,反射那就没办法了。原创 2024-05-16 11:36:34 · 486 阅读 · 0 评论 -
SpringBoot 服务熔断降级之-Hystrix
通过断路的方式,将后续请求直接拒绝,一段时间(默认5秒)之后允许部分请求通过,如果调用成功则回到断路器关闭状态,否则继续打开,拒绝请求的服务。用户的请求故障时,不会被阻塞,更不会无休止的等待或者看到系统崩溃,至少可以看到一个执行结果(例如返回友好的提示信息) 即:及时返回服务调用失败的结果,让线程不因为等待服务而阻塞。可以优先保证核心服务。用户的请求将不再直接访问服务,而是通过线程池中的空闲线程来访问服务,如果线程池已满,或者请求超时,则会进行降级处理。,默认fallback,可设置统一的降级服务逻辑。原创 2024-05-14 09:12:28 · 730 阅读 · 0 评论 -
Skywalking 8.x部署
首先因为,具体步骤跟以上差不多,修改完mysql持久化后,需要用代理跑一个jar包,那我们直接复制agent目录到另一台服务器的随便一个目录下,这里agent它默认是向本地发送监控请求,那我们就得修改一下,同时你可以指定自己的项目名。下一步懂得都懂,那肯定就需要mysql-connector-java-8.0.16写入mysql的;将下载后的包放入oap-libs外部包内。可以修改如下your_Application为你自己的项目名。找到config目录下的。打开agent目录下的。原创 2024-05-13 09:18:24 · 416 阅读 · 0 评论 -
【Spring源码分析】ResolvableType
这些包括原始类型,参数化的类型,数组类型,类型变量和原始类型(These include raw types, parameterized types, array types, type variables and primitive types).它并不是我们平常工作中经常使用的 int、String、List、Map等数据类型,而是从Java语言角度来说,对基本类型、引用类型向上的抽象;通配符表达式,或泛型表达式,它虽然是Type的一个子接口,但并不是Java类型中的一种,表示的仅仅是类似?原创 2024-05-10 09:34:03 · 1430 阅读 · 0 评论 -
SpringBoot启动流程分析之ApplicationStartingEvent事件的发布监听流程(二)
即在创建SpringApplicationRunListener接口实现类对象的时候调用的构造方法是指定了参数类型的,为types数组中的参数类型,然后还有SpringApplication和args,这两个想的到就是构造方法的参数了。SpringApplicationRunListeners类封装了SpringApplicationRunListener接口的所有方法,方法内循环SpringApplicationRunListener实例对象集合,去调用相关方法。限制日志输出,直到日志系统完全初始化。原创 2024-05-10 09:27:39 · 1204 阅读 · 0 评论 -
SpringBoot启动流程分析之创建SpringApplication对象(一)
这些对象的initialize方法会在后面的run方法中被调用。先是判断默认的classloader中是否存在org.springframework.web.reactive.DispatcherHandler、且不存在org.springframework.web.servlet.DispatcherServlet、org.glassfish.jersey.servlet.ServletContainer,如果为true返回WebApplicationType.REACTIVE;原创 2024-05-09 09:23:51 · 801 阅读 · 0 评论 -
JAVA 双亲委派之一
不论是AppClassLoader还是ExtClassLoader还是启动类加载器,其加载类的路径都是固定的,如果我们需要加载外部类或者资源,如某路径下或网络上,这样便需要自定义类加载器自定义类加载器,只需要继承ClassLoader类,复写findClass方法,在findClass方法中调用defineClass方法即可一个ClassLoader创建时如果没有指定parent,那么它的parent默认就是AppClassLoader。原创 2024-05-09 09:15:44 · 767 阅读 · 0 评论 -
Java Spring @Import和@Enable注解
本文先通过3个demo介绍了Import注解的3种使用场景,然后结合ConfigurationClassPostProcessor类的源码分析了Import注解的使用原理。接着通过@Import注解,揭开了@Enable系列注解的神秘面纱。并结合@EnableAsync注解的源码,举例说明了@Enable注解的原理。最后解释了使用@Import和@Enable系列注解的好处。原创 2024-05-09 09:11:47 · 770 阅读 · 0 评论 -
Spring中FactoryBean的作用和实现原理
我们都知道在Spring中我们的Bean都会被Spring的IOC容器所管理,在AbstractApplicationContext中有一个很重要的方法:refresh(),项目启动或重启的时候refresh()会调用getBean()初始化所有的Bean,这个getBean()最终会指向AbstractBeanFactory中的getBean()方法。看源码的时候如果我们一直追究所有的细节那会让我们会越陷越深,掉入细节的无底洞,稍不留神脑回路跟不上就会蒙圈。synthetic);原创 2024-05-08 18:36:31 · 673 阅读 · 0 评论 -
Java-seata 头参数透传问题步骤详解-arthas
Java Seata 头参数透传问题步骤详解原创 2024-03-20 10:39:49 · 477 阅读 · 0 评论 -
WebMvcConfigurerAdapter与WebMvcConfigurer与WebMvcConfigurationSupport与WebMvcAutoConfiguration关系
WebMvcConfigurerAdapter与WebMvcConfigurer与WebMvcConfigurationSupport与WebMvcAutoConfiguration首先以上4个类都是springboot中mvc的支持类WebMvcConfigurer 为接口WebMvcConfigurerAdapter 是 WebMvcConfigurer 的实现类大部分为空方法 ;是WebMvcConfigurer的子类实现,由于Java8中可以使用default关键字为接口添加默认方法,为在源原创 2020-09-12 20:06:32 · 2192 阅读 · 0 评论 -
Spring boot 1.4.2 RestTemplate 超时引发的血案
Springboot 1.4.2 RestTemplate 超时引发的血案配置RestTemplate 请求超时设置@Beanpublic RestTemplate restTemplate(RestTemplateBuilder builder) { builder.setConnectTimeout(10000); builder.setReadTimeout(30000); return builder.build();}以上注入写法无效设置RestTemplate原创 2020-09-12 19:49:04 · 903 阅读 · 0 评论 -
Spring boot RestTemplate 统一添加 Header
RestTemplate 统一添加 Header一、添加拦截器public class HeaderRequestInterceptor implements ClientHttpRequestInterceptor { private final String headerName; private final String headerValue; public HeaderRequestInterceptor(String headerName, String hea原创 2020-09-12 19:41:46 · 3758 阅读 · 0 评论 -
SpringBoot Jackson 配置支持解析JDK8 时间类型
Jackson 配置支持解析JDK8 时间类型SpringBoot项目时间类型解析器:public class SysUser implements Serializable { private static final long serialVersionUID = 1L; private Long id; /** * 用户名 */ private String username; /** * 密码 */原创 2020-09-12 19:38:15 · 770 阅读 · 0 评论 -
开发注意事项
开发注意事项1. 参数验证hibernate.validator1.导入包import org.hibernate.validator.constraints.NotBlank;import javax.validation.constraints.AssertFalse;import javax.validation.constraints.Pattern;2.demo@Ge...原创 2019-10-21 17:57:01 · 157 阅读 · 0 评论 -
springboot 2.x处理404、500等异常
springboot 2.x处理404、500等异常404错误404错误是不经过Controller的,所以使用@ControllerAdvice或@RestControllerAdvice无法获取到404错误springboot2处理404错误的两种方式第一种:直接配置#出现错误时, 直接抛出异常 spring.mvc.throw-exception-if-no-handler-fo...原创 2019-10-21 17:55:10 · 1278 阅读 · 0 评论 -
Spring-rabbit 源码解析 - 需要支持加载集合类型方式
Spring-rabbit 源码解析 - 需要支持加载集合类型方式 @Bean public List<Queue> waveUpdateQueues() { List<Queue> queues = Li...原创 2019-10-21 17:50:54 · 270 阅读 · 0 评论