- 博客(73)
- 收藏
- 关注
原创 applicaitonListener配合ApplicationEvent原理
总结:spring实现的这套观察者模式其实有点像mq也是发布订阅,通过当前推送的事件来循环所有的观察者,拿出适合当前推送事件的观察者执行来完成订阅。1、通过我们推送的event类型和在创建event传入的字段类型解析出一个缓存的key,这里面存放的就是当前事件里面所支持的所有观察者。接着我们在编写代码的地方如果出现了需要推送事件执行listener的地方就对事件进行推送,我这里这是为了推送事件写的代码。2、这里其实就是循环所有的观察着将符合事件类型和参数类型的拿出来,最终进行返回调用。
2024-04-15 11:57:06 173 1
原创 抽象工厂模式简化学习
提到设计i模式不得不提抽象工厂模式,普通的工厂模式已经不足以满足我们日常开发于是深化出了抽象工厂模式,下面我们一起来学习一下。最后创建一个最外层的对象工厂 基于上面的抽象工厂建立策略模式获取指定的对象工厂获取到希望获取到的对象工厂最终得到目标对象。创建一个抽象工厂对象 里面有获取工厂的方法,各个对象分别创建对应的工厂对象。
2023-05-12 15:16:05 130 1
原创 自定义HandlerMethodArgumentResolver封装请求对象
自定义HandlerMethodArgumentResolver去封装controller的参数
2022-06-16 14:34:25 319
原创 maven的deploy用法
deploy很多时候在开发人员都用不到,一般大家使用的都是mvn clean install 打包之后在将包拉出来然后在进行其他的操作,这里的deploy就很好的解决了这个问题.当我们对代码进行修改之后,push到远程仓库了然后我们通过双击deploy,他会将当前项目重新打包,然后将打完包推送到配置好的远程仓库 <!--发布包配置--> <distributionManagement> <repository> .
2022-04-22 10:51:43 7522
原创 SNAPSHOT和RELEASE区别且SNAPSHOT不实时拉包解决
今天遇到一个问题,最近在写一个通道只是提供能力的一个服务,给别的服务通过pom坐标的形式进行依赖,当我们修改了这里面的代码后推到仓库里面,那么依赖的服务重新部署怎么知道他依赖的包发生了改变要重新拉取进行编译呢,这里就说到了两个关键字SNAPSHOT和RELEASESNAPSHOT我们都知道确定一个jar包是通过groupId和artifactId和version来定位,这时候如果版本号没改变,但是改变了代码,那么依赖该坐标的服务没办法识别到其进行了修改,所以我们通过在版本号上面添加关键字SNAPS.
2022-04-21 17:38:02 2771
原创 sharding-jdbc整体使用流程
最近开始了一个新项目用到了sharding-jdbc之前从来没用过,所以也是学了一段时间,摸爬滚打之后终于搭好了,下面来具体说说怎么使用的<!-- 这里只是sharding的pom坐标 --> <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-core</artifact.
2022-04-15 15:54:29 1510
原创 jackson的@JsonProperty来对字段进行序列化和反序列化重命名
有时候在对字段进行序列化或者反序列化的时候需要对字段进行重命名,这时候可以通过jackson里面的@JsonProperty进行改名字见下代码// 首先引入jack的pom包 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> .
2022-04-13 10:44:25 2316
原创 简单的http请求unirest
换了个项目,里面用的到http请求是unirest今天学习了一下发送post请求// 请求发起方@RequestMapping(value = "/unirestTest",produces = MediaType.APPLICATION_JSON_VALUE) public String unirestTest() throws UnirestException { User user = new User(); user.setId("123"); .
2022-04-08 15:31:24 283
原创 springboot整合mybatis多数据源配置
现在java项目很多地方都需要用到不同库的操作,这里就需要我们手动的去注入不同的数据源来保证不同的dao层可以操作不一样库甚至是不同服务器的数据.@Configuration// 配置那个dao层的包用指定的SqlSessionFactory@MapperScan(basePackages = "com.example.dao.item0",sqlSessionFactoryRef = "item0SessionRef")@MapperScan(basePackages = "com.examp.
2022-04-06 15:20:40 393
原创 feign拦截器设置请求的地址和header设置
很多人都遇到过feign请求后请求头丢失的问题,这里可以通过feign的拦截器处理该问题并且扩展了一下怎么设置feign真正的请求地址// controller层@RestController@RequestMapping("/testShow")public class TestController { @Autowired private TestFeign testFeign; // 通过feign想要调用的地址 @GetMapping(value = "/s.
2022-04-02 10:54:29 2858
原创 linux相关操作
先进入要更新代码的模块根目录里面通过git pull 进行拉取代码,之后通过netstat -anp|grep 当前服务端口 可以查询出当前服务在服务器里面的端口kill -9 服务所在服务器的端口号 杀死进程nohup mvn spring-boot:run & 重启当前服务tail -f nohup.out 打印日志jps 进入当前项目的父模块中查看当前所有服务的占用端口合并分支:如果要将A分支内容合并到B分支,先将A分支的内容Commit和Push之后切换到想要合并的分支上,通.
2022-03-21 10:45:35 3020
原创 怎么优雅的在主线程获取子线程的返回值
今天面试被面试官问道怎么自己实现主线程获取到子线程的返回值,且要优雅不能使用静态变量方法一:使用FutureTask和Callable来实现class Test{ public static void main(String[] args) throws Exception { FutureTask<String> futureTask = new FutureTask<String>(new Callable<String&g.
2022-03-15 22:24:40 2732
原创 mybatis的dao层传参数对象和parameterType关系
今天写项目的时候遇到了一个问题 我在xml里面的parameterType定义的对象里面只有字段A,B,C但是dao里面通过通配符传递接受对象,传进去的有字段A,B,C,D之后通过xml里面取值#{D}可以取到值见代码public class TestParam{ private String A; private String B; private String C;}public class TestParam2{ private String A; private String B.
2022-03-08 15:59:45 762
原创 动态代理的实现逻辑
public interface SayHelloService { // 定义一个方法对名字sayHello void sayHello(String name);}// 上述接口的实现类class SayHellowServiceImpl implements SayHelloService { // 对上述接口进行实现 @Override public void sayHello(String name) { System.out.pri
2022-03-02 08:45:12 116
原创 java修改引用对象地址值原值不变问题
今天写代码遇到了一个很离谱的问题,A方法传递List进B在B方法里面修改了List的引用,但是A方法里面的List没做改变见下代码public class Test{ public void A(){ List<String> list = Lists.newArrayList("123","234"); System.out.println(list.size()); } public void B(List<String> list){ list = n.
2022-02-21 23:33:22 2007 1
原创 RestTemplate发送post请求报错415
很久没用restTemplate发送http请求了,今天写代码需要就又复习了一遍JSONObject j = restTemplate.postForEntity(url,param,JSONObject.class);参数1:请求的地址参数2:请求体参数3:请求响应类型public class Test{ @Autowired // 注意springboot没有自动注入该类需要自行注入 private RestTemplate restTemplate; public void .
2022-02-17 21:45:16 1298
原创 nginx负载均衡配置学习
话不多说直接上配置,配置路径大家都应该知道,即使nginx下面的config里面的nginx.conf// 如果要负载均衡就需要配置upstream 这里的myName就是当前负载均衡配置的名字upstream myName{ // 这里的ip:port就是需要转发到哪个ip:port server是固定写死 // ,集群有多少个就配置多少个server,可以在这里配置不同的负载均衡策略 server ip:port server iP2:port2 ...}server {.
2022-01-19 10:22:11 716
原创 mysql里面对JSON的操作函数JSON_EXTRACT
我们有时候在sql查询的时候会对json数据比较头疼,有时候会通过mybatis进行转换成string来进行处理,但是在mysql5.7以及就开始支持对json的解析处理了,这里我们聊一下今天用到的JSON_EXTRACTselect * from AAA fm where JSON_EXTRACT(CAST(fm.content AS CHAR), '$.headerTitleType_.name') = '查询的内容'注意报错:Data truncation:.
2022-01-18 12:48:08 3269
原创 使用Lombok的注解代替@Autowired的冗余
经常写springboot的同学都知道在我们需要用到ioc里面的对象的时候需要对要用到的对象进行@Autowired注释进行注入到当前类,这样一来会发现代码特别冗余很乱,这时候我们就建议进行构造器注入见下列代码@RestController@RequestMapping("/test")// 在需要注入Bean的类上面加上该注解@RequiredArgsConstructor public class TestController {// 这里可以用@NonNull或者用final修饰即可.
2022-01-17 22:12:05 1672 2
原创 获取指定路径的配置文件
有时候需要通过获取非application.properties里面配置的文件,这时候我们可以通过执行文件路径来获取到想要获取的文件配置@Data@Component@PropertySource(value = {"file:要读取的配置文件全路径"}, encoding="utf-8")// 这个配置的目的是只获取配置文件里面前缀是demo开头的配置@ConfigurationProperties(prefix = "demo")public class Demo.
2021-12-23 18:18:17 518
原创 kafka的多数据源监听相关操作
我们经常会遇到一个微服务里面想要对多态服务器的kafka进行监听(非集群)这时候平常在application.properties可能就没办法支撑了,我们就需要通过原始方式进行配置@Configuration@EnableKafkapublic class KafkaConfiguration { @Value("${brokerAddress}") // kafka所在地址ip:port private String brokerAddress; @Value("${.
2021-10-28 23:07:01 1573
原创 java里面的CompletableFuture的异常和事务问题和AtomicBoolean解决办法
我们写代码的时候进场会使用到CompletableFuture.runAsync这样的异步操作,大家有没有想过异步里面的内容是否在事务里面并且里面的异常是否能抛出到主线程呢? @Autowired private MyTableDao myTableDao; @Override @Transactional(rollbackFor = Exception.class) public void testAsync() throws InterruptedExcep.
2021-10-28 17:50:50 6251 12
原创 com.google.guava包里面的相关简单方法
平时写代码经常会遇到逗号分割的字符串要转成List的情况很多同学都会使用下面的方法但是下面这种方法,看过源码的同学都知道split先将字符串转成了LIst之后又转成了数组然后返回但是我们需要的是集合导致我们又需要再次转换成数组,非常消耗性能于是就有了第二种方法方法二就不会存在多余的转换会直接出集合// 方式一String s = "张三,李四,王五";List<String> strings = Arrays.asList(s.split(","));System.out.pr.
2021-10-26 17:14:53 4689
原创 java的值传递
大家都知道java里面只有值传递,今天遇到了一个很典型的例子记录一下先看代码 public static void main(String[] args) { List<String> list = Arrays.asList("1","2","3"); show(list); System.out.println(list); } public static void show(List<String> .
2021-10-26 16:43:40 88
原创 Java+8实战阅读相关笔记
andThen和compose区别// 先定义两个函数 这里的函数泛型1是入参类型也就是x的类型泛型2就是返回值的类型Function<Integer,Integer> a = x -> x+1;Function<Integer,Integer> b = x -> x*2;Function<Integer,Integer> c = a.andThen(b);Function<Integer,Integer> d = a.compose(b
2021-10-12 11:53:59 64
原创 mysql相关内部表查询
今天在部署生产环境的时候出现了锁表的情况,这里整理一下使用到的相关sql// 查询相关正在运行的sql方式一 对于sql的展示可能不完整show processlist// 查询相关正在运行的sql方式二 该方式的运行sql会比较完整select * from information_schema.PROCESSLIST t where t.info is not null// 查看当前正在等待锁的事务SELECT * FROM INFORMATION_SCHEM.
2021-09-29 00:53:38 125
原创 spring-boot启动执行sql
这里的执行区分为spring-boot的1.x和2.x如果是1.x可以直接在application.yml里面指定sql文件即可很多同学在使用spring-boot2.x的时候发现sql文件没办法执行因为这里需要在application.yml里面进行初始化的配置见图我这里指定的是always每次启动都执行,而下面的schema点进去看的时候可以发现他是一个List所以可以接受多个sql 注意:这里的sql一定要指定位置,否则读取不到会报错,如图所示我使用的是classpath:来指定从编译后的.
2021-09-10 15:50:50 1479
原创 深入jvm虚拟机阅读相关知识点
垃圾收集算法标记清除法:顾名思义,该算法就是对所有可以回收的垃圾对象进行标记之后对标记的对象进行回收,但是该方法最大的问题就是空间问题会有很大影响先看几张图.可以注意到回收后虽然是有空闲对象空余出来,但是如果以后有比较大的对象需要被分配空间,但是这个时候堆内存里面找不到足够的连续内存这个时候就需要提前触发一次回收.回收前回收后复制算法:该赋值算法比较简单,他的出现是为了解决标记清除法的相关问题也解决了效率问题,还是先上图,主要方式就是,给内存划分成两块一样大小的内存,回收前都只是用其中一半,
2021-09-09 23:45:53 155
原创 本地线程ThreadLocal,以及多线程相关问题
在开发过程中我们经常遇到高并发之后使用到多线程,线程池等相关内容,但是我们经常遇到在多个线程里面操作同一个变量出现了高并发数据问题,这种情况其实可以通过本地线程进行避免.public static void main(String[] args) {// 创建一个线程池ThreadPoolExecutor executor = new ThreadPoolExecutor (10,20,60,TimeUnit.SECONDS,new SynchronousQueue<>.
2021-08-18 23:33:19 501
原创 mysql查询的显示加锁和自动提交相关验证
之前一直有一个误区,以为事务内内的查询也是携带行级锁的,这个是有问题的今天试了一下; 先看一下我的name表;这里的age是主键! 其他值不用过多关注// 这通过查询加了一个显示锁也就是悲观锁没有commit;begin;select * from name where age = 18 for update;// 普通查询 可以查询出来,不经过锁select * from name where age = 18;// 这通过查询加了一个显示锁也就是悲观锁没有commit;begin.
2021-08-18 13:08:30 370
原创 mysql的批量更新
今天写代码遇到了mysql通过集合更新个别字段的情况,思考了很久发现如果for循环以后高并发可能就直接凉凉,之后看到了一个很强的东西 on DUPLICATE KEY UPDATE,直接上代码结束一下怎么使用见图解释:这里使用的是批量添加的语句,这里id一定要加上,因为如果在insert的时候发现你的主键id已经在表里存在了,后面sql语句后面有onduplice key update 那么就会根据id去更新需要更新的字段,需要更新的字段写法如图: 表里面的字段名 = values(表字段名),.
2021-08-11 21:10:49 213
原创 list.remove删除根据对象地址值还是对象属性值
话不多说直接上代码/*没有重写equals的对象Test注意:lombok的@Data也是重写了equals*/public class Test { private String id; public void setId(String id){ this.id = id; }}List<Test> list = new ArrayList<>(); Test test = new Test(); .
2021-08-11 20:07:27 1015
原创 nacos + spring-cloud + feign/nacos集群服务怎么拉取配置或者注册到nacos集群
由于买的服务器到期了这里nacos直接在windows直接安装创建spring-boot的服务引入坐标阿里的nacos坐标<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.1.1.RELEASE</ve.
2021-08-08 11:28:22 438
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人