前言 在SpringBoot应用中,经常需要读取打包在jar包中的资源文件,比如配置文件、模板文件等。...这些资源文件通常放在src/main/resources目录下,在打包成jar包后,它们会被存储在jar包的根目录下。本文将介绍4种在SpringBoot中读取这些资源文件的方法。...部署后,项目是通过打成 jar 包运行的,里面的文件是没有实际路径的(只有相对于项目名的相对路径)。...代码一:getResourceAsStream()方法 这是一个公共方法,用来读取文件中的内容的方法,通过T.class.getClassLoader().getResourceAsStream() 方法...,包括从jar包中的资源文件中读取。
jar或war包中 META-INF\MAINIFEST.MF 中定义的Main-Class指定的类为启动类。...spring boot 的应用 使用 man spring-boot:build-image 打包容器镜像的时候的层级定义文件,因为容器中文件系统是多层级的,docker 从 registry 中 pull...=true 不分层的时候就是一个fat jar 放到容器中,如果是分层后,就会将fat jar 中的文件根据此 layers.idx 中 定义,提取各层的文件,然后从底层到高层分四次加入到 Image...来从jar中获取输入流。...从指定位置读取文件 类加载器: org.springframework.boot.loader.LaunchedURLClassLoader 加载第一层jar中类和嵌套jar的类加载的ClassLoader
Boot application.properties(本案例使用的方式) 通过Spring Boot的application.properties文件配置,如:app.id=YOUR-APP-ID..."); 2、通过Spring Boot的配置文件(本案例使用的方式) 可以在Spring Boot的application.properties或bootstrap.properties中指定apollo.meta...客户端会把从服务端获取到的配置在本地文件系统缓存一份,用于在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置,不影响应用正常运行。...("apollo.cacheDir", "/opt/data/some-cache-dir"); 通过Spring Boot的配置文件 可以在Spring Boot的application.properties...在Java程序启动脚本中,可以指定-Denv=YOUR-ENVIRONMENT 如果是运行jar文件,需要注意格式是java -Denv=YOUR-ENVIRONMENT -jar xxx.jar
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的加载方式。...boot通过注册了一个自定义的Handler类来处理多重jar in jar的逻辑。...的一些缺点: 当spring boot应用以一个fat jar方式运行时,会遇到一些问题。
application.properties Apollo 1.0.0+支持通过Spring Boot的application.properties文件配置,如 app.id=YOUR-APP-ID..., "http://config-service-url"); 通过Spring Boot的配置文件 可以在Spring Boot的application.properties或bootstrap.properties...比如自己写一个xx-company-apollo-client,该jar包依赖apollo-client,在该jar包中通过spi方式定义自定义的MetaServerProvider实现,然后应用直接依赖..."); 通过Spring Boot的配置文件 可以在Spring Boot的application.properties或bootstrap.properties中指定apollo.cacheDir=...在本地开发模式下,Apollo只会从本地文件读取配置信息,不会从Apollo服务器读取配置。 可以通过下面的步骤开启Apollo本地开发模式。
Spring-boot运行jsp原理分析 结论: 启动server的时候会创建临时目录 在浏览器中访问jsp文件的时候通过内置Tomcat将jsp转换为java,保存在临时目录中 然后编译为...分析过程如下: 编码阶段: 1、官方不推荐在spring-boot中使用jsp文件。...jsp # 自定义属性,可以在Controller中读取 application.XXX =YYY 编写Controller 编写JSP页面 编写启动类App.java 结构图如下...includes > false 启动并调试Fat-jar...jsp访问路径在之前的配置文件中: spring.view.prefix: /WEB-INF/jsp/ 在浏览器中输入jsp地址,会调用内置Tomcat provides: tomcat-embed-core
目的:将配置文件分离,其他位置存放好配置文件后,在启动jar时指定配置文件,实现灵活切换 1.默认的配置文件 1.1 application.properties SpringBoot程序默认从application.properties...中指定使用哪一个文件 spring.profiles.active = dev 启动时,会自动根据填写的参数值,读取对应的配置文件进行加载. 2.如果图里application.properties文件和日志文件也想外置.../config/log4j2.xml 2.自定义的配置文件 2.1 启动时指定 多个配置文件用英文逗号分隔 # 需要在classpath目录中 java -jar xxx.jar --spring.config.location...=classpath:/自定义配置文件1.properties,classpath:/自定义配置文件2.properties # 绝对路径指定 java -jar xxx.jar --Dspring.config.location...=绝对路径\自定义配置文件3.properties 2.2 代码中指定 2.2.1 在application.properties文件中指定一个文件路径 eg:路径配置如下,当前项目config下的path.properties
此外,我们可以继续保留默认的 application.properties 文件,通过 java -jar app.jar --name="Spring" 命令的方式来指定 name 参数,由于优先级的问题...如果你不想使用application.properties的格式命名配置文件,那么可以通过环境变量spring.config.name来设置文件名称,例如: $ java -jar myproject.jar...logging.file logging.path 说明 none none 仅仅输出到Console my.log/log/my.log none 从当前位置或绝对路径输出某个日志文件。...日志级别控制 所有的支持日志系统的库都支持从环境变量中读取相关日志级别,所以我们可以将日志级别的描述也记录在环境变量中(例如application.properties文件)。...2个规则即可,但是如果有更特殊的邀请,可以从Spring Boot的日志配置开始了解。
" } 打包成fat jar fat jar是Spring Boot引入的一种新格式,其打包后的结构与war包比较类似,但是可以直接执行并不需要先解压再加载,打包后类似目录如下: BOOT-INF/classes...对于jar in jar因为并不是规范的文件路径,因此无法使用File直接读取,那么该怎么读呢?要解决这个问题需要先了解Spring Boot是怎么做的....利用Handler读取jar Spring Boot启动原理的关键点是实现了jar in jar协议的处理器org.springframework.boot.loader.jar.Handler,读取的主要功能为...Handler中实现的openConnection方法,因此当在项目代码中想要读取jar in jar格式的架包,则可以用该Handler进行资源读取。...文章标题: Spring Boot -- 如何获取已加载的JAR文件流 文章链接: https://mrdear.cn/2019/03/19/framework/spring/在jar中获取jar文件流
在 spring boot 中,有两种配置文件,一种是application.properties,另一种是application.yml,两种都可以配置spring boot 项目中的一些变量的定义,...Spring Boot提供了一种优先级配置读取的机制来帮助我们从这种困境中走出来。 常规情况下,我们都知道Spring Boot的配置会从application.properties中读取。...实际上,从resource目录下的application.properties文件读取是Spring Boot配置链中的一环而已。...包的时候:Java -jar xxxxxx.jar spring.profiles.actiove=prod 也可以这样启动设置配置文件,但是这只是用于开发和测试 下面提供一个在同一文件中定义多个配置节的详细参考用例...=config-server2 在代码中读取这些配置也是非常方便的,在代码的逻辑中,其实是无需去关心这个配置是从什么地方来的,只用关注能获取什么配置就够了。
spring-boot-maven-plugin SpringBoot 的可执行jar包又称fat jar ,是包含所有第三方依赖的 jar 包,jar 包中嵌入了除 java 虚拟机以外的所有依赖,是一个...普通插件maven-jar-plugin生成的包和spring-boot-maven-plugin生成的包之间的直接区别,是fat jar中主要增加了两部分,第一部分是lib目录,存放的是Maven依赖的...jar包文件,第二部分是spring boot loader相关的类。...其二,如果在这个机制下,由于fat jar中依赖的各个第三方jar文件,并不在程序自己classpath下,也就是说,如果我们采用双亲委派机制的话,根本获取不到我们所依赖的jar包,因此我们需要修改双亲委派机制的查找...我们需要搞懂的是关键代码,以及涉及到的知识点。 我从Maven的自定义插件开始进行追踪,巩固了对Maven的知识点,在这个过程中甚至了解到JDK对jar的读取是有提供对应的工具类。
app.jar--debug=true , 这种命令会被 SpringBoot 解析,且优先级最高 资源文件配置: application.properties 配置 debug=true 即可。...logging.file: 将日志写入到指定的 文件 中,默认为相对路径,可以设置成绝对路径 logging.path: 将名为 spring.log 写入到指定的 文件夹 中,如( /var/log)...如果想在 logback-spring.xml中回读 application.properties 配置的值时,这是一个非常好的解决方案 读取 spring.application.name 属性来生成日志文件名 scope:作用域 name:在 logback-spring.xml 使用的键 source:...application.properties 文件中的键 defaultValue:默认值 --> <springProperty scope="context" name="logName"
Spring Boot可执行JAR简介 在当今Java生态系统中,Spring Boot的可执行JAR(也称为fat jar)已经成为微服务部署的标准方式。...特殊目录结构:采用BOOT-INF目录组织应用代码和依赖库 自定义类加载机制:使用Spring Boot特有的类加载器处理嵌套JAR 为什么需要fat jar?...MANIFEST.MF中的Main-Class和Start-Class 当我们打开一个Spring Boot生成的可执行JAR(fat jar)时,META-INF/MANIFEST.MF文件中的两个关键属性总是格外引人注目...但这种方式存在明显缺陷: 无法识别嵌套在JAR中的JAR文件 不能处理BOOT-INF/classes和BOOT-INF/lib的特殊目录结构 缺乏对Spring Boot分层部署模型的支持 想象一个场景...可执行JAR的启动流程解析 当执行java -jar your-app.jar命令时,系统首先读取META-INF/MANIFEST.MF文件中的Main-Class属性。
app.jar --debug=true , 这种命令会被 SpringBoot 解析,且优先级最高 资源文件配置: application.properties 配置 debug=true 即可。...logging.file: 将日志写入到指定的 文件 中,默认为相对路径,可以设置成绝对路径 logging.path: 将名为 spring.log 写入到指定的 文件夹 中,如(/var/log)...如果想在logback-spring.xml中回读 application.properties 配置的值时,这是一个非常好的解决方案 读取 spring.application.name 属性来生成日志文件名 scope:作用域 name:在 logback-spring.xml 使用的键 source:...application.properties 文件中的键 defaultValue:默认值 --> <springProperty scope="context" name="logName"
简介(what) 从Spring 3.x开始,Spring社区的发展方向就是弱化xml配置文件而加大注解的戏份,Spring Boot使用@Configuration、@ComponentScan等注解...优点(Why) 集中式配置(application.properties)+注解,简化开发; 内嵌的Tomcat和Jetty容器,可直接打成jar包启动,无需提供Java war包以及繁琐的Web配置...,健康诊断,权限控制; 无冗余代码生成和XML强制配置; 提供支持强大的Restfult风格的编码,非常简洁; fat jar(jar in jar):生成包含所有依赖jar包的独立可运行的JAR...@EnableAutoConfiguration注解会使spring boot自动配置应用(约定胜于配置),这个自动配置是基于依赖的jar,例如当你在添加spring-boot-starter-web依赖后...文件中的配置指令填充它的属性。
在快速入门一节中,我们轻松的实现了一个简单的RESTful API应用,体验了一下Spring Boot给我们带来的诸多优点,我们用非常少的代码量就成功的实现了一个Web应用,这是传统的Spring应用无法办到的...自定义参数 我们除了可以在Spring Boot的配置文件中设置各个Starter模块中预定义的配置属性,也可以在配置文件中定义一些我们需要的自定义属性。...包之内,针对不同{profile}环境的配置文件内容,例如:application-{profile}.properties或是YAML定义的配置文件 位于当前应用jar包之外的application.properties...和YAML配置内容 位于当前应用jar包之内的application.properties和YAML配置内容 在@Configuration注解修改的类中,通过@PropertySource注解定义的属性...可以看到,其中第7项和第9项都是从应用jar包之外读取配置文件,所以,实现外部化配置的原理就是从此切入,为其指定外部配置文件的加载位置来取代jar包之内的配置内容。
注:在pom中,Spring Boot的项目默认打成jar包,因为默认的Web模块依赖会包含嵌入式的Tomcat,这样应用jar自身就提供了Web服务的能力。...配置详解 配置文件:Spring Boot配置文件的默认地址:src/main/resources/application.properties。 ...可以在配置文件中定义:容器端口号、数据库连接信息、日志级别。 ...10)位于当前应用jar包之内的application.properties。 11)在@configuration注解修改的类中,通过@PropertySource注解定义的属性。 ...其中第7、9都是从jar之外读取配置文件,因此指定外部配置文件的加载位置来取代jar包之内的配置内容。
最最通用的办法就是将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包...– SNAPSHOT的依赖jar包 spring-boot-loader – Spring boot的class loader文件 application – 应用程序的class和resources...文件 注意,这里的index文件是有顺序的,它和我们将要添加到docker image中的layer顺序是一致的。
全局配置 属性配置实验 使用前面的MyApplicationRunListener来读取Spring Boot 启动完成后的自定义配置,如下: public void started(ConfigurableApplicationContext...Jar包内部的application.properties 和 YAML 变量 在resources内部的application.yml中定义 me: 4444 运行后覆盖之前的配置值 Jar包内部的...中定义 spring: profiles: active: - test 运行后覆盖之前的配置值 Jar包外部的application.properties 和 YAML...目录下的spring-boot-devtools.properties、spring-boot-devtools.yaml、spring-boot-devtools.yml文件,如果不存在,会从 HOME...自定义JVM监控通知 Spring Boot Admin2 自定义异常监控 Spring Boot Admin 监控指标接入Grafana可视化
这里先要考虑到配置的优先级。 Spring Boot 不单单从 application.properties 获取配置,所以我们可以在程序中多种设置配置属性。...原因是,Spring Boot 是以 iso-8859 的编码方式读取 application.properties 配置文件。...Spring Boot 默认会去读取在 PropertySource 定义了的这个值。...spring.profiles.active=dev 那运行 springboot-properties 工程中 Application 应用启动类,从控制台中可以看出,dev 的属性输出: HomeProperties...=prod springboot-properties-0.0.1-SNAPSHOT.jar 五、小结 ---- 常用的样板配置在 Spring Boot 官方文档给出,我们常在 application.properties