将 Spring + Maven 的 jdbc.properties 配置文件外移

注意

有些地方是一行的,该行末尾被我用 \ 换行并忽略换行所有空格、换行符。

项目结构

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.propertiesvalue>
            <value>file:./conf/jdbc.propertiesvalue>
        list>
    property>
bean>

其中,配置了两个资源文件,classpath是用于调试时指定资源文件,file 是发布后的资源文件目录,在执行jar的conf目录.

这时Spring会报一个资源文件不能找到的错误,但是Spring资源文件只会加载一次,所以对性能稍有影响问题不大。

Maven 资源文件排除

我们在 pom.xml 中的 build 节点增加如下代码:

<resources>
    <resource>
        <directory>src/main/resourcesdirectory>
        <filtering>falsefiltering>
        <excludes>
            <exclude>**/jdbc.propertiesexclude>
            <exclude>jdbc.propertiesexclude>
        excludes>
    resource>
resources>

其中第一段配置声明:在src/main/resources目录下,仅jdbc.properties文件不是资源文件。

在这时,我们发布后发现 jar 包里面的资源文件 jdbc.properties 已经不存在。

Maven 资源文件复制

然后我们可以在 plugins 中增加插件,将配置文件 jdbc.properties 复制到 conf 目录下.

<plugin>
    <artifactId>maven-resources-pluginartifactId>
    <version>2.5version>
    <executions>
        <execution>
            <id>copy-xmlsid>
            <phase>process-sourcesphase>
            <goals>
                <goal>copy-resourcesgoal>
            goals>
            <configuration>
                <outputDirectory>${basedir}/target/confoutputDirectory>
                <resources>
                    <resource>
                        <directory>${basedir}/src/main/resourcesdirectory>
                        <includes>
                            <include>**/jdbc.propertiesinclude>
                        includes>
                    resource>
                resources>
            configuration>
        execution>
    executions>
plugin>

这时,我们的文件更改成功,需要注意 Maven 的 Clean .不然可能会存在错误.

你可能感兴趣的:(maven,Spring)