zoukankan      html  css  js  c++  java
  • SpringBoot的配置文件加载顺序以及如何获取jar包里的资源路径

    一、读取配置文件的四种方式

    这四种配置文件放置方式的读取优先级依次递减,具体可以查看官方文档

    1.1jar包同级目录下的config文件夹里的配置文件

    其实我以前就见过这种方式了,只是不知道怎么做的,这样便于修改服务器上的配置文件。
    可以使用maven-source-plugin插件,然后运行命令mvn clean package将配置文件提取到项目外指定文件夹下。

    1. <plugin> 
    2. <groupId>org.apache.maven.plugins</groupId> 
    3. <artifactId>maven-resources-plugin</artifactId> 
    4. <version>${maven-resources-plugin.version}</version> 
    5. <executions> 
    6. <execution> 
    7. <id>copy-resources</id> 
    8. <phase>package</phase> 
    9. <goals> 
    10. <goal>copy-resources</goal> 
    11. </goals> 
    12. <configuration> 
    13. <outputDirectory>${basedir}/target/config/</outputDirectory> 
    14. <resources> 
    15. <resource> 
    16. <directory>src/main/resources</directory> 
    17. <includes> 
    18. <include>**/*.properties</include> 
    19. </includes> 
    20. </resource> 
    21. </resources> 
    22. </configuration> 
    23. </execution> 
    24. </executions> 
    25. </plugin> 
    26. <plugin> 
    27. <groupId>org.apache.maven.plugins</groupId> 
    28. <artifactId>maven-jar-plugin</artifactId> 
    29. <version>${maven-jar-plugin.version}</version> 
    30. <configuration> 
    31. <archive> 
    32. <manifest> 
    33. <addClasspath>true</addClasspath> 
    34. <classpathPrefix>./lib/</classpathPrefix> 
    35. <mainClass>${main-class}</mainClass> 
    36. </manifest> 
    37. </archive> 
    38. <excludes> 
    39. <exclude>**/*.properties</exclude> 
    40. </excludes> 
    41. </configuration> 
    42. </plugin> 

    以上配置就可以实现将src/main/resources目录下的所有后缀名为properties的文件复制到config文件夹下,同时打包时排除properties文件。
    注意:需要将新建项目时自带的spring-boot-maven-plugin插件去掉,否则不能生效。
    去掉如下代码:

    1. <plugin> 
    2. <groupId>org.springframework.boot</groupId> 
    3. <artifactId>spring-boot-maven-plugin</artifactId> 
    4. </plugin> 

    1.2jar包当前目录的配置文件

    这里的方法与上面的基本相同,将<outputDirectory>${basedir}/target/config/</outputDirectory>换为<outputDirectory>${basedir}/target/</outputDirectory>即可(假设你的开发工具的输出目录为target)。

    1.3classpath/config里的配置文件

    这种不需要做特别的配置,只需要在src/main/resources目录下新建一个config文件夹就好了。

    1.4直接放在classpath里的配置文件(默认)

    一般新建完SpringBoot项目就是这样的。

    二、打包时将依赖jar保存到指定路径

    在pom.xml文件添加如下内容即可。

    2.1将依赖copy到lib目录

    1. <plugin> 
    2. <groupId>org.apache.maven.plugins</groupId> 
    3. <artifactId>maven-dependency-plugin</artifactId> 
    4. <version>${maven-dependency-plugin.version}</version> 
    5. <executions> 
    6. <execution> 
    7. <id>copy-dependencies</id> 
    8. <phase>package</phase> 
    9. <goals> 
    10. <goal>copy-dependencies</goal> 
    11. </goals> 
    12. <configuration> 
    13. <outputDirectory>${project.build.directory}/lib/</outputDirectory> 
    14. <includeScope>compile</includeScope> 
    15. </configuration> 
    16. </execution> 
    17. </executions> 
    18. </plugin> 

    2.2将依赖添加到classpath

     

    enter description here
    enter description here

     

    打包后获得的示例截图:
    enter description here

    三、获取jar包里的资源路径

    其实这是个伪命题,因为jar自己就是个文件,如果用代码获取里面a.jar里面的b.jks文件,获得路径就变成了a.jar!/b.jks了。

    jar中资源有其专门的URL形式: jar:!/{entry} 。所以,如果jar包中的类源代码用File f=new File(相对路径);的形式,是不可能定位到文件资源的,启动jar包时会报出FileNotFoundException。

    所以只有两个选择:

    1. 打包时将文件放在jar包外,然后通过file:/path/to/b.jks这种形式来获取。
    2. 通过Class类的getResourceAsStream()方法来获取 ,不过返回的是InputStream并不是路径

    可以参考这篇博客:https://blog.csdn.net/li2327234939/article/details/79565772

    四、总结

    maven插件太多了,maven-assembly-plugin还需要学习一下。

  • 相关阅读:
    JS-鼠标经过显示二级菜单
    CSS-论css如何纯代码实现内凹圆角
    JS-制作可伸缩的水平菜单栏
    CSS-混合布局的几种方法(正确的方法和错误的原因)
    JS-选项卡制作解释部分
    JS-制作网页特效——选项卡效果(水平,点击)
    JS-DOM 综合练习-动态添加删除班级成绩表
    JS-DOM对象知识点汇总(慕课)
    JS-window对象集合
    JS-节点属性(常用!)
  • 原文地址:https://www.cnblogs.com/2YSP/p/9860610.html
Copyright © 2011-2022 走看看