介绍 在很久很很久以前,我们部署web程序的方式是怎么样的呢?配置好服务器,将自己写的应用程序打包成war包,扔进服务器中指定的目录里面。当然免不了要配置一些负责的xml和自定义一些servlet。...现在有了spring boot,一切都变了,我们可以将web应用程序打包成fat jar包,直接运行就行了。 本文将会关注于怎么使用Spring Boot创建一个fat jar包。...如果你要在服务器上面永久运行该服务,即使登录的用户退出服务器,则可以使用nohup命令: nohup java -jar fat jar和 fat war 在上面的例子中...,所有的依赖jar包都会被打包进入这一个fat jar中,如果你使用了tomcat,那么tomcat也会被打包进去。... 如果你没有从spring-boot-starter-parent继承,那么你需要将main class添加到maven plugin中:
Fat Jar 【pom.xml】 <?xml version="1.0" encoding="UTF-8"?...Boot的任何Launcher NONE,将所有的依赖库打包,但是不打包Spring Boot的任何Launcher 打包后观察下 jar包 的大小 和 里面的内容 重点关注下Main-Class.../lib -jar artisan-test-thin-boot-jar.jar 验证 通过启动参数loader.path配置外置依赖包的加载路径。...它们的目的是从目录中的嵌套jar文件或war文件(而不是在类路径中显式的文件)加载资源(.class文件等)。 对于JarLauncher和WarLauncher,嵌套路径是固定的。...可以通过在loader.properties(这是目录,归档文件或归档文件中的目录的逗号分隔列表)中设置一个称为LOADER_PATH或loader.path的环境变量来添加其他位置 概括一下: 启动器
前言 在SpringBoot应用中,经常需要读取打包在jar包中的资源文件,比如配置文件、模板文件等。...这些资源文件通常放在src/main/resources目录下,在打包成jar包后,它们会被存储在jar包的根目录下。本文将介绍4种在SpringBoot中读取这些资源文件的方法。...部署后,项目是通过打成 jar 包运行的,里面的文件是没有实际路径的(只有相对于项目名的相对路径)。...classpath 路径(即:src 或 resources 路径下)下查找文件的,但它的路径前需要加 “/” ,这个是跟读取的文件与当前.class 文件的位置有关。...,包括从jar包中的资源文件中读取。
在spring boot项目中,spring boot 提供 为 maven 和 gradle 分别提供了插件增加 repackage 的goal,用于打出 executable 的 fat jar,这个...war 结构的 fat jar 下面的WEB-INF下多出来一个 lib-provided 目录用来防 embed tomcat 的 jar Spring-Boot-Classpath-Index 的作用...=true 不分层的时候就是一个fat jar 放到容器中,如果是分层后,就会将fat jar 中的文件根据此 layers.idx 中 定义,提取各层的文件,然后从底层到高层分四次加入到 Image...从指定位置读取文件 类加载器: org.springframework.boot.loader.LaunchedURLClassLoader 加载第一层jar中类和嵌套jar的类加载的ClassLoader...2、筛选出Archive中的 Archive(BOOT-INF/classes目录和 BOOT-INF/lib下的每个jar ,如果是war包,则是WEB-INF/classes目录和WEB-INF/
解决方案: org.springframework.boot...spring-boot-maven-plugin <!
demo-0.0.1-SNAPSHOT.jar是spring boot maven插件生成的jar包,里面包含了应用的依赖,以及spring boot相关的类。下面称之为fat jar。...spring boot应用启动流程总结 看到这里,可以总结下Spring Boot应用的启动流程: spring boot应用打包之后,生成一个fat jar,里面包含了应用依赖的jar包,还有Spring.../spring-boot-loader JarFile URL的扩展 Spring boot能做到以一个fat jar来启动,最重要的一点是它实现了jar in jar的加载方式。.../7u40-b43/sun/misc/URLClassPath.java#506 在IDE/开放目录启动Spring boot应用 在上面只提到在一个fat jar里启动Spring boot应用的过程...还有一种情况是在一个开放目录下启动Spring boot启动。所谓的开放目录就是把fat jar解压,然后直接启动应用。
spring-boot-maven-plugin SpringBoot 的可执行jar包又称fat jar ,是包含所有第三方依赖的 jar 包,jar 包中嵌入了除 java 虚拟机以外的所有依赖,是一个...普通插件maven-jar-plugin生成的包和spring-boot-maven-plugin生成的包之间的直接区别,是fat jar中主要增加了两部分,第一部分是lib目录,存放的是Maven依赖的...fat jar //目录结构 ├─BOOT-INF │ ├─classes │ └─lib ├─META-INF │ ├─maven │ ├─app.properties │ ├─MANIFEST.MF...├─data ├─jar └─util 也就是说想要知道fat jar是如何生成的,就必须知道spring-boot-maven-plugin...我们需要搞懂的是关键代码,以及涉及到的知识点。 我从Maven的自定义插件开始进行追踪,巩固了对Maven的知识点,在这个过程中甚至了解到JDK对jar的读取是有提供对应的工具类。
读取application文件 在application.yml或者properties文件中添加: info.address=USA info.company=Spring info.degree=high...资源目录下建立config/db-config.properties: db.username=root db.password=123456 @PropertySource+@Value注解读取方式...setPassword(String password) { this.password = password; } } 注意:@PropertySource不支持yml文件读取...以上所有加载出来的配置都可以通过Environment注入获取到。...@Autowired private Environment env; // 获取参数 String getProperty(String key); 总结 从以上示例来看,Spring Boot可以通过
" } 打包成fat jar fat jar是Spring Boot引入的一种新格式,其打包后的结构与war包比较类似,但是可以直接执行并不需要先解压再加载,打包后类似目录如下: BOOT-INF/classes...对于非jar in jar形式,其获取到的目录是一个真是的物理文件路径,因此可以直接使用File读取,从而拿到文件流,这里不重点关注。...对于jar in jar因为并不是规范的文件路径,因此无法使用File直接读取,那么该怎么读呢?要解决这个问题需要先了解Spring Boot是怎么做的....[protocol].Handler,因此Spring Boot注册的为org.springframework.boot.loader.jar.Handler这个jar协议扩展处理器,其在读取资源时会调用...利用Handler读取jar Spring Boot启动原理的关键点是实现了jar in jar协议的处理器org.springframework.boot.loader.jar.Handler,读取的主要功能为
简介 Spring Boot 执行器 快速构建一个Spring Boot Web应用程序 如何更改Spring Boot中的默认端口 修改Spring Boot上下文路径 Spring Boot中的@...Spring Boot - 高级特性 Spring Boot:配置主类 从Spring迁移到Spring Boot 使用Spring Boot加载初始数据的快速指南 如何定义Spring Boot...使用Spring Boot创建Fat Jar应用程序 Spring Boot 中的自定义信息 SpringBootServletInitializer快速入门 Spring Boot Exit Code...关闭Spring Boot应用程序 Spring Boot中的命令行参数 使用自定义父级进行Spring Boot依赖关系管理 使用Swagger生成Spring Boot REST客户端 在Spring...入门 GraphQL和Spring Boot入门 Apache Camel with Spring Boot Spring Boot应用程序中的DynamoDB 使用Jasypt进行Spring Boot
使用maven和fat jar/war运行应用程序的对比 简介 上篇文章我们介绍了Spring boot的fat jar/war包,jar/war包都可以使用 java -jar 命令来运行,而maven...Spring Boot Maven Plugin 上篇文章我们提到了Spring Boot Maven Plugin,通过使用该插件,可以有效的提高部署效率,并打包成为fat jar/war包。...在打包成fat jar/war包的时候,背后实际上做了如下的事情: 管理了classpath的配置,这样我们在运行java -jar的时候不用手动指定-cp 。...使用Maven命令来运行应用程序 要使用maven命令来运行应用程序可以在程序的根目录下面执行: mvn spring-boot:run 它会自动下载所需要的依赖,并运行,运行日志如下: mvn spring-boot...如果想打包成fat jar/war, 需要使用Maven Spring Boot plugin,如下所示,否则打包出来的jar包并不包含外部依赖:
前言 在Spring Boot项目中我们经常需要读取application.yml配置文件的自定义配置,今天就来罗列一下从yaml读取配置文件的一些常用手段和方法。 2....@Value是通过使用Spring的SpEL表达式来获取对应的值的: // 获取 yaml 中 felord.phone的值 并提供默认值 UNKNOWN @Value("${felord.phone:...,因为这种形式支持从驼峰camel-case到短横分隔命名kebab-case的自动转换。...3.1 显式注入 Spring IoC 你可以使用@Component、@Configuration等注解将FelordDefProperties注入Spring IoC使之生效。...3.3 @ConfigurationPropertiesScan 在Spring Boot 2.2.0.RELEASE中提供了一个扫描注解@ConfigurationPropertiesScan。
刚开始的时候我的配置文件在同名目录下都是在/mapper下,导致只能读取一个jar中的mapper文件。先解决如下: 1.将mapper文件放在不能放在同名的目录下。 ...比如:user.jar放在/user下,common.jar放在common下 2.在Spring中配置 (记住:classpath后跟*号) classpath*:common/*.xml 这样就可以读取到了
最最通用的办法就是将Spring boot的应用程序打包成一个fat jar,然后写一个docker file,将这个fat jar制作成为一个docker image然后运行。...Spring boot的fat jar分为三个部分,第一部分就是BOOT-INF, 里面的class目录放的是我们自己编写的class文件。而lib目录存放的是项目依赖的其他jar包。...第三部分是Spring Boot的类加载器,fat jar包的启动是通过Spring Boot的jarLauncher来创建LaunchedURLClassLoader,通过它来加载lib下面的jar包...但是如果使用的是fat jar包,即使我们只修改了我们自己的代码,也会导致整个fat jar重新更新,从而影响docker image的构建速度。...– SNAPSHOT的依赖jar包 spring-boot-loader – Spring boot的class loader文件 application – 应用程序的class和resources
project 经过排查,在pom文件中加入 org.springframework.boot... spring-boot-maven-plugin ... 加入javac继续打包 3.成功后 会在项目的target文件夹下生成jar...包 4.将打包好的jar包 发布到服务器,运行java -jar jar包 5.或者使用命令nohup java -jar jar包,nohup命令可以后台启动jar,如果 直接运行 java -jar...则关闭终端,spring的进程也会关闭
发生故障时,用top -m 看java进程占用的内存并不算高,而且spring boot的acurator端点监控,以及jvm的内存监控都在正常值范围内,刚开始怀疑是jvm参数设置不合理,调整了G1垃圾收集器各种参数组合...用dump导出来分析,线程数、大对象啥的都不高,遂怀疑是spring cloud的坑。...攀墙出去google了下,无意搜索" spring boot memory leak",发现有些人遇到了类似的问题,共同点都是embed tomcat + standalone jar运行方式,于是怀着试一试的心理...附,更换方法: compile('org.springframework.boot:spring-boot-starter-web') { exclude module: "spring-boot-starter-tomcat..." } compile('org.springframework.boot:spring-boot-starter-undertow') 注:其它jar包也有可能隐式依赖了tomcat
我们在接入用户系统时需要将接口地址,错误地址,调用地址写入到配置文件里,我们使用的是.yml文件,在application.yml中写入需要写入的地址.yml必须规定格式编写 #根据token获取用户信息的接口地址...token-url: "xxx" #错误返回的地址 error-url: "xxx" #正确返回的地址 success-url: "xxx" 在代码中直接通过@Value("参数名")方式取值 示例
前言 本文介绍Spring Boot中读取配置属性的几种方式,项目示例中用到的application.yml和application.properties定义如下: ?...application.properties @Value @Value是比较常见的注入方式,功能强大但一般可读性较差。...= "spring-boot.hello"; @Value("${" + SPRING_BOOT_HELLO + "}") private String hello; /*...= "spring-boot.str-array"; private static final String SPRING_BOOT_INT_ARRAY = "spring-boot.int-array...= "spring-boot.hello"; /** * 4.
文章目录 Pre 引导 新建工程 打包 启动 java -jar 干啥的 打包插件 spring-boot-maven-plugin简介 包结构 META-INF内容 Archive的概念 JarFile...---- 打包插件 事实上,Java没有提供任何标准的方式来加载嵌套的jar文件 (jar中包含jar ,即Spring Boot 中的fat jar) Spring Boot 默认的打包插件如下:...spring-boot-maven-plugin简介 spring-boot-maven-plugin项目存在于spring-boot-tools目录中。...---- 小结 JarLauncher通过加载BOOT-INF/classes目录及BOOT-INF/lib目录下jar文件,实现了fat jar的启动。...通过spring-boot-plugin 生成了MANIFEST.MF , main-class 指定运行java -jar的主程序把依赖的jar文件 打包在fat jar. ?
Spring Boot获取文件总的来说有三种方式,分别是@Value注解,@ConfigurationProperties注解和Environment接口。...value():指定配置文件 encoding():指定编码,因为properties文件的编码默认是ios8859-1,读取出来是乱码 factory():自定义解析文件类型,因为该注解默认只会加载properties...文件,如果想要指定yml等其他格式的文件需要自定义实现。...二、Environment读取文件 配置文件我们继续用上面的两个,定义一个类去读取配置文件 ?...经验与坑 properties文件默认使用的是iso8859-1,并且不可修改 yml文件的加载顺序高于properties,但是读取配置信息的时候会读取后加载的 @PropertySource注解默认只会加载
领取专属 10元无门槛券
手把手带您无忧上云