今天介绍两个大家每天都在用但是却很少去了解它的知识点:spi 和 jar 运行机制,废话不多说,开始正题。
最近遇到一个需求,在程序运行期间,拿到已加载类对应的jar包,然后上传到另一个地方,本以为利用ClassLoader直接定位到jar的InputStream流直接读取就ok,事实却没有这么简单,我把问题总结为以下几个小点,逐一解决。
1. 获取类路径 返回类路径内容,一般为:lib1.jar;lib2.jar。 System.getProperty("java.class.path"); 在命令行运行Java程序时,上面的代码将会返回"-cp"参数内容,例如,执行下面的命令返回".;test.jar": java -cp .;test.jar Test 2. Jar文件中路径操作 2.1 获取当前代码所在Jar包的绝对路径 File f = new File(Test.class.getProtectionD
项目写完了,自己也简单的测试了一下没问题,但打成Jar包之后就出现问题了,没有办法加载配置文件,具体的问题是这样的: 在代码中用Spring的ResourceUtils.getFile()得到某一配置文件,代码具体如下
Spring Boot 提供了 Maven 插件 spring-boot-maven-plugin,可以方便的将 Spring Boot 项目打成 jar 包或者 war 包。
在大数据开发和java web开发中,我们有时会在程序中读取一些资源文件的内容。当我们在本地运行调试的时候是没有任何问题的,但是当我们将程序打成jar包上传到集群中后运行时,发现报错:“找不到配置文件的路径”。虽然jar中确实存在配置文件,但是还是读取不到。
spring boot 的工程支持打包为jar和war,打包成 jar 或 war 可以直接用 java -jar xxx.jar 来启动,war包也可以放入tomcat等容器中运行。
在开发中读取项目中的配置或者静态文件是家常便饭的事情,我相信很多同学都从网上找下面的例子来进行文件加载读取操作。
通常获取一个资源文件很简单,问题是对于jar包内的资源文件,可能会发生意外。假如这里有一个文件操作的类:
Web Services是由企业发布的完成其特定商务需求的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务。具体来说它可以完成异构语言的通信,就是可以通过它来让C#和Java之间进行通信。
starter是一种服务,使用某个功能的开发者不需要关注各种依赖库的处理,不需要具体的配置信息,由Spring Boot自动通过classpath路径下的类发现并加载需要的Bean。
MainActivity在向MainService类的startService方法传入了Context后立刻结束掉了当前类
本文介绍了一个基于Java的SOAP方式定时任务脚本框架,该框架能够读取CSV文件,解析CSV文件中的数据,并调用相关SOAP服务将数据插入到指定的Salesforce表中。同时,该框架具有自我管理和定时任务执行的功能。
hello,伙伴们,在闲暇的时候逛了一下掘金,发现了这样的一篇文章:spring boot+apache tika实现文档内容解析,对里边提到的tika很感兴趣,感兴趣的原因之一就是当时在研究文档识别和文本识别的时候,找了很多的工具类:
在很多场景下,如果能够生成Java代码中方法之间的调用链,是很有帮助的,在代码审计及漏洞分析等场景中也是。
之前介绍了如何使用命令行将Jar包根据配置文件进行ProGuard,以及ProGuard的过程,会遇到的问题等。接下来会介绍常用的ProGuard如何配置参数。不常用的可以在官网中查询如何使用。
将在idea里的java代码放在VMware里运行,具体操作步骤 java代码与在idea里的差不多,只有WordCountDriverLinux 做了一点改变 其他的代码参考 MapReduce编程初体验(idea):统计一个文档里的单词个数
由于要批量生成Excel,并且模板已经给定。所以尝试用POI来操作一下。由于自己用的Office版本大于2007,所以在操作的时候遇到各种坑,特此记录一下~~~ 注意点 1、由于POI对于Office2003和2007之后的版本对应的jar包不一样,操作的类也不一样,所以在操作之前一定要准确找到不同版本的Excel对应的jar包。 2、编译时不报错不代表运行不报错,很多操作都是POI在操作Excel时出现问题的,所以除了添加代码中需要Import类所在的jar包之外,必须要加入额外的jar包。 操作
在上篇文章 《组件治理之多仓组件化编译的一些问题》中介绍,一些原本可在编译期间报错的问题被带到了运行时,我们需要开发一款检查插件,把 NoClassDefFoundError、NoSuchMethodError、NoSuchFieldError 与 AbstractMethodError 等异常提前在编译期间卡住。
No FileSystem for scheme: hdfs 通过ipc方式访问 hdfs 出现找不到类。
SpringBoot微服务已成为业界主流,从开发到部署都非常省时省力,但是最近小明开发时遇到一个问题:在代码中读取资源文件(比如word文档、导出模版等),本地开发时可以正常读取 ,但是,当我们打成jar包发布到服务器后,再次执行程序时就会抛出找不到文件的异常。
(2)但是,Maven项目打成jar包后,放到服务器上运行时,却报错,找不到配置文件。
Linux系统下如何kill掉一个后台Java进程,相信童鞋们都知道如何操作。首先使用ps命令查找该Java进程的进程ID,然后使用kill命令进行杀掉。命令如下:
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,它可以用来存储和传输结构化的数据。在 Java 中,有多种方法可以将 JSON 文件读取为字符串,本文将介绍其中的几种。
实际项目中可能会有需要读取类路径下面的配置文件中的内容的需求,由于springboot项目打包的是jar包,通过文件读取获取流的方式开发的时候没有问题,但是上到linux服务器上就有问题了,对于这个问题记录一下处理的方式
SpringBoot读取外部配置文件,springboot读取配置文件顺序,如下(1,2,3代表优先级)
本篇文章是我对Swagger进行了二次开发,并封装成了一个框架,发布到了maven私服,这样就可以达到拿来即用啦。但是出现了一个问题,导致打包成jar包之后某些功能无法生效,本文特针对这个问题,来阐述如何借鉴了Mybatis源码才解决的。
参考: https://zhuanlan.zhihu.com/p/92906774 Java执行过程如下图:
去年7月开始参加工作,刚开始被先后分配了两个制作基础页面的任务,是常规的增删改查,包括前端页面的vue文件以及后端实体类和各逻辑层的接口、实现类,总共需要创建9个文件,1个vue、7个java,1个xml。
它是一个服务于spring框架的框架,能够简化配置文件,快速构建web应用, 内置tomcat,无需打包部署,直接运行。
SPI 机制应用在了大家项目中的很多地方,在很多框架中也有普遍应用,只不过很多人并没有感知。
开发实践中,对于开发一个 jar 包,很多人都只是完成功能,只要功能使用没问题,就算是完事了,但其实远远不够。当用户使用 jar 包的时候,可能会遇到以下这些问题:
开发一个项目,参数是必不可少的,规模越大参数越多。在不同的测试环境中部署,或者是依赖项目的信息发生了变化,你有没有想跳楼的感觉?如果有,恭喜你,你至少已经不是在开发玩具系统了。
在线上环境我们还是希望将端口号改为 80,这样在访问的时候就可以不写端口号了,如下
在自动化测试,有些我们的测试数据是放到excel文件中,尤其是在做数据驱动测试的时候,所以需要懂得如何操作获取excel内的内容。由于java不像python那样有直接操作Excle文件的类库,所以我们必须借助第三方工具:POI(基于Apache的POI类库)。
在前文中已经介绍了JVM的premain和attach功能, 本文介绍下JBOSS开源的代码注入工具: byteman. 与之前讲的premain和attach不同, byteman是通过规则文件完成代码注入等功能.
最近开发同学反馈,某定时任务服务疑似有内存泄漏,整个进程的内存占用比 Xmx 内存大不少,而且看起来是缓慢上升的,做了下面这次分析,包括下面的内容:
最近没什么实质性的工作,正好有点时间,就想学学别人的代码。也看过一点源码,算是有了点阅读的经验,于是下定决心看下spring这种大型的项目的源码,学学它的设计思想。 这篇博文你可以了解到: 1 Spring jar包以及源码使用 2 简单的spring运行示例 3 利用断点调试程序,如何快速的阅读程序【快捷键等的使用】 这次阅读的源码比较老了,是3.0.5版本的,由于正好手头有这个版本的源码,而且平时基本上也是用的这个版本Spring,因此后文的分析也都是针对这个版本。 如何
Serialization(序列化):将java对象以一连串的字节保存在磁盘文件中的过程,也可以说是保存java对象状态的过程。
@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。
是 Java 类加载层次中最顶层的类加载器,负责加载 JDK 中的核心类库,如:rt.jar、resources.jar、charsets.jar 等
jar:file:/D:/test/test/.metadata/.plugins/org.eclipse.wst.server.core/test/test/test/WEB-INF/lib/test-0.0.1-SNAPSHOT.jar!/ca.crt
ProGuard是一个Java Class文件的Shrinker,optimizer,obfuscator以及Preverifier。
TransmittableThreadLocal 是Alibaba开源的、用于解决 “在使用线程池等会缓存线程的组件情况下传递ThreadLocal” 问题的 InheritableThreadLocal 扩展。若希望 TransmittableThreadLocal 在线程池与主线程间传递,需配合 TtlRunnable 和 TtlCallable 使用。
文件的上传和下载,是非常常见的功能。很多的系统中,或者软件中都经常使用文件的上传和下载。 比如:微信头像,就使用了上传。 邮箱中也有附件的上传和下载功能。
第二、三层类加载器为Java语言实现,用户也可以自定义类加载器 查看本地类加载器的方式如下:
如何从java源码中读取注释信息?(注意不是指通过反射读取annotation类,是comment,就是程序员在源码中加的注释) 比如: /** * 使用当前类的class lo
本人最近在Mac OS上使用UiAutomator快速调试类的时候发现跟Windows环境下使用有很大的区别,对于我这个Mac OS小白来说有很多坑要填,今天终于修改完毕,分享代码,供大家参考。主要区别就是在执行命令的时候需要把命令前面加上执行全路径。还有一个就是斜杠的问题,统一改过来就可以了。
分布式链路追踪中为了获取服务之间调用链信息,采集器通常需要在方法的前后做埋点。在 Java 生态中,常见的埋点方式有两种:
领取专属 10元无门槛券
手把手带您无忧上云