FatJar

springboot知识

耗尽温柔 提交于 2020-08-09 21:36:16
spring boot quick start 在spring boot里,很吸引人的一个特性是可以直接把应用打包成为一个jar/war,然后这个jar/war是可以直接启动的,不需要另外配置一个Web Server。 如果之前没有使用过spring boot可以通过下面的demo来感受下。 下面以这个工程为例,演示如何启动Spring boot项目: git clone git@github.com:hengyunabc/spring-boot-demo.git mvn spring-boot-demo java -jar target/demo-0.0.1-SNAPSHOT.jar123 如果使用的IDE是spring sts或者idea,可以通过向导来创建spring boot项目。 也可以参考官方教程: http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#getting-started-first-application 对spring boot的两个疑问 刚开始接触spring boot时,通常会有这些疑问 spring boot如何启动的? spring boot embed tomcat是如何工作的? 静态文件,jsp,网页模板这些是如何加载到的?

Spring Boot 2.3.0正式发布:优雅停机、配置文件位置通配符新特性一览

◇◆丶佛笑我妖孽 提交于 2020-08-08 21:23:46
当大潮退去,才知道谁在裸泳。。关注公众号【 BAT的乌托邦 】开启专栏式学习,拒绝浅尝辄止。本文 https://www.yourbatman.cn 已收录,里面一并有Spring技术栈、MyBatis、中间件等小而美的专栏供以学习哦。 目录 前言 关于版本号 正文 简单回忆2.2版本的新特性 主要新特性 优雅停机 配置属性的调整 删除不推荐使用的类/方法/属性 配置文件位置支持通配符 web下的日期转换支持配置 其它新特性 更改某些依赖最低版本要求 核心依赖升级 三方库依赖升级 Spring Data Neumann升级带来的变化 关于Validation 移除一些maven插件 支持Java14 Docker支持 Fat Jar支持优化 嵌入式Servlet Web Server线程配置 WebFlux基础路径配置 活性探测器 Actuator增强 好基友Spring Cloud什么时候跟上? 升级建议:等等 总结 前言 各位小伙伴大家好,我是A哥。北京时间2020-05-15,Spring Boot 2.3.0版本正式发布了,次版本号的升级,一般会有些新特性出来。作为Java Coder的我们有必要一览它的新new Feature,keep下技术节奏嘛。 A哥“第二时间”知道了这个消息,然后在自己本机(请注意:非生产环境)体验了一把,然后再结合Spring Boot官方的

JFinal-Undertow 配置文件工作原理

删除回忆录丶 提交于 2020-08-06 11:33:34
1. 默认配置文件 首先要从 UndertowServer 说起,UndertowServer 有多个创建方法,不管使用哪个创建方法最终创建时创建时都需要先创建 UndertowConfig,并将这个作为参数用于创建 UndertowServer。源码摘取如下: /** * 创建 UndertowServer * * 尝试使用 "undertow.txt" 以及 "undertow-pro.txt" 初始化 undertow * 当配置文件不存在时不抛出异常而是使用默认值进行初始化 */ public static UndertowServer create(Class<? extends JFinalConfig> jfinalConfigClass) { return new UndertowServer(new UndertowConfig(jfinalConfigClass)); } 同样的 UndertowConfig 也有多个创建方法,不管使用哪个创建方法最终创建时都是需要进行配置文件的加载和配置项的初始化,当指定配置文件名根据指定的配置文件进行加载,未指定配置文件名时将加载默认的配置文件 undertow.txt,并进行参数赋值。源码摘取如下: public UndertowConfig(String jfinalConfigClass) { this

熟练使用这15点,让你的SpringBoot启动更上一层楼!

本小妞迷上赌 提交于 2020-08-05 10:25:38
使用的是 OpenJDK 11 。 java --version openjdk 11.0.1 2018-10-16 OpenJDK Runtime Environment 18.9 (build 11.0.1+13) OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode) 可以按照下面这样运行基准测试。运行起来可能需要一些时间,下面会执行所有的测试。 ./mvnw clean package (cd benchmarks/; java -jar target/benchmarks.jar) 1. FluxBaseline 我使用 SpringInitializr 创建项目,仅包含 Reactive Web。接下来,我会写一个 WebMVC 风格的极简controller。 @SpringBootApplication @RestController public class DemoApplication { @GetMapping("/") public String home() { return "Hello"; } public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }

Spring Boot jar包启动分析

a 夏天 提交于 2020-08-04 19:12:16
Spring Boot jar包启动分析 首先,为了了解Spring Boot Jar包的启动情况,我们需要构建一个Spring的FAT jar 看看其中都有哪些东西。 解压Spring Boot Maven Plugin 打包的jar Spring Boot项目打包后,通过mvn package方式,可以看到在代码的target目录下,生成了一个jar文件和一个jar.original文件。这两个文件有什么区别呢? jar文件:这个是通过SpringBootMavenPlugin插件重新包装出来的,他里面包含了我们项目中所依赖的所有jar包文件 jar.original文件:这个是通过maven打包后最原始的文件,里面没有项目中所以来的jar包,因此这个文件通常比较小 我们通过比较解压后的文件结构来了解下两种jar的区别。 jar 文件 ├─BOOT-INF │ │ classpath.idx │ │ │ ├─classes │ │ │ application.yml │ │ │ │ │ └─com │ │ └─chillax │ │ │ Application.class │ │ │ │ │ └─controller │ │ HelloController.class │ │ │ └─lib │ hutool-all-5.3.8.jar │ .............jar │

Create fat jar from kotlin multiplatform project

放肆的年华 提交于 2020-06-15 19:46:49
问题 I recently switched from old 1.2 multiplatform into 1.3. Difference is, there's one one build.gradle file per multiplatform module (I got 5 of them) so a lot less configuration. However I can't seem to be able to configure creating runnable fat jar with all dependencies from jvm platform. I used to use standard "application" plugin in my jvm project and jar task, but that does not work anymore. I found there's "jvmJar" task and I modified it (set Main-class), but created jar doesn't contain

Linux启动与停止Java进程shell脚本

爷,独闯天下 提交于 2020-04-05 20:16:11
当我们把开发好的spring-boot项目打成fat-jar之后,就可以布署到linux服务器上了。 将jar包拷贝到linux服务器上,然后执行 java -jar xxx.jar ,就可以将服务启动起来了。 也可以写一个启动脚本 startup.sh nohup java -jar xxx.jar 2 >&1 & 但是,如果我们想把服务停掉的话,就须要知道服务的进程id(process id)。 如何才能知道服务的进程id呢? 可以使用 ps -ef|grep xxx 这样的命令来查询。 然后使用 kill -9 [pid] 这样的命令来杀掉进程,但是这样还是有点麻烦。我们也可以写一个停止的脚本 shutdown.sh 。 大致内容如下,使用时需要将 xxx 替换为自已的应用名字,也支持 tomcat 等应用。 #!/bin/bash #author mingshashan ​ pid = `ps -ef|grep "xxx" |grep -v grep | awk '{printf $2 }'` if [ -z " $pid " ]; then echo "xxx not started" else echo "the xxx pid = $pid , will be stopped" kill -9 $pid fi 这样是不是很方便呢。 来源: oschina 链接:

[每日短篇] 26

孤街浪徒 提交于 2020-03-04 03:29:57
背景 Spring Boot 2.3(截至目前版本为 M2)为容器化部署提供了一个新特性 Layered Jar。一般来说 Spring Boot 程序都是以 fat jar 的方式构建的,文件大小动辄 50M、100M 这样子,对 docker image 其实很不友好。Docker image 本身是分层结构,如果某一层没有变化在 pull 时就不必上传,一旦有变化就要上传整层。一个程序中,程序自身代码、资源的变更频率要远大于依赖库的变更频率,大多数时候因为几行代码变化导致上传整个 jar 文件,无论是存储占用还是时间效率上都是很大的浪费,后者在国内网速下尤其让人揪心。 Layered Jar 新特性 layered jar 为不同变更频率内容分层提供了支持工具。本质上这个特性是 org.springframework.boot:spring-boot-maven-plugin 提供的一种新的 layout ,当使用新 layout 打包时,一个 spring-boot-layertools jar 会打包到 fat jar 中,新特性是由这个 jar 提供的。 要使用这个新特性需要做的事情非常少,首先是在 pom 中增加 layout 配置,我猜未来这个选项会成为默认值,从而不需任何显式配置。 <build> <plugins> <plugin> <groupId>org

Spring Boot Executable jar/war 原理

两盒软妹~` 提交于 2020-03-01 13:16:00
spring boot executable jar/war spring boot里其实不仅可以直接以 java -jar demo.jar 的方式启动,还可以把jar/war变为一个可以执行的脚本来启动,比如 ./demo.jar 。 把这个executable jar/war 链接到 /etc/init.d 下面,还可以变为linux下的一个service。 只要在 spring boot maven plugin 里配置: <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <executable>true</executable> </configuration> </plugin> 这样子打包出来的jar/war就是可执行的。更多详细的内容可以参考官方的文档。 http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#deployment-install zip格式里的magic number 生成的jar/war实际上是一个zip格式的文件,这个zip格式文件为什么可以在shell下面直接执行?

windows环境下运行java的脚本

扶醉桌前 提交于 2020-02-26 05:25:46
windows环境下运行java的脚本 前几天研发时遇到eclipse运行不稳定的情况,明明实现了的功能有的时候能运行到,有时运行不到,非常让人头疼。于是想在本地搭一套运行环境,方便比较。 说明:以下情况主要针对java运行 首先考虑Application。maven编译Spring Boot默认打的包是fatjar,所以比较好处理。此处重点考虑传统Application。也可以考虑打成fatjar。用Eclipse->Export 安装fatjar插件\引入maven-shade-plugin插件或assembly插件,均不如意。要么方法费劲还容易错,要么影响到正常使用方式。考虑再三,决定用shell脚本组装常规使用方式实现。脚本如下。 cur_path="${运行目录}" echo "当前目录:"$cur_path projectPath="${工程目录}" subProject="{目标工程名}" echo "项目目录:"$projectPath cd $projectPath mvn clean echo "拷贝jar包" mvn dependency:copy-dependencies -DoutputDirectory=$cur_path"/lib" -pl $subProject echo "编译工程" mvn compile -pl $subProject