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으로 이동하려고 시도했지만 동일한 결과가 나타납니다.
내 제약은 우리의 회사가 모든 환경에 밀어 같은 인공물을 사용하기 때문에
내 메이븐 스크립트 내에서 프로파일을 설정할 수 있습니다.
컨테이너의 영향을 받아 WebLogic의 버전을 변경하거나 최신 서블릿 을 사용할 수 없습니다.
- 봄 3.1.2.RELEASE
- 는 웹 로직 10.3.6에서 javax.servlet-API 2.5
는 다른 사람이 본 사람
- :
나의 현재 버전은 이 문제는 어떻게 초기화 된 클래스를 가져올 수 있는지 알고 있습니다. 아니면 내가하려는 일을하는 더 좋은 방법이 있습니까?당신의 ApplicationContextInitializer이 이유가 될 수 Spring MVC 3.1 Using Profiles for environment specific Hibernate settings이
글쎄, 당황 스럽다. 이름이 정확해야한다. * 클래스가되어야한다. 도와 주셔서 감사합니다. –