maven 配置文件加载错误的问题

来源:互联网 发布:windows开机声音 编辑:程序博客网 时间:2024/06/09 23:03

         昨天在部署maven打的war时,出现了数据库连接不上的问题,这个问题昨天看了一天,没有解决,今天早上让别人看了看,发现解决了,经我查看发现,问题是这样的,我在parent的那个pom中配置了对于不同的环境,某个配置的加载方式,如:

<profile>
            <id>product</id>
            <properties>
                <lj.jdbc.conf.path>classpath:/conf/lj/product/jdbc.properties</lj.jdbc.conf.path>
                <lj.quartz.conf.path>classpath:/conf/lj/product/quartz.properties</lj.quartz.conf.path>
                <lj.system.conf.path>classpath:/conf/lj/product/system.properties</lj.system.conf.path>


                <yq.jdbc.conf.path>classpath:/conf/yq/product/jdbc.properties</yq.jdbc.conf.path>
                <yq.system.conf.path>classpath:/conf/yq/product/system.properties</yq.system.conf.path>
            </properties>
        </profile>

  而我在子模块的pom文件中配置了

       <filters>
            <filter>src/main/resources/conf/jdbc.properties</filter>
        </filters>

    虽然我们在子项目中通过:

<bean id="propertyConfigurer"
 class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<array>
<value>${yq.jdbc.conf.path}</value>
<value>${yq.system.conf.path}</value>
</array>
</property>
<property name="fileEncoding" value="utf-8" />
</bean>

这样去引入,但是对于filter而言,他会把配置中的键值对引入,并把它在xml中用到的地方的变量,用这个变量的key对应的value来填充,这样配置中就没有了那个变量,所以填充进入也就没有了那个需要填充的变量。

例如:filter会把

<bean id="readDataSource" class="com.alibaba.druid.pool.DruidDataSource"
destroy-method="close" init-method="init" lazy-init="true">
<description>只读数据库连接</description>
<property name="driverClassName" value="${db.driver}" />
<property name="url" value="${db.reader.url}" />
<property name="username" value="${db.reader.username}" />
<property name="password" value="${db.reader.password}" />
<!-- 初始化连接大小 -->
<property name="initialSize" value="${db.initialSize}" />
<!-- 连接池最大数量 -->
<property name="maxActive" value="${db.maxActive}" />
<!-- 连接池最小空闲 -->
<property name="minIdle" value="${db.minIdle}" />
<!-- 获取连接最大等待时间 -->
<property name="maxWait" value="${db.maxWait}" />
<!-- -->
<property name="defaultReadOnly" value="true" />
<property name="proxyFilters">
<list>
<ref bean="stat-filter" />
</list>
</property>
<property name="filters" value="${druid.filters}" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<property name="validationQuery" value="SELECT 'x'" />
<property name="timeBetweenLogStatsMillis" value="60000" />
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="${db.minEvictableIdleTimeMillis}" />
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="${db.timeBetweenEvictionRunsMillis}" />
</bean>

这个配置填充为

<bean id="writeDataSource" class="com.alibaba.druid.pool.DruidDataSource"
destroy-method="close" init-method="init" lazy-init="true">
<description>只写数据库连接</description>
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://172.0.0.1:3306/test?useUnicode=true&amp;characterEncoding=utf8" />
<property name="username" value="root" />
<property name="password" value="root" />
<property name="initialSize" value="20" />
<property name="maxActive" value="40" />
<property name="minIdle" value="1" />
<property name="maxWait" value="60000" />
<property name="defaultReadOnly" value="false" />
<property name="proxyFilters">
<list>
<ref bean="stat-filter" />
</list>
</property>
<property name="filters" value="" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<property name="validationQuery" value="SELECT 'x'" />
<property name="timeBetweenLogStatsMillis" value="60000" />
<property name="minEvictableIdleTimeMillis" value="300000" />
<property name="timeBetweenEvictionRunsMillis" value="3000" />
</bean>

那样那个引入配置就没什么意义,所以需要取消filter,或者只用profile或者filter这样就可以避免不必要的问题。

    记于此。

0 0
原创粉丝点击