2012-11-01 3 views
6

local.properties, dev와 같은 각 환경에서 파일 이름이 다른 속성 파일에서 속성을 읽으려고합니다. 이러한 등록 정보 파일에는 host, port 및 dbname과 같은 해당 mongodb 인스턴스에 대한 연결 정보 만 포함됩니다. 일반적으로 이런 종류의 일은 앱 서버의 JNDI 정의로 끝나 겠지만 현재 Mongo에 대한 구현은 없습니다.Spring 3.1 contextInitializerClasses가 web.xml을 사용하여 WebLogic 10.3.6에서 작동하지 않습니다. Context-Param

WebLogic 10.3.6을 사용하고 있기 때문에 Servlet 3.0 사양을 사용할 수 없으므로 Spring 용 Java 구성을 사용할 수 없으며 현재 XML 만 사용할 수 있습니다. 따라서 사용하려는 접근법은 web.xml에 contextInitializerClass 컨텍스트 매개 변수를 정의한 다음 ApplicationContextInitializer를 구현하고 Spring 활성 프로필을 수동으로 설정하는 클래스로 설정하는 것입니다. 그러나 WebLogic을 시작할 때나 재배치시 사용자 정의 이니셜 라이저 클래스를 호출하지 않으며 내 프로필이 설정되지 않습니다.

내 질문은이고 Spring의 contextInitializerClass는 Servlet 3.0에 종속되어 있습니까? 아니면 내가 누락 된 다른 것이 있습니까? 내가 정의

코드 :

web.xml을

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 

<context-param> 
    <param-name>contextInitializerClass</param-name> 
    <param-value>com.myapp.spring.SpringContextProfileInit</param-value> 
</context-param> 

<!-- Location of spring context config --> 
<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> 
</context-param> 
<servlet> 
    <servlet-name>appServlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet>  
... 

SpringContextProfileInit.java

public class SpringContextProfileInit implements ApplicationContextInitializer<ConfigurableWebApplicationContext> { 

    private static final Logger log = LoggerFactory.getLogger(SpringContextProfileInit.class); 

    public SpringContextProfileInit() { 
     log.debug("Got the constructor"); 
    } 

    @Override 
    public void initialize(ConfigurableWebApplicationContext ctx) { 
     ConfigurableWebEnvironment environ = ctx.getEnvironment(); 
     log.debug("Got the environment, no profiles should be set: "+ environ.getActiveProfiles()); 

     /* 
     * Here I am setting the profile with a hardcoded name. In the real app, 
     * I would read from a separate properties file, always named app.properties 
     * which would live on the app server's classpath. That app.properties file 
     * would contain a property directing the Spring Profile to use. 
     */ 
     environ.setActiveProfiles("local"); 
     log.debug("Now should be set to local: "+ environ.getActiveProfiles()); 
     ctx.refresh(); 
    } 

} 

서블릿-context.xml에

01 프로파일이 설정되지 않은 경우 예상되는 NoSuchBeanDefinitionException:No bean named 'deployProperties' is defined : 나는 응용 프로그램을 배포 할 때 23,516,
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:mvc="http://www.springframework.org/schema/mvc" 
xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:mongo="http://www.springframework.org/schema/data/mongo" 
    xmlns:c="http://www.springframework.org/schema/c" 
xmlns:p="http://www.springframework.org/schema/p" 
xmlns:jpa="http://www.springframework.org/schema/data/jpa" 
xmlns:cache="http://www.springframework.org/schema/cache" 
xmlns:aop="http://www.springframework.org/schema/aop" 
xmlns:util="http://www.springframework.org/schema/util" 
xsi:schemaLocation=" 
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd 
http://www.springframework.org/schema/data/mongo 
http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd 
    http://www.springframework.org/schema/data/jpa 
    http://www.springframework.org/schema/data/jpa/spring-jpa.xsd 
    http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd 
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd 
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd"> 
<context:property-placeholder properties-ref="deployProperties" /> 
... 
<beans profile="local"> 
    <bean id="deployProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean" 
      p:location="WEB-INF/local.properties" /> 
</beans> 
<beans profile="beast, dev"> 
    <bean id="deployProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean" 
      p:location="WEB-INF/dev.properties" /> 
</beans> 
</beans> 

, 나는 예외를 얻을. 내 로그에 내 디버그 문이 인쇄되어 있지 않은 것으로 표시됩니다. contextInitializerClass 매개 변수를 DispatcherServlet의 init-param으로 이동하려고 시도했지만 동일한 결과가 나타납니다.

내 제약은 우리의 회사가 모든 환경에 밀어 같은 인공물을 사용하기 때문에

  1. 내 메이븐 스크립트 내에서 프로파일을 설정할 수 있습니다.

  2. 컨테이너의 영향을 받아 WebLogic의 버전을 변경하거나 최신 서블릿 을 사용할 수 없습니다.

    • 봄 3.1.2.RELEASE
    • 는 웹 로직 10.3.6에서 javax.servlet-API 2.5

    는 다른 사람이 본 사람

  3. :

나의 현재 버전은 이 문제는 어떻게 초기화 된 클래스를 가져올 수 있는지 알고 있습니다. 아니면 내가하려는 일을하는 더 좋은 방법이 있습니까?당신의 ApplicationContextInitializer이 이유가 될 수 Spring MVC 3.1 Using Profiles for environment specific Hibernate settings

답변

6

상황 PARAM의 이름은 내가 잘못 생각, 그것은 contextInitializerClasses하지 contextInitializerClass을해야한다 :

이 대답하지 않은 것을 다른 포스터의 질문에 관련 보인다

은 또한 당신이 당신의 web.xml 파일에서 ContextLoaderListener에 대한 항목을 누락 될 것으로 보인다 집어지고 있지, 너무 추가해보십시오 :

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

contextConfigLocation 태그에 지정된 bean 구성 xml 파일을로드하는 사람

+0

글쎄, 당황 스럽다. 이름이 정확해야한다. * 클래스가되어야한다. 도와 주셔서 감사합니다. –