
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 · 962 阅读 · 0 评论 -
spring容器中如何注入多个相同bean及@Primary注解使用
@Primary注解使用当一个方法有多个实现类时,在方法中注入了多个,@primary可以指定注入哪一个。@Primary:自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常@Autowired 默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用@Autowired @Qualifier(“personDaoBean”) 存在多个实例配合使用@Primary能够与@Component组合用在组件扫描的bean上,也原创 2021-11-09 11:37:43 · 5235 阅读 · 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 · 908 阅读 · 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 · 1055 阅读 · 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 · 469 阅读 · 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 · 533 阅读 · 0 评论 -
在springboot中利用JTA做多数据源的事物回滚
JTA 实现原理很多开发人员都会对 JTA 的内部工作机制感兴趣:我编写的代码没有任何与事务资源(如数据库连接)互动的代码,但是我的操作(数据库更新)却实实在在的被包含在了事务中,那 JTA 究竟是通过何种方式来实现这种透明性的呢? 要理解 JTA 的实现原理首先需要了解其架构:它包括事务管理器(Transaction Manager)和一个或多个支持 XA 协议的资源管理器 ( Reso...翻译 2019-11-09 18:14:49 · 905 阅读 · 0 评论 -
引用计数进行垃圾回收
引用计数:给对象中添加一个引用计数器初始值设为0,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;计数器为零时清空对象引用释放资源,当在java中调用了JNI低层使用C来实现,由于C没有java自动回收的机制所以需要自动手动回收垃圾。任何时刻计数器为0的对象就是不可能再被使用的。//不序列化private AtomicInteger atomicInteger = ne...原创 2019-10-31 21:19:59 · 454 阅读 · 0 评论 -
获取property文件中的值Value使用和ConfigurationProperties以及PropertySource使用
Spring (Boot)获取参数的方式有很多,其中最被我们熟知的为@Value了,它不可谓不强大。今天就针对我们平时最长使用的@Value,以及可能很少人使用的@PropertySource、@ConfigurationProperties等相关注解进行一个详细spring boot 使用@ConfigurationProperties有时候有这样子的情景,我们想把配置文件的信息,读取并...翻译 2019-10-31 18:16:18 · 747 阅读 · 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 · 297 阅读 · 0 评论 -
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 · 501 阅读 · 0 评论 -
JVM内存分析工具jstack,jstat与jmap的使用
jstack用于JVM当前时刻的线程快照,又称threaddump文件,它是JVM当前每一条线程正在执行的堆栈信息的集合。生成线程快照的主要目的是为了定位线程出现长时间停顿的原因,如线程死锁、死循环、请求外部时长过长导致线程停顿的原因。通过jstack我们就可以知道哪些进程在后台做些什么?在等待什么资源等!其运行格式如下:1.jstack命令的语法格式: jstack<pid>。...翻译 2019-07-10 21:22:42 · 8014 阅读 · 1 评论 -
java常用排序算法(冒泡,插入,快速)等
快速排序:算法描述:对于一组给定的记录,通过一趟排序后,将原序列分为两部分,其中前一部分的所有记录均比后一部分的所有记录小,然后再依次对前后两部分的记录进行快速排序,递归该过程,直到序列中的所有记录均有序为止。快速排序的原理:选择一个关键值作为基准值。比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的)。一般选择序列的第一个元素。一次循环:从后往前比较,用基准值和最...翻译 2019-07-06 17:41:42 · 126 阅读 · 0 评论 -
熔断与降级机制HYSTRIX
服务熔断: 服务熔断的作用类似于我们家用的保险丝,当某服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂时停止对该服务的调用。 服务降级: 服务降级是从整个系统的负荷情况出发和考虑的,对某些负荷会比较高的情况,为了预防某些功能(业务场景)出现负荷过载或者响应慢的情况,在其内部暂时舍弃对一些非核心的接口和数据的请求,而直接返回一...原创 2019-06-29 14:54:22 · 2313 阅读 · 0 评论 -
SpringBoot中application启动类注解与支持Scheduled定时任务
@SpringBootApplication @EnableAutoConfiguration @Configuration @ImportResource(locations = {"classpath:applicationContext.xml", "classpath:${dubbo.co...翻译 2019-06-26 20:31:05 · 522 阅读 · 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 · 154 阅读 · 0 评论 -
date时间日期与java8中LocalDate使用
(1)Date:表示特定的瞬间,精确到毫秒(因为闰秒的原因,所以其实结果并不是特别的准确,但是如果要求不是特别严格,影响并没有很大。) 构造方法:Date()、Date(Long date) 常用方法: void setTime(Long time):根据毫秒数设置该日期对象,默认构造函数设置该日期对象为当前日期。 Long getTi...翻译 2019-06-14 16:19:35 · 1548 阅读 · 0 评论 -
以接口做为参数调用的实例
1.先定义一个接口并且里面只有一个方法 public interface NameResolver { String getDictName(String name); } 2.定义一个方法里面含有接口作为参数,将接口作为参...原创 2019-06-11 20:27:54 · 1598 阅读 · 0 评论 -
list和map的初始容量问题
List接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。 ArrayList继承于List接口,除继承过来的方法外,还提供一些方法来操作内部用来存储列表的数组的大小。 每个ArrayList实例都有一个容量。该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向ArrayList中不断添加元素,其容量也自动增长。并未指定增...翻译 2019-05-25 10:57:02 · 1920 阅读 · 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 · 1043 阅读 · 0 评论 -
java8中Optional的使用
Optional是Java8提供的为了解决null安全问题的一个API。善用Optional可以使我们代码中很多繁琐、丑陋的设计变得十分优雅。这篇文章是建立在你对Optional的用法有一定了解的基础上的,如果你还不太了解Optional,可以先去看看相关教程,或者查阅Java文档。使用Optional,我们就可以把下面这样的代码进行改写。public static String getNa...翻译 2019-04-27 11:43:39 · 177 阅读 · 0 评论 -
mysql两种引擎MyISAM与InnoDB的对比
mysql规则引擎的对比:MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,但却有一个缺点:不支持事务处理(transaction)。不过,在这几年的发展下,MySQL也导入了InnoDB(另一种数据库引擎),以强化参考完整性与并发违规处理机制,后来就逐渐取代M...翻译 2019-04-26 18:28:22 · 326 阅读 · 0 评论 -
api文档生成工具apiggs的使用
代码即文档Apiggs是一个非侵入的RestDoc文档生成工具。工具通过分析代码和注释,获取文档信息,生成RestDoc文档。首先需要在pom中添加apiggs的依赖依赖,<dependency>../bot-manage-domain/src/main/java</dependency>是实体对象所在路径,当没有dependency内容时不会读取到返回的对象导致没...原创 2019-04-25 20:05:38 · 3561 阅读 · 0 评论 -
Mybatis自动生成工具的使用介绍
<generatorConfiguration> <!-- context元素用于指定生成一组对象的环境。targetRuntime:此属性用于指定生成的代码的运行时环境。MyBatis3:*这是默认值*--> <context id="test...翻译 2019-04-04 20:08:07 · 361 阅读 · 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 · 2432 阅读 · 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 · 573 阅读 · 0 评论 -
socket通讯与连接(三次握手四次挥手)
套接字(socket)概念套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。 建立socket连接建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为Clie...翻译 2019-04-02 12:18:19 · 668 阅读 · 0 评论 -
http与websocket的对比
1. http协议是用在应用层的协议,他是基于tcp协议的,http协议建立链接也必须要有三次握手才能发送信息。 http链接分为短链接,长链接,短链接是每次请求都要三次握手才能发送自己的信息。即每一个request对应一个response。长链接是在一定的期限内保持链接。保持TCP连接不断开。客户端与服务器通信,必须要有客户端发起然后服务器返回结果。客户端是主动的,服务器是被动的。2. W...翻译 2019-04-01 20:38:49 · 1055 阅读 · 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 · 1459 阅读 · 0 评论 -
Voice中对netty的处理
@Configurationpublic class WebSocketConfiguration { @Autowired private NettyServerProperties properties; @Autowired private ConfigConfiguration config; /** * 启动netty服务 在生成b...原创 2019-03-29 14:40:11 · 188 阅读 · 0 评论 -
日志LogBack的使用
一、logback的介绍 Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch。它当前分为下面下个模块: logback-core:其它两个模块的基础模块 logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其...翻译 2019-03-19 11:49:35 · 1152 阅读 · 0 评论 -
Java中正则的简单使用理解
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表现模式。 Matcher一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查。 首先一个Pattern实例订制了一个所用语法与PERL......原创 2019-03-16 11:15:10 · 152 阅读 · 0 评论 -
java8-Lambda的简单使用以及集合排序
一: 实现Runnable线程案例 使用() -> {} 替代匿名类: java8之前: new Thread(new Runnable() { @Override public void run() { System.out.println("Before Java8 "); } ...原创 2019-03-15 18:09:53 · 817 阅读 · 0 评论 -
Java 中回调机制的应用与理解
回调使用场景:用一个统一的接口实现不同的功能的时候,这时候回调机制就会派上用场 1、同步回调,即阻塞,单向。 2、回调,即双向(类似自行车的两个齿轮)。 3、异步调用,即通过异步消息进行通知 比如这里模拟个场景:客户端发送msg给服务端,服务端处理后(5秒),回调给客户端,告知处理成功。代码如下: 回调接口类: 回调...翻译 2019-03-15 10:42:05 · 241 阅读 · 0 评论 -
Java中使用单例模式定义服务全局变量以及使用
在有些情况下一些变量需要在整个项目中都使用到,例如token的验证等都可以将用户信息放入全局配置变量中但是内容不要太大如果太大的话占用系统的资源导致系统变慢,请看下面案例: /*** 一些可以全局配置的变量,内部没有使用spring,只好借助这个类来传递* spring 初始化的时候给这个对象设置好适当的值*/public class GlobalSetting {...原创 2019-03-13 14:13:56 · 2883 阅读 · 0 评论 -
Java中利用Serializable和Externalizable序列化与反序列化的使用
1、Serializable序列化时不会调用默认的构造器,而Externalizable序列化时会调用默认构造器的,Serializable不需要自己实现序列化方法可以使用默认的序列化方法,而Externalizable需要自己实现序列化!!! 2、Serializable:一个对象想要被序列化,那么它的类就要实现 此接口,这个对象的所有属性(包括private...原创 2019-03-12 22:30:10 · 340 阅读 · 0 评论 -
Java中Pair键值对的使用
应用: 当一个函数返回两个值并且两个值都有重要意义时我们一般会用Map的key和value来表达,但是这样的话就需要两个键值对,用Map映射去做处理时,此时的key相当于value的一个描述或者引用,而具体的信息都保存在value中,我们可以通过key去获取对应的value。但是当key和value都保存具体信息时,我们就需要用到Pair对了。Pair对也是键值对的形式。具体的实现:...翻译 2019-03-12 10:44:40 · 68221 阅读 · 0 评论 -
java中使用内存来存储数据案例
1.先创建一个对象作为存储对象public class UserCache{Map<String,User> idAndUsers = new HashMap<String , User> // 存取所有的用户 key为主键Id value为User对象List userIds = newArrayList<String>(); // 存取所有的用...原创 2019-03-09 19:56:57 · 1033 阅读 · 0 评论 -
Spring AOP的使用以及案例
SpringAOP:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率,在springAOP中业务逻辑仅仅只关注业务本身,将...原创 2019-03-09 15:11:22 · 370 阅读 · 0 评论 -
Spring项目中ApplicationContextAware接口的使用引入ApplicationContext上下文
在Web应用中,Spring容器通常采用声明式方式配置产生:开发者只要在web.xml中配置一个Listener,该Listener将会负责初始化Spring容器,MVC框架可以直接调用Spring容器中的Bean,无需访问Spring容器本身。在这种情况下,容器中的Bean处于容器管理下,无需主动访问容器,只需接受容器的依赖注入即可。但在某些特殊的情况下,Bean需要实现某个功...原创 2019-02-21 21:56:29 · 373 阅读 · 0 评论