弹簧3.1设置轮廓

时间:2012-09-26 12:43:20

标签: spring profile

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

在我的hibernate 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.properties文件的变量。

我应该设置别的吗?

更新

hibernate文件如下所示:

    <?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>

1 个答案:

答案 0 :(得分:3)

我认为原因是因为你希望在你的根应用程序上下文中通过ContextLoaderListener加载,所以指定profile的方式不是通过DispatcherServlet的init param,而是ServletContext的init param,这种方式在你的web.xml文件中:

<context-param>
    <param-name>spring.profiles.active</param-name>
    <param-value>production</param-value>
</context-param>