注意
有些地方是一行的,该行末尾被我用 \ 换行并忽略换行所有空格、换行符。
项目结构
Spring 原配置
通常 Spring
配置文件 applicationContext.xml
是如下配置:(缩写代码)
<beans>
<!-- 设置属性配置文件 -->
<context:property-placeholder
location="classpath:jdbc.properties"/>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${mysql.jdbc.driverClassName}"/>
<property name="url" value="${mysql.jdbc.url}"/>
<property name="username" value="${mysql.jdbc.username}"/>
<property name="password" value="${mysql.jdbc.password}"/>
</bean>
</beans>
jdbc.properties
文件配置如下:
mysql.jdbc.driverClassName=com.mysql.jdbc.Driver
mysql.jdbc.url=jdbc:mysql://127.0.0.1:3306/cjsd?useUnicode=true& \
characterEncoding=utf-8&characterSetResults=utf-8& \
zeroDateTimeBehavior=convertToNull \
mysql.jdbc.username=root
mysql.jdbc.password=admin
在这时,我们用 Maven 的 Package打包发现,会将 jdbc.properties 打包到 jar 包中.
Spring优化配置
我们将
<context:property-placeholder
location="classpath:jdbc.properties"/>
改成:
<!-- 定义受环境影响易变的变量 -->
<bean class="org.springframework.beans. \
factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName"
value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
<property name="ignoreResourceNotFound" value="true"/>
<property name="locations">
<list>
<!-- 标准配置 -->
<value>classpath:jdbc.properties</value>
<value>file:./conf/jdbc.properties</value>
</list>
</property>
</bean>
其中,配置了两个资源文件,classpath是用于调试时指定资源文件,file 是发布后的资源文件目录,在执行jar的conf目录.
这时Spring会报一个资源文件不能找到的错误,但是Spring资源文件只会加载一次,所以对性能稍有影响问题不大。
Maven 资源文件排除
我们在 pom.xml
中的 build
节点增加如下代码:
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<excludes>
<exclude>**/jdbc.properties</exclude>
<exclude>jdbc.properties</exclude>
</excludes>
</resource>
</resources>
其中第一段配置声明:在src/main/resources目录下,仅jdbc.properties文件不是资源文件。
在这时,我们发布后发现 jar 包里面的资源文件 jdbc.properties
已经不存在。
Maven 资源文件复制
然后我们可以在 plugins 中增加插件,将配置文件 jdbc.properties
复制到 conf
目录下.
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<executions>
<execution>
<id>copy-xmls</id>
<phase>process-sources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/conf</outputDirectory>
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<includes>
<include>**/jdbc.properties</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
这时,我们的文件更改成功,需要注意 Maven 的 Clean .不然可能会存在错误.