java相关
文章平均质量分 72
hero.fei
这个作者很懒,什么都没留下…
展开
-
如何将一个外部bean加入spring容器中以及spring.factories使用
原因为什么要使用,因为在程序开发中,可能包名不一样,pom依赖的很多的jar 他们是如何把这些类进行注入到spring容器中的呢。所以springboot就提出了spring.factories,一般写一个框架但是如何保证框架中的bean引入到主服务的容器中的,这个时候需要在框架中引入spring.factories,在主服务初始化时会调用所有的spring.factories文件将里面声明的bean进行扫描到spring容器中。一、第一种框架项目是Test类package com.test原创 2021-11-09 11:49:44 · 905 阅读 · 0 评论 -
spring容器中如何注入多个相同bean及@Primary注解使用
@Primary注解使用当一个方法有多个实现类时,在方法中注入了多个,@primary可以指定注入哪一个。@Primary:自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常@Autowired 默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用@Autowired @Qualifier(“personDaoBean”) 存在多个实例配合使用@Primary能够与@Component组合用在组件扫描的bean上,也原创 2021-11-09 11:37:43 · 4955 阅读 · 0 评论 -
Spring项目实现grpc协议
在工作中python服务不支持rpc协议,为了将dubbo服务与python连起来引入了grpc协议,在java服务中开启grpc接口供python服务调用,以下做个简单的总结:先定义proto文件例如TestFacade.proto文件如下:syntax = "proto3";import "google/protobuf/timestamp.proto";//proto文件生成java文件的包路径package com.test.service.facade;option..原创 2021-09-04 19:11:32 · 846 阅读 · 0 评论 -
Guava异步框架Event-bus在spring中的使用总结
Event-bus使用总结1. 概述guava中EventBus是一个消息处理总线,基于观察者模式设计和实现。主要介绍下在spring框架中如何使用和配置EventBus。EventBus主要分为两种,一种是同步消息总线(EventBus);另一种是异步消息总线(AsyncEventBus)。下面主要以同步消息总线为例来介绍下EventBus和Spring的结合使用。一个消息总线可以支持多种消息的订阅和发送,不同的消息通过类名来区分。消息体使用一个简单的Java DO,本身不需要继...原创 2021-09-04 18:22:21 · 989 阅读 · 0 评论 -
java中实现一些版本大小对比
实现一个compare接口,因为版本往往是1.23.60.2之类的,所以只能用.分割之后进行依次对比。下面是一个Comparator接口只需要在TreeSet或者TreeMap中加一个参数TreeMap treemap= newTreeMap<getComparator>private static Comparator<String> getComparator() {Comparator<String> comparator = (one, two) ->.原创 2020-07-10 10:54:23 · 428 阅读 · 2 评论 -
java8 四大核心函数式接口Function、Consumer、Supplier、Predicate
函数式接口,即适用于函数式编程场景的接口。而Java中的函数式编程体现就是Lambda,所以函数式接口就是可以适用于Lambda使用的接口。只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导Function<T, R>T:入参类型,R:出参类型调用方法:Rapply(Tt);定义函数示例:Function<Integer, I...翻译 2019-11-23 20:06:58 · 497 阅读 · 0 评论 -
在springboot中利用JTA做多数据源的事物回滚
JTA 实现原理很多开发人员都会对 JTA 的内部工作机制感兴趣:我编写的代码没有任何与事务资源(如数据库连接)互动的代码,但是我的操作(数据库更新)却实实在在的被包含在了事务中,那 JTA 究竟是通过何种方式来实现这种透明性的呢? 要理解 JTA 的实现原理首先需要了解其架构:它包括事务管理器(Transaction Manager)和一个或多个支持 XA 协议的资源管理器 ( Reso...翻译 2019-11-09 18:14:49 · 843 阅读 · 0 评论 -
引用计数进行垃圾回收
引用计数:给对象中添加一个引用计数器初始值设为0,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;计数器为零时清空对象引用释放资源,当在java中调用了JNI低层使用C来实现,由于C没有java自动回收的机制所以需要自动手动回收垃圾。任何时刻计数器为0的对象就是不可能再被使用的。//不序列化private AtomicInteger atomicInteger = ne...原创 2019-10-31 21:19:59 · 417 阅读 · 0 评论 -
获取property文件中的值Value使用和ConfigurationProperties以及PropertySource使用
Spring (Boot)获取参数的方式有很多,其中最被我们熟知的为@Value了,它不可谓不强大。今天就针对我们平时最长使用的@Value,以及可能很少人使用的@PropertySource、@ConfigurationProperties等相关注解进行一个详细spring boot 使用@ConfigurationProperties有时候有这样子的情景,我们想把配置文件的信息,读取并...翻译 2019-10-31 18:16:18 · 703 阅读 · 0 评论 -
利用HTTPClient发送http请求post和get
public static String post(String api, Map<String, String> paramMap) throws IOException { HttpClient client = HttpClients.custom().build(); StringEntity entity = new StringEntity...翻译 2019-10-31 12:32:13 · 267 阅读 · 0 评论 -
Mybatis自动生成工具的使用介绍
<generatorConfiguration> <!-- context元素用于指定生成一组对象的环境。targetRuntime:此属性用于指定生成的代码的运行时环境。MyBatis3:*这是默认值*--> <context id="test...翻译 2019-04-04 20:08:07 · 329 阅读 · 0 评论 -
java8中Collectors收集器的使用
Collectors 实现了接口 Collector<T,A,R> 收集器将strom结果进行收集T: 需要进行reduce操作的元素类型A:reduce操作的动态集合类型R:reduce操作的结果类型举例//将名字集合到listList<String> list = people.stream().map(Person::getName).collec...翻译 2019-04-27 16:32:06 · 1000 阅读 · 0 评论 -
java8中Optional的使用
Optional是Java8提供的为了解决null安全问题的一个API。善用Optional可以使我们代码中很多繁琐、丑陋的设计变得十分优雅。这篇文章是建立在你对Optional的用法有一定了解的基础上的,如果你还不太了解Optional,可以先去看看相关教程,或者查阅Java文档。使用Optional,我们就可以把下面这样的代码进行改写。public static String getNa...翻译 2019-04-27 11:43:39 · 159 阅读 · 0 评论 -
mysql两种引擎MyISAM与InnoDB的对比
mysql规则引擎的对比:MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,但却有一个缺点:不支持事务处理(transaction)。不过,在这几年的发展下,MySQL也导入了InnoDB(另一种数据库引擎),以强化参考完整性与并发违规处理机制,后来就逐渐取代M...翻译 2019-04-26 18:28:22 · 299 阅读 · 0 评论 -
api文档生成工具apiggs的使用
代码即文档Apiggs是一个非侵入的RestDoc文档生成工具。工具通过分析代码和注释,获取文档信息,生成RestDoc文档。首先需要在pom中添加apiggs的依赖依赖,<dependency>../bot-manage-domain/src/main/java</dependency>是实体对象所在路径,当没有dependency内容时不会读取到返回的对象导致没...原创 2019-04-25 20:05:38 · 3468 阅读 · 0 评论 -
在SpringBoot中利用Tomcat创建一个websocket服务器
需要引入注解@EnableWebSocket先写一个config继承WebSocketConfigurer接口用来注册websocket的请求,通过registry.addHandler(socketHander, "/dds","/dds/test");将为dds或者的/dds/test请求交由socketHander来处理, 直接使用registry.addHa...翻译 2019-04-03 16:44:03 · 513 阅读 · 0 评论 -
socket通讯与连接(三次握手四次挥手)
套接字(socket)概念套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。 建立socket连接建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为Clie...翻译 2019-04-02 12:18:19 · 599 阅读 · 0 评论 -
http与websocket的对比
1. http协议是用在应用层的协议,他是基于tcp协议的,http协议建立链接也必须要有三次握手才能发送信息。 http链接分为短链接,长链接,短链接是每次请求都要三次握手才能发送自己的信息。即每一个request对应一个response。长链接是在一定的期限内保持链接。保持TCP连接不断开。客户端与服务器通信,必须要有客户端发起然后服务器返回结果。客户端是主动的,服务器是被动的。2. W...翻译 2019-04-01 20:38:49 · 992 阅读 · 0 评论 -
list和map的初始容量问题
List接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。 ArrayList继承于List接口,除继承过来的方法外,还提供一些方法来操作内部用来存储列表的数组的大小。 每个ArrayList实例都有一个容量。该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向ArrayList中不断添加元素,其容量也自动增长。并未指定增...翻译 2019-05-25 10:57:02 · 1844 阅读 · 0 评论 -
date时间日期与java8中LocalDate使用
(1)Date:表示特定的瞬间,精确到毫秒(因为闰秒的原因,所以其实结果并不是特别的准确,但是如果要求不是特别严格,影响并没有很大。) 构造方法:Date()、Date(Long date) 常用方法: void setTime(Long time):根据毫秒数设置该日期对象,默认构造函数设置该日期对象为当前日期。 Long getTi...翻译 2019-06-14 16:19:35 · 1461 阅读 · 0 评论 -
java中线程池的创建以及调用
使用ThreadPoolExecutor创建线程池:@Beanpublic ExecutorService threadPool() { int corePoolSize=5,maximumPoolSize=10,keepAliveTime=1,BlockingDequesize=20; return new ThreadPoolExecutor(corePoolSiz...原创 2018-06-25 17:22:25 · 986 阅读 · 1 评论 -
java中对jni的调用实例
什么是jni:jni是java native interface的缩写,是java平台的一部分,允许java代码和其他语言写的代码进行交互。 在本模块resource下面或者创建一个模块在resource下面创建目录native/linux/amd64下面放入libhs.so native/windows/amd64下面放入hyperscan.dll nativ...原创 2019-08-31 18:40:39 · 452 阅读 · 0 评论 -
java常用排序算法(冒泡,插入,快速)等
快速排序:算法描述:对于一组给定的记录,通过一趟排序后,将原序列分为两部分,其中前一部分的所有记录均比后一部分的所有记录小,然后再依次对前后两部分的记录进行快速排序,递归该过程,直到序列中的所有记录均有序为止。快速排序的原理:选择一个关键值作为基准值。比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的)。一般选择序列的第一个元素。一次循环:从后往前比较,用基准值和最...翻译 2019-07-06 17:41:42 · 104 阅读 · 0 评论 -
JVM内存分析工具jstack,jstat与jmap的使用
jstack用于JVM当前时刻的线程快照,又称threaddump文件,它是JVM当前每一条线程正在执行的堆栈信息的集合。生成线程快照的主要目的是为了定位线程出现长时间停顿的原因,如线程死锁、死循环、请求外部时长过长导致线程停顿的原因。通过jstack我们就可以知道哪些进程在后台做些什么?在等待什么资源等!其运行格式如下:1.jstack命令的语法格式: jstack<pid>。...翻译 2019-07-10 21:22:42 · 7783 阅读 · 1 评论 -
熔断与降级机制HYSTRIX
服务熔断: 服务熔断的作用类似于我们家用的保险丝,当某服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂时停止对该服务的调用。 服务降级: 服务降级是从整个系统的负荷情况出发和考虑的,对某些负荷会比较高的情况,为了预防某些功能(业务场景)出现负荷过载或者响应慢的情况,在其内部暂时舍弃对一些非核心的接口和数据的请求,而直接返回一...原创 2019-06-29 14:54:22 · 2237 阅读 · 0 评论 -
SpringBoot中application启动类注解与支持Scheduled定时任务
@SpringBootApplication @EnableAutoConfiguration @Configuration @ImportResource(locations = {"classpath:applicationContext.xml", "classpath:${dubbo.co...翻译 2019-06-26 20:31:05 · 454 阅读 · 0 评论 -
以接口做为参数调用的实例
1.先定义一个接口并且里面只有一个方法 public interface NameResolver { String getDictName(String name); } 2.定义一个方法里面含有接口作为参数,将接口作为参...原创 2019-06-11 20:27:54 · 1532 阅读 · 0 评论 -
工作中常用操作命令
windows杀死进程命令: 输入命令: netstat -aon|findstr "49157 taskkill /f /t /im 92019windows下杀死所有java进程 taskkill /F /IM java.exelinux查看端口占用情况:netstat -tunlp|grep "8080";ps -aux...原创 2019-06-14 16:21:30 · 126 阅读 · 0 评论 -
tomcat与netty以及Nio的使用
就IO而言:概念上有5中模型:blocking I/O,nonblocking I/O,I/O multiplexing (select and poll),signal driven I/O (SIGIO),asynchronous I/O (the POSIX aio_functions)。 tomcat就是针对http层的,所以我建议http还是选择tomcat(或者其他成熟的...翻译 2019-04-04 17:42:00 · 2379 阅读 · 0 评论 -
java8中多线程异步调用方法CompletableFuture的特性及方法
在java8以前,我们使用java的多线程编程,一般是通过Runnable中的run方法来完成,这种方式,有个很明显的缺点,就是,没有返回值,这时候,大家可能会去尝试使用Callable中的call方法,然后用Future返回结果,如下:public static void main(String[] args) throws Exception { ExecutorServ...原创 2019-03-30 14:50:12 · 1400 阅读 · 0 评论 -
范型对象的使用
范型类和方法的调用: 泛型程序设计意味着编写的代码可以被很多不同类型的对象所重用。例如,我们不希望为聚集String和File对象分别设计不同的类。实际上根本不需要那么做,因为一个ArrayList类可以聚集任何类型的对象。这是一个泛型程序设计的实例。1. 简单泛型类的定义:一个泛型类(generic class)就是具有一个或者多个类型变量的类。 看下面的简单的泛型类Pair...翻译 2018-12-06 20:59:09 · 316 阅读 · 0 评论 -
Swagger在SpringBoot中的使用
Swagger使用: 在开发过程中,有时候我们需要不停的测试接口,自测,或者交由测试测试接口,我们需要构建一个文档,都是单独写,太麻烦了,现在使用springboot集成swagger2来构建RESTful API文档,可以在访问接口上,直接添加注释。我们先引入swagger2的jar包,pom文件引入依赖如下:<dependency> <groupId...翻译 2018-12-08 15:32:07 · 185 阅读 · 0 评论 -
ReentrantLockCondition锁与Synchronized在多线程中的使用
生产者-消费者(producer-consumer)问题,也称作有界缓冲区(bounded-buffer)问题,两个进程共享一个公共的固定大小的缓冲区。其中一个是生产者,用于将消息放入缓冲区;另外一个是消费者,用于从缓冲区中取出消息。问题出现在当缓冲区已经满了,而此时生产者还想向其中放入一个新的数据项的情形,其解决方法是让生产者此时进行休眠,等待消费者从缓冲区中取走了一个或者多个数据后再...原创 2018-12-04 10:34:02 · 235 阅读 · 0 评论 -
DFA与NFA的比较
正则表达式的规则很容易理解,但是正则表达式并不能直接用来解析字符串,我们还要引入一种适合转化为计算机程序的模型。今天我们引入的这种模型就叫做有穷自动机(finite automation,FA),有时也叫有穷状态机(finite state machine)。有穷自动机首先包含一个有限状态的集合,还包含了从一个状态到另外一个状态的转换。有穷自动机看上去就像是一个有向图,其中状态是图的节点,而状态转...翻译 2018-09-12 17:32:28 · 14101 阅读 · 0 评论 -
java中Future的应用
Future接口是Java标准API的一部分,在java.util.concurrent包中。Future接口是Java线程Future模式的实现,可以来进行异步计算。有了Future就可以进行三段式的编程了,1.启动多线程任务2.处理其他事3.收集多线程任务结果。从而实现了非阻塞的任务调用。在途中遇到一个问题,那就是虽然能异步获取结果,但是Future的结果需要通过isdone来判断是否有结果,...翻译 2018-07-06 20:42:03 · 1525 阅读 · 0 评论 -
在java中使用引用计数回收垃圾
引用计数:就是对于创建的每一个对象都有一个与之关联的计数器,这个计数器记录着该对象被使用的次数,每使用一次计数器增加1,使用完毕减少1,垃圾收集器在进行垃圾回收时,对扫描到的每一个对象判断一下计数器是否等于0,若等于0,就会释放该对象占用的内存空间,同时将该对象引用的其他对象的计数器进行减一操作。private AtomicInteger atomicInteger = new AtomicI...原创 2018-07-08 15:46:14 · 342 阅读 · 0 评论 -
loadingcatch的缓存使用
首先需要引入pom依赖 <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>24.1-jre</version></dependency> 生成原创 2018-06-26 10:32:04 · 612 阅读 · 0 评论 -
spring注解@postConstruct与constructor与@Autowired的启动顺序
@Postcontruct’在依赖注入完成后自动调用,例如要将对象a注入到对象b中,首先需要生成对象a才能将a注入到b中,所以一个类中只有成员变量a被Autowired注入是发生在A的构造方法完成之后的,如果在生成对象时完成某些被初始化操作,而这个有依赖与依赖注入。@postConstruct与constructor与@Autowired的启动顺序:为construc...原创 2018-06-25 10:00:07 · 3059 阅读 · 2 评论 -
netty服务的搭建
启动springboot的主类@SpringBootApplication@Configuration@EnableAutoConfigurationpublic class MainApplication { public static void main(String[] args) { SpringApplication.run(MainAppli...原创 2018-06-24 19:12:40 · 400 阅读 · 0 评论 -
关于java的双重检查法应用说明
最近项目中用到了双重检查法(是从C语言移植过来 的一种代码模式):个人觉得这是一种非常好的设计方法,就是在检查一个对象为空的情况下取创建一个新的对象出来,如果不为空就直接使用,下面通过一个详细的案例讲述一下:Class test(){Private Foo foo=null;Public Foo getFoo(){If(foo==null){foo=new Foo();}Return foo;}}...原创 2018-06-14 11:48:45 · 313 阅读 · 0 评论