• 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还需要学习一下。

  • 相关阅读:
    Chapter 03Using SingleRow Functions to Customize Output(03)
    Chapter 03Using SingleRow Functions to Customize Output(01)
    Chapter 04Using Conversion Functions and Conditional ExpressionsNesting Functions
    Chapter 04Using Conversion Functions and Conditional ExpressionsGeneral Functions
    Chapter 11Creating Other Schema Objects Index
    传奇程序员John Carmack 访谈实录 (zz.is2120)
    保持简单纪念丹尼斯里奇(Dennis Ritchie) (zz.is2120.BG57IV3)
    王江民:传奇一生 (zz.is2120)
    2011台湾游日月潭
    2011台湾游星云大师的佛光寺
  • 原文地址:https://www.cnblogs.com/2YSP/p/9860610.html
Copyright © 2020-2023  润新知