0

我想在 Spring 3.1 中开始使用配置文件,但我发现了一个问题。

在我设置的休眠 xml 文件中

<beans profile="test">

    <context:property-placeholder location="/WEB-INF/springtest.properties" />


</beans>

<beans profile="production">

    <context:property-placeholder location="/WEB-INF/spring.properties" />


</beans>

在 web.xml 我已经设置:

<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
    </init-param>
    <init-param>
        <param-name>spring.profiles.active</param-name>
        <param-value>production</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

但是当我尝试运行应用程序时,我遇到了问题,spring 看不到spring.properties文件中的变量。

我应该设置其他东西吗?

更新

休眠文件如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
<beans  xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:p="http://www.springframework.org/schema/p" 
        xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
            http://www.springframework.org/schema/tx 
            http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-3.1.xsd
            ">

    <context:property-placeholder location="/WEB-INF/spring.properties" />


    <!-- Enable annotation style of managing transactions -->
    <tx:annotation-driven transaction-manager="transactionManager" />
    <!-- <tx:annotation-driven/> -->

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
                 p:dataSource-ref="dataSource"
                 p:configLocation="${hibernate.config}"
                 p:packagesToScan="com.app.search">
        <property name="annotatedClasses">
            <list>
                <value>com.app.search.domain.UsersEntity</value>
                <value>com.app.search.domain.CategoryEntity</value>
                <value>com.app.search.domain.GroupEntity</value>
                <value>com.app.search.domain.PlacesEntity</value>
                <value>com.app.search.domain.ProvincesEntity</value>
                <value>com.app.search.domain.PageAreaEntity</value>
                <value>com.app.search.domain.PageConfigurationEntity</value>
                <value>com.app.search.domain.PageTemplateEntity</value>
                <value>com.app.search.domain.PageTypeEntity</value>
                <value>com.app.search.domain.PageModuleEntity</value>
                <value>com.app.search.domain.PageModuleAreaConfigurationEntity</value>
                <value>com.app.search.domain.PageModuleConfigurationEntity</value>
                <value>com.app.search.domain.PageFacetEntity</value>
                <value>com.app.search.domain.PageFacetAreaEntity</value>
                <value>com.app.search.domain.PageTemplateFacetEntity</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.connection.url">jdbc:mysql://localhost/Search</prop>
                <prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop>
                <prop key="hibernate.connection.username">root</prop>
                <prop key="hibernate.connection.password"></prop>
            </props>
        </property>
    </bean>


    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${app.jdbc.driverClassName}" />
        <property name="url" value="${search.jdbc.url}" />
        <property name="username" value="${search.jdbc.user}" />
        <property name="password" value="${search.jdbc.password}" />
    </bean>


    <!-- Declare a transaction manager-->
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" p:sessionFactory-ref="sessionFactory">
        <qualifier value="transactionManager"/>
    </bean>

    <beans profile="test">

        <context:property-placeholder location="/WEB-INF/springtest.properties" />


    </beans>

    <beans profile="production">

        <context:property-placeholder location="/WEB-INF/spring.properties" />

    </beans>



</beans>
4

1 回答 1

3

我认为原因是,由于您希望在根应用程序上下文中通过 ContextLoaderListener 加载,因此指定配置文件的方式不是通过 DispatcherServlet 的 init 参数,而是通过 ServletContext 的 init 参数,这样在您的 web.xml 文件中:

<context-param>
    <param-name>spring.profiles.active</param-name>
    <param-value>production</param-value>
</context-param>
于 2012-09-26T13:43:33.227 回答