- 博客(55)
- 收藏
- 关注
原创 mybatis plus之动态数据源及业务设计
可继承AbstractDataSourceProvider类,并手动注入该类。如TenantDataSourceJdbcProvider在启动加载的时候会自动去查数据源并加载。
2025-03-17 00:33:31
854
原创 【mybatis和mybatis-plus】源码分析
官方提供了几个拦截器,我们可以在最前面先添加我们自己的拦截器,在执行的时候会最高优先级执行,如果是作为根模块来封装,可以通过责任链模式来构造一个我们自己的拦截器链,业务项目继承封装的接口即可/*** 查询拦截* @return*//*** 修改拦截* @return*/return 0;
2023-09-20 10:38:04
1061
原创 Jenkins结合Gitlab,实现镜像构建及推送
需要修改credentialsId为自己的gitlab凭证、以及推送到镜像仓库的凭证。下面脚本的/home/jenkins目录,需要指定为宿主机的挂载目录。将jenkins生成的webhook地址复制到gitlab中。需要修改url为项目实际gitlab地址。
2023-09-19 18:29:09
942
原创 HopeHomi脚手架(五)远程调用Feign与Sentinel
FeignClientsRegistrar实现了ImportBeanDefinitionRegistrar当启动类自动扫描构造beanDefinition的时候,进行beanDefinition注册。
2023-04-24 14:10:47
509
原创 【八】springboot启动源码 - finishRefresh
从IOC获取LifecycleProcessor设置到applicationContext中,如果从IOC中获取不到会创建DefaultLifecycleProcessor并注册到IOC中。调用DefaultLifecycleProcessor的startBeans方法。调用DefaultLifecycleProcessor的onRefresh方法。执行WebServerStartStopLifecycle的start方法。
2023-04-14 11:51:02
293
原创 【springboot】ApplicationListener用法及源码
当执行listener.onApplicationEvent时候,这里的Listener是通过适配器模式,创建的ApplicationListenerMethodAdapter对象。在这里判断event是否是被注册到IOC的Listener监听的对象,返回符合要求的Listener,这里匹配到两个,一个我们自定义,一个spring默认。内部字段有我们自定义的Listener的beanName,method为监听的自定义方法。event为传递事件。获取到监听事件控制器,执行事件处理。
2023-04-12 17:20:02
583
原创 【springboot】@Import的用法,与@ImportAutoConfiguration的区别
Import的value值,可以是配置类。
2023-03-24 14:22:46
716
原创 【一】springboot启动源码 - invokeBeanFactoryPostProcessors - (下)
这里用来回调BeanDefinitionRegistryPostProcessors实现类的postProcessBeanFactory方法(该方法属于postProcessBeanFactory接口)遍历所有配置类,并通过cglib进行动态代理, enhancer.enhance(configClass, this.beanClassLoader);创建完代理类,将代理类设置为当前配置类的beanDefinition的beanClass。通过配置环境变量,可以保留cglib创建类的class文件。
2023-03-24 00:06:23
166
原创 【七】springboot启动源码 - finishBeanFactoryInitialization
第252行,transformedBeanName(name),用于返回真实beanName,如果是beanName以&开头(表示factoryBean),去掉&并返回。preInstantiateSingletons方法,遍历beanDefinitionNames,通过mergedBeanDefinitions来获取每一个RootBeanDefinition,并判断他是否是factorybean,如果不是,调用getBean()方法。进入getMergedLocalBeanDefinition方法。
2023-03-23 23:08:26
384
原创 【六】springboot启动源码 - registerListeners
当SpringApplication开始调用run方法,在创建context之后的prepareContext方法中,会将SpringApplication的listeners设置到contextapplicationListeners中。补充说明一下,这里的listeners是基于spring SPI查询到的key为org.springframework.boot.SpringApplicationRunListener的实现类。获取到类名后,通过构造器对这些类进行实例化。
2023-03-23 00:29:09
214
原创 【五】springboot启动源码 - onRefresh
它是通过加载org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,装载ServetWeb的自动配置类ServletWebServerFactoryAutoConfiguration。但是在bdMap中,之前通过自动装配,已经添加了org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration。
2023-03-22 18:10:40
447
原创 【四】springboot启动源码 - initApplicationEventMulticaster
代码也很简单,注册ApplicationEventMulticaster的默认实现类SimpleApplicationEventMulticaster到IOC容器。
2023-03-21 13:44:50
120
原创 【三】springboot启动源码 - initMessageSource
如果IOC容器找不到messageSource的bean,那么会向IOC容器注册一个MessageSource的默认实现类DelegatingMessageSource。这个步骤的代码量比较少。
2023-03-21 13:41:15
103
原创 【二】springboot启动源码 - registerBeanPostProcessors
通过上一步方法invokeBeanFactoryPostProcessors的理解,对于registerBeanPostProcessors,依然是通过PriorityOrdered、Ordered等来注册BeanPostProcessor到beanPostProcessors,为了后面根据顺序执行
2023-03-21 11:27:26
114
原创 【一】springboot启动源码 - invokeBeanFactoryPostProcessors - (上)
SpringApplication在构造方法时,就会读取META-INF/spring.factories的类,缓存到SpringFactoriesLoader中(这是Spring的SPI),注意这里的缓存不仅仅只有org.springframework.boot.autoconfigure.EnableAutoConfiguration,包括文件中所有key-value。以上只是prepareEnvironment方法的第341行逻辑,341行之后,还会添加一些propertySource,省略过程。
2023-03-17 10:12:08
503
原创 HopeHomi脚手架(三)通过项目启动环境变量,动态加载logback配置文件
有很简单的实现思路,直接在不同环境的application.yaml内容指定,但是这有一个问题,每个微服务都需要写重复配置文件。这里需要设置环境变量,在Spring初始化之前。logback才能正确获取到配置文件。2. 在目录下创建logback配置文件。
2023-03-15 17:11:35
212
原创 HopeHomi脚手架(二)扩展@PropertySource,实现自定义yaml文件加载
PropertySource注解可以读取*.properties文件,但是不能读取yaml文件内容,所以需要扩展。
2023-03-15 17:07:26
103
原创 JSON映射字段。可映射成对象或数组
因为项目对接了jira,jira api查询的数据太复杂且没有固定格式,所以写了一个简单的映射// 原始数据{ "expand": "projects", "projects": [ { "self": "http://10.50.10.100:30089/rest/api/2/project/10003", "id": "10003", "key": "GO", "name"
2022-03-29 18:20:38
3380
原创 代码生成,动态编译,动态注入spring,动态创建接口
简单思路项目启动,外挂lib目录遍历lib目录下所有jar包,写入base.txtjava源文件生成,将生成的所有文件写入source.txt(被依赖类在前面)执行命令javac -encoding utf-8 @source.txt @base.txt注入spring、mvc、mybatisbase.txtE:\lib\alipay-easysdk-2.1.0.jar;E:\lib\alipay-sdk-java-3.7.110.ALL.jar;E:\lib\amqp-client-5
2021-11-12 11:31:45
1443
3
原创 springboot整合truelicense,添加项目许可证书,支持动态扩展
使用方法生成publicCerts.keystore### license生成证书命令,JDK自带keytool工具 #生成:在当前目录下,生成一个名为privateKeys.keystore的密钥库,同时指定密钥库密码为public_password1234,第一个条目为privateKey,指定条目密码为private_password1234keytool -genkeypair -keysize 1024 -validity 1 -alias "privateKey" -keystor
2021-10-29 17:51:50
1771
原创 RabbitMq基础及死信队列使用
交换机模式fanoutfanout类型的Exchange路由规则非常简单,它会把所有发送到该Exchange的消息路由到所有与它绑定的Queue中。directdirect类型的Exchange路由规则也很简单,它会把消息路由到那些binding key与routing key完全匹配的Queue中。topic前面讲到direct类型的Exchange路由规则是完全匹配binding key与routing key,但这种严格的匹配方式在很多情况下不能满足实际业务需求。topic类型的Exch
2021-03-02 11:38:15
279
原创 海康威视web结合Vue+Java
技术点前端iView + webVideoCtrl.js(有改动)后台Java基本功能实时预览动态配置NVR参数,获取NVR下的所有摄像头(支持多nvr同时预览),提供窗口配置功能,记录当前窗口所对应的的摄像头,下次进入页面可以手动载入录像回看回放功能支持进度拖拽设备管理提供NVR设备管理功能其他由于涉及到业务方面,其余功能页面就不展示了,有兴趣做海康威视web开发的可以一起讨论...
2020-07-24 16:59:04
3022
10
原创 Linux apache-ftpserver搭建
准备官网下载http://mina.apache.org/ftpserver-project/downloads.html步骤解压tar包修改配置文件1:apache-ftpserver-1.1.0/res/conf/users.propertiesftpserver.user.admin.userpassword=adminftpserver.user.admin.homedirectory=./res/homeftpserver.user.admin.enableflag=tru
2020-07-08 09:45:08
663
原创 BladeX相关
项目基础技术springcloudspringse curity oauth2spring boot starter整体权限框架基于spring security oauth2认证服务器: blade-auth,配置类资源服务器:需要认证的模块项目网关过滤,AuthFilter执行路径拦截和放行,基于jjwt读取token中的信息系统模块登录界面1. 验证码获取h...
2020-07-06 15:17:05
10618
4
原创 Linux systemd jar配置
路径jar包:/usr/jrdee/jdk/attack.jar启动脚本:/usr/jrdee/jdk/test-start.jar停止脚本:/usr/jrdee/jdk/test-stop.jarjava环境路径:/usr/jrdee/jdk/jdk1.8.0_221配置test-start.sh#!/bin/shexport JAVA_HOME=/usr/jrdee/jdk/jdk1.8.0_221export PATH=$JAVA_HOME/bin:$PATHnohup java
2020-07-06 15:15:38
441
原创 mysql 5.7免安装
下载好后解压缩,新建my.ini文件[mysql]# 设置mysql客户端默认字符集default-character-set=utf8[mysqld]#设置3306端口port = 3306# 设置mysql的安装目录basedir=D:\mysql5.7# 设置mysql数据库的数据的存放目录datadir=D:\mysql5.7\data# 允许最大连接数max_...
2020-06-02 15:32:52
129
原创 事务
脏读(Dirty reads):一个事务A读取到了另一个事务B还没有提交的数据,并在此基础上进行操作。如果B事务rollback,那么A事务所读取到的数据就是不正确的,会带来问题。不可重复读(Non-repeatable reads):在同一事务范围内读取两次相同的数据,所返回的结果不同。比如事务B第一次读数据后,事务A更新数据并commit,那么事务B第二次读取的数据就与第一次是不一样的。...
2020-04-27 15:20:59
174
原创 谈谈NIO的优劣
BIO传统socket编程,服务端代码如下public static void main(String[] args) { try { ServerSocket ss = new ServerSocket(8888); System.out.println("启动服务器...."); while(true){ ...
2020-03-11 10:53:41
774
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人