java
渣渣港
这个作者很懒,什么都没留下…
展开
-
applicaitonListener配合ApplicationEvent原理
总结:spring实现的这套观察者模式其实有点像mq也是发布订阅,通过当前推送的事件来循环所有的观察者,拿出适合当前推送事件的观察者执行来完成订阅。1、通过我们推送的event类型和在创建event传入的字段类型解析出一个缓存的key,这里面存放的就是当前事件里面所支持的所有观察者。接着我们在编写代码的地方如果出现了需要推送事件执行listener的地方就对事件进行推送,我这里这是为了推送事件写的代码。2、这里其实就是循环所有的观察着将符合事件类型和参数类型的拿出来,最终进行返回调用。原创 2024-04-15 11:57:06 · 170 阅读 · 1 评论 -
InheritableThreadLocal线程复用取值错误问题
子线程继承父类InheritableThreadLocal数据引发的问题原创 2023-07-13 18:08:15 · 371 阅读 · 0 评论 -
sahrding-jdbc的雪花算法取模为0或1的问题
sharding-jdbc雪花算法生成的id取模问题原创 2023-01-09 16:25:39 · 770 阅读 · 0 评论 -
rocketMQ简单理解
rocketMq相关理解原创 2022-09-28 23:13:32 · 508 阅读 · 0 评论 -
generator反向工程使用
generator反向工程原创 2022-06-22 11:15:54 · 302 阅读 · 0 评论 -
自定义HandlerMethodArgumentResolver封装请求对象
自定义HandlerMethodArgumentResolver去封装controller的参数原创 2022-06-16 14:34:25 · 316 阅读 · 0 评论 -
mapstruct由浅入深
对象复制原创 2022-06-13 11:29:27 · 1270 阅读 · 0 评论 -
setRollbackOnly工作详情和遇到的问题
setRollBackOnly的工作原理和遇到的问题原创 2022-06-07 11:58:28 · 2381 阅读 · 0 评论 -
maven的deploy用法
deploy很多时候在开发人员都用不到,一般大家使用的都是mvn clean install 打包之后在将包拉出来然后在进行其他的操作,这里的deploy就很好的解决了这个问题.当我们对代码进行修改之后,push到远程仓库了然后我们通过双击deploy,他会将当前项目重新打包,然后将打完包推送到配置好的远程仓库 <!--发布包配置--> <distributionManagement> <repository> .原创 2022-04-22 10:51:43 · 7436 阅读 · 0 评论 -
SNAPSHOT和RELEASE区别且SNAPSHOT不实时拉包解决
今天遇到一个问题,最近在写一个通道只是提供能力的一个服务,给别的服务通过pom坐标的形式进行依赖,当我们修改了这里面的代码后推到仓库里面,那么依赖的服务重新部署怎么知道他依赖的包发生了改变要重新拉取进行编译呢,这里就说到了两个关键字SNAPSHOT和RELEASESNAPSHOT我们都知道确定一个jar包是通过groupId和artifactId和version来定位,这时候如果版本号没改变,但是改变了代码,那么依赖该坐标的服务没办法识别到其进行了修改,所以我们通过在版本号上面添加关键字SNAPS.原创 2022-04-21 17:38:02 · 2756 阅读 · 0 评论 -
sharding-jdbc整体使用流程
最近开始了一个新项目用到了sharding-jdbc之前从来没用过,所以也是学了一段时间,摸爬滚打之后终于搭好了,下面来具体说说怎么使用的<!-- 这里只是sharding的pom坐标 --> <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-core</artifact.原创 2022-04-15 15:54:29 · 1504 阅读 · 0 评论 -
jackson的@JsonProperty来对字段进行序列化和反序列化重命名
有时候在对字段进行序列化或者反序列化的时候需要对字段进行重命名,这时候可以通过jackson里面的@JsonProperty进行改名字见下代码// 首先引入jack的pom包 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> .原创 2022-04-13 10:44:25 · 2240 阅读 · 0 评论 -
简单的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 · 277 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 · 2827 阅读 · 0 评论 -
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 阅读 · 0 评论 -
怎么优雅的在主线程获取子线程的返回值
今天面试被面试官问道怎么自己实现主线程获取到子线程的返回值,且要优雅不能使用静态变量方法一:使用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 · 2723 阅读 · 0 评论 -
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 · 759 阅读 · 0 评论 -
动态代理的实现逻辑
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 阅读 · 0 评论 -
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 · 1989 阅读 · 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 · 1287 阅读 · 0 评论 -
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 · 711 阅读 · 0 评论 -
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 · 3193 阅读 · 0 评论 -
使用Lombok的注解代替@Autowired的冗余
经常写springboot的同学都知道在我们需要用到ioc里面的对象的时候需要对要用到的对象进行@Autowired注释进行注入到当前类,这样一来会发现代码特别冗余很乱,这时候我们就建议进行构造器注入见下列代码@RestController@RequestMapping("/test")// 在需要注入Bean的类上面加上该注解@RequiredArgsConstructor public class TestController {// 这里可以用@NonNull或者用final修饰即可.原创 2022-01-17 22:12:05 · 1643 阅读 · 2 评论 -
获取指定路径的配置文件
有时候需要通过获取非application.properties里面配置的文件,这时候我们可以通过执行文件路径来获取到想要获取的文件配置@Data@Component@PropertySource(value = {"file:要读取的配置文件全路径"}, encoding="utf-8")// 这个配置的目的是只获取配置文件里面前缀是demo开头的配置@ConfigurationProperties(prefix = "demo")public class Demo.原创 2021-12-23 18:18:17 · 512 阅读 · 0 评论 -
kafka的多数据源监听相关操作
我们经常会遇到一个微服务里面想要对多态服务器的kafka进行监听(非集群)这时候平常在application.properties可能就没办法支撑了,我们就需要通过原始方式进行配置@Configuration@EnableKafkapublic class KafkaConfiguration { @Value("${brokerAddress}") // kafka所在地址ip:port private String brokerAddress; @Value("${.原创 2021-10-28 23:07:01 · 1573 阅读 · 0 评论 -
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 · 6200 阅读 · 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 · 4687 阅读 · 0 评论 -
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 · 87 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 · 122 阅读 · 0 评论 -
本地线程ThreadLocal,以及多线程相关问题
在开发过程中我们经常遇到高并发之后使用到多线程,线程池等相关内容,但是我们经常遇到在多个线程里面操作同一个变量出现了高并发数据问题,这种情况其实可以通过本地线程进行避免.public static void main(String[] args) {// 创建一个线程池ThreadPoolExecutor executor = new ThreadPoolExecutor (10,20,60,TimeUnit.SECONDS,new SynchronousQueue<>.原创 2021-08-18 23:33:19 · 499 阅读 · 0 评论 -
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 · 364 阅读 · 0 评论 -
mysql的批量更新
今天写代码遇到了mysql通过集合更新个别字段的情况,思考了很久发现如果for循环以后高并发可能就直接凉凉,之后看到了一个很强的东西 on DUPLICATE KEY UPDATE,直接上代码结束一下怎么使用见图解释:这里使用的是批量添加的语句,这里id一定要加上,因为如果在insert的时候发现你的主键id已经在表里存在了,后面sql语句后面有onduplice key update 那么就会根据id去更新需要更新的字段,需要更新的字段写法如图: 表里面的字段名 = values(表字段名),.原创 2021-08-11 21:10:49 · 211 阅读 · 0 评论 -
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 · 433 阅读 · 0 评论 -
mysql多字段group by分析实践
先看一下表数据来看sqlselect * from t_table t group by t.name,t.age,t.sex看到结果有的同学要问了group by 了那么为什么name还是会重复,这里就要提到一个东西就是如果group by了多个字段那么前者在一定程度上会限制后者,这里的一定程度就是后者的group by不会减少前者的数据可能有点难理,需要自己写一下去琢磨一下就行了注意事项:网上很多人都说group by多字段最终结果都是最后一个字段来决定的 这种说法是不正确的,.原创 2021-08-03 10:10:42 · 221 阅读 · 0 评论 -
@AfterReturning执行会被包含在切点方法里面的事务吗?
今天写代码突然发现了一个问题,如果我定义了一个切面里面有@AfterReturning的切面,定义切点是被@Hh注解注释的方法那么被@Hh注释的方法如果有事务,那么切面会被当前事务包含在内吗? 直接上代码// 定义切面@Aspect@Componentpublic class MyAspect { @AfterReturning(pointcut = "@annotation(com.example.aop.Hh)", returning = "result") .原创 2021-07-25 22:33:01 · 1056 阅读 · 0 评论 -
@AfterReturning里面的Returning值解释,以及获取自定义注解参数值
今天写代码遇到了@AfterReturning(returning = ‘var’)查了很多网络资料都只说这个是方法返回值,并没有说是什么方法返回值,这里坐下代码解释// 被切方法@RestController@RequestMapping("/show")public class ControllerTwo { @RequestMapping("/test") @Hh(status = "2") public String test(){ retur.原创 2021-07-21 14:18:41 · 10607 阅读 · 7 评论 -
简单sql执行时间过长,但是hsf超时后执行成功
先简单说一下情况:今天写代码的时候遇到了一个坑,一个类里面的A方法存在一个事务,之后A方法调用该类的B方法,B方法里面又通过RPC调用另一个微服务的C方法,C方法自己有事务且他们都是通过ID去修改同一条数据.,这就出现了经典死锁,见代码public class Test{ @Autowired private UserDao userDao; @Autowired private UserHsfService userHsfService; @Transactional public .原创 2021-07-19 15:59:42 · 493 阅读 · 0 评论 -
java的常用设计模式
直接上代码// 先定义一个最基本的接口public interface BaseInterface { // 用于业务处理的方法 public void toDoService(); // 用于返回当前业务名字的方法 public String returnServiceName();}// 在定义上面接口的子类@Servicepublic class ServiceOne implements BaseInterface{ @Override pub.原创 2021-07-11 16:13:11 · 293 阅读 · 0 评论