Java使用路径通配符加载Resource与profiles配置使用详解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java使⽤路径通配符加载Resource与profiles配置使⽤详

序⾔

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<URL>getResources(Stringname)”⽅法来查找通配符之前的资源,然后通过模式匹配来获取匹配的资源。如“classpath:META-INF/*.LIST”将⾸先加载通配符之前的⽬录“META-INF”,然后再遍历路径进⾏⼦路径匹配从⽽获取匹配的资源。

classpath⽤在哪⾥

在编译打包后的项⽬中,根⽬录是META-INF和BOOT-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配置使⽤详解的⽂章就介绍到这了,更多相关Java 路径通配符加载配置内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

相关文档
最新文档