序言

Spring提供了一种强大的Ant模式通配符匹配,能从一个路径匹配一批资源。

Ant路径通配符

Ant路径通配符支持“?”、“*”、“**”,注意通配符匹配不包括目录分隔符“/”:

“?”:匹配一个字符,如“config?.xml”将匹配“config1.xml”;

“*”:匹配零个或多个字符串,如“cn/*/config.xml”将匹配“cn/javass/config.xml”,但不匹配匹配“cn/config.xml”;而“cn/config-*.xml”将匹配“cn/config-dao.xml”;

“**”:匹配路径中的零个或多个目录,如“cn/**/config.xml”将匹配“cn /config.xml”,也匹配“cn/javass/spring/config.xml”;而“cn/javass/config-**.xml”将匹配“cn/javass/config-dao.xml”,即把“**”当做两个“*”处理。

classpath和classpath*

Spring在加载类路径资源时除了提供前缀“classpath:”的来支持加载一个Resource,还提供一个前缀“classpath*:”来支持加载所有匹配的类路径Resource。

一、“classpath”: 用于加载类路径(包括jar包)中的一个且仅一个资源;对于多个匹配的也只返回一个,所以如果需要多个匹配的请考虑“classpath*:”前缀;

二、“classpath*”: 用于加载类路径(包括jar包)中的所有匹配的资源。带通配符的classpath使用“ClassLoader”的“Enumeration<URLgetResources(String name)”方法来查找通配符之前的资源,然后通过模式匹配来获取匹配的资源。如“classpath:META-INF/*.LIST”将首先加载通配符之前的目录“META-INF”,然后再遍历路径进行子路径匹配从而获取匹配的资源。

classpath用在哪里

在编译打包后的项目中,根目录是META-INFBOOT-INF。这个时候,我们可以看到classes这个文件夹,它就是我们要找的classpath。

这里需要提一点是,此项目可能依赖底层的jar包,比如:api层需要引用dal层的jar包。想说的是所有依赖jar包中的classes是同一级别。

实例助理解:

此代码在api层的jar包中。

此资源是在dal层的jar包中

profiles配置环境配置信息

<profiles>
<profile>
<!--prd env-->
<id>prd</id>
<properties>
<profiles.active>prd</profiles.active>
</properties>
</profile>
<profile>
<!--local env-->
<id>local</id>
<properties>
<profiles.active>local</profiles.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<!--UT env-->
<id>ut</id>
<properties>
<profiles.active>ut</profiles.active>
</properties>
</profile>
<profile>
<!-- test env -->
<id>test</id>
<properties>
<profiles.active>test</profiles.active>
</properties>
</profile>
</profiles>

资源文件使用pom文件配置

@xx@圈起来或者${xx},内部是xml链式调用,如下:

激活不同环境需配置profiles.active,也可以在pom文件的profiles中定义,仔细看上面的配置文件<activeByDefault> 节点 local是被设置为激活的

spring.profiles.active=@profiles.active@
project.version=@project.parent.version@

如需正确解析,需在bulid中添加插件

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<!-- 指定配置文件编码 -->
<encoding>UTF-8</encoding>
<!-- 使用默认分隔符, ${xxx}或者@xxx@ -->
<useDefaultDelimiters>true</useDefaultDelimiters>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<finalName>profit-monitor</finalName>
</build>

4、激活profile

1)默认的激活

上面的profile配置中设置的默认的激活环境。如下面所示

<activeByDefault>true</activeByDefault> 

2)使用-P参数显示激活一个profile

当我们在进行Maven操作时就可以使用-P参数显示的指定当前激活的是哪一个profile了。比如我们需要在对项目进行打包的时候使用id为dev的profile,我们就可以这样做:

mvn package –Pdev

这里假设dev是在settings.xml中使用dev标记的处于激活状态的profile,那么当我们使用“-P !profile”的时候就表示在当前操作中该profile将不处于激活状态。

总结

java资源加载没完,还有很多吧的,现在没时间,就这些。

Java使用路径通配符加载Resource与profiles配置使用的更多相关文章

  1. spring3: 4.4 使用路径通配符加载Resource

    4.4.1  使用路径通配符加载Resource 前面介绍的资源路径都是非常简单的一个路径匹配一个资源,Spring还提供了一种更强大的Ant模式通配符匹配,从能一个路径匹配一批资源. Ant路径通配 ...

  2. 《深入理解Java虚拟机》- Java虚拟机是如何加载Java类的?

    Java虚拟机是如何加载Java类的?  这个问题也就是面试常问到的Java类加载机制.在年初面试百战之后,菜鸟喜鹊也是能把这流程倒背如流啊!但是,也只是字面上的背诵,根本就是像上学时背书考试一样. ...

  3. java在windows下加载dll

    java在类中加载动态链接库文件. 类文件中: static { System.loadLibrary("dll文件"); } dll文件在工程的包路径下.例如:pro/bin/h ...

  4. Java类编译、加载、和执行机制

    Java类编译.加载.和执行机制 标签: java 类加载 类编译 类执行 机制 0.前言 个人认为,对于JVM的理解,主要是两大方面内容: Java类的编译.加载和执行. JVM的内存管理和垃圾回收 ...

  5. UNITY_资源路径与加载外部文件

    UNITY_资源路径与加载外部文件 https://www.tuicool.com/articles/qMNnmm6https://blog.csdn.net/appppppen/article/de ...

  6. java——Class、动态加载

    Class和Object混淆了? Object: 任何类都是Object类的子类 Class: 任何类都是Class的实例对象 Class可以说是一种特殊的类,它表示的是类类型,Object仍然是Cl ...

  7. Java 类加载器及加载Class字节码

    参考来源:http://www.cnblogs.com/fingerboy/p/5456371.html       java笔记--理解java类加载器以及ClassLoader类 参考来源:htt ...

  8. java类什么时候加载?,加载类的原理机制是怎么样的?

    java类什么时候加载?,加载原理机制是怎么样的?   答: 很多人都不是很清楚java的class类什么时候加载在运行内存中,其实类加载的时间是发生在一下几种情况: 1.实例化对象时,就像sprin ...

  9. 浅析java中ClassLoader如何加载Class

    我的博客地址:https://blog.csdn.net/qq_41907991 ClassLoader是一个经常出现又让很多人望而却步的词.本文试图以最浅显易懂的方式来讲解ClassLoader,希 ...

随机推荐

  1. ABAP ALV显示前排序合并及布局显示

    有时候会有用户要求显示出来的ALV立即就是升序或者降序,或者是上下同一个字段值一样的情况显示一次,如 变为 这个时候内表用SORT有时候会不好用,可以使用函数 REUSE_ALV_GRID_DISPL ...

  2. go-GUI-代码

    直接看网址吧,所有的GO-GUI代码!~~~~ 网址

  3. Web前端基础(8):JavaScript(二)

    1. 数据类型转换 1.1 将数值类型转换成字符串类型 1.1.1 隐式转换 在js中,当运算符在运算时,如果两边数据不统一,CPU就无法计算,这时我们编译器会自动将运算符两边的数据做一个数据类型转换 ...

  4. Python、PyCharm、django环境搭建

    本文又名—— 响应式页面——从无到有(一) 事情是这样的,期末小组作业,需要我把大佬们写的页面搞成响应式的,但是我连py都没用过,只好现学…… 文章目录 一.前言 1.1 环境介绍 1.2 前期尝试 ...

  5. rocksdb和leveldb性能比较——写性能

    前面学习了一下rocksdb,这个db是对leveldb的一个改进,是基于leveldb1.5的版本上的改进,而且leveldb1.5以后也在不断的优化,下面从写入性能对两者进行对比. 前言 比较的l ...

  6. java中字符串String、StringBuilder、StringBuffer的常用方法

    String的常用方法: public static void main(String[] args) { String str = "Hello world!"; // 获取字符 ...

  7. mssql sqlserver 使用sql脚本剔除数据中的tab、空格、回车等特殊字符的方法分享

    摘要: 在sqlserver开发中,常常有同事反馈无法剔除空格,我们可以通过仔细检查发现,并不是空格字符,而是tab键,如下所示: 解决方法: 对于这些特殊字符的替换,我们需采用字符所对应的ascii ...

  8. java链接集合

    Intellij IDEA 导入eclipse web 项目详细操作 https://blog.csdn.net/deng11408205/article/details/79723213?utm_s ...

  9. nginx的共享字典项api(操作方法)

    nginx的共享内存,称为共享字典项,对于所有的worker进程都可见,是一种全局变量. 备注一下内容中的 [] 是 备注. 源码分析文档:https://www.codercto.com/a/948 ...

  10. C++中的传值与传址

    在指针的传递中,也涉及到传值与传址的问题.下面通过一个函数进行说明. 代码如下: bool openBinary(uchar* buffer) { ; buffer = (uchar*)malloc( ...