2012-09-26 91 views
0

我想在Spring 3.1中开始使用配置文件,并且发现问题。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.properties文件的变量。

我应该设置别的东西吗?

UPDATE

休眠文件看起来是这样的:

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

似乎是正确的行为,你已经激活了生产配置文件,并且生产配置文件正在加载'springdev.properties'文件,如果你想加载spring.properties文件,你必须激活'test'配置文件吗? –

+0

无论哪个文件将被加载并不重要,两者都是相同的。现在我只是测试使用配置文件的这个解决方案,但我打开它的问题。 – Ilkar

+0

好的,是'

回答

3

我想原因是,既然你想这在你的根应用上下文,装起来通过的ContextLoaderListener,指定配置文件的方式不是通过DispatcherServlet的初始参数,而是ServletContext的初始参数,这种方式在你的web.xml文件中:

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

谢谢,它的工作原理,但这是基于http://blog.springsource.org/2011/02/11/spring-framework-3-1-m1-released/文章,其中变量是delared作为init-param,我在init-param中看到了许多文章,其中params也被声明。 – Ilkar