[java] Spring 3.1의 기본 프로필

내 응용 프로그램에는 @Profile("prod")및 주석이 달린 콩이 있습니다 @Profile("demo"). 짐작할 수 있듯이 첫 번째는 프로덕션 DB에 연결하는 Bean에 사용되며 두 번째 HashMap는 개발 속도를 높이기 위해 가짜 DB ( 또는 기타) 를 사용하는 Bean에 주석을 추가 합니다.

내가 갖고 싶은 것은 "prod"something-else “로 재정의되지 않는 경우 항상 사용되는 기본 프로필 ( )입니다 .

내 안에있는 것이 완벽 할 것입니다 web.xml.

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

그런 다음 이것을 재정 의하여 -Dspring.profiles.active="demo"할 수 있습니다.

mvn jetty:run -Dspring.profiles.active="demo". 

그러나 슬프게도 이것은 작동하지 않습니다. 내가 어떻게 할 수 있을지 아십니까? -Dspring.profiles.active="prod"내 모든 환경에서 설정 하는 것은 옵션이 아닙니다.



답변

내 경험은

@Profile("default")

Bean은 다른 프로파일이 식별되지 않는 경우에만 컨텍스트에 추가됩니다. 예를 들어 다른 프로필을 전달하면 -Dspring.profiles.active="demo"이 프로필이 무시됩니다.


답변

web.xml에서 프로덕션 환경을 기본 프로필로 정의하십시오.

<context-param>
   <param-name>spring.profiles.default</param-name>
   <param-value>prod</param-value>
</context-param>

다른 프로필을 사용하려면 시스템 속성으로 전달하십시오.

mvn -Dspring.profiles.active="demo" jetty:run


답변

동일한 문제가 있지만 ServletContext를 프로그래밍 방식으로 구성하기 위해 WebApplicationInitializer 를 사용 합니다 (Servlet 3.0 이상). 그래서 다음을 수행합니다.

public class WebAppInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext sc) throws ServletException {
        // Create the 'root' Spring application context
        final AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
        // Default active profiles can be overridden by the environment variable 'SPRING_PROFILES_ACTIVE'
        rootContext.getEnvironment().setDefaultProfiles("prod");
        rootContext.register(AppConfig.class);

        // Manage the lifecycle of the root application context
        sc.addListener(new ContextLoaderListener(rootContext));
    }
}


답변

PROD 프로필을 제거하고 @Profile ( “! demo”)를 사용할 수도 있습니다.


답변

이미 @andih에 게시 된 기본 프로덕션 프로필 설정 정보

maven jetty 플러그인의 기본 프로필을 설정하는 가장 쉬운 방법은 플러그인 구성에 아래 요소를 포함하는 것입니다.

<plugin>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <configuration>
        <systemProperties>
            <systemProperty>
                <name>spring.profiles.active</name>
                <value>demo</value>
            </systemProperty>
        </systemProperties>
    </configuration>
</plugin>


답변

Spring은 어떤 프로필이 활성 상태인지 결정할 때 두 가지 개별 속성을 제공합니다.

  • spring.profiles.active

  • spring.profiles.default

spring.profiles.active가 설정되어 있으면 해당 값에 따라 활성 프로필이 결정됩니다. 그러나 spring.profiles.active설정되지 않은 경우 Spring은spring.profiles.default.

둘 경우 spring.profiles.active도이 spring.profiles.default설정되어 있지 않은, 다음 프로필에있는 것으로 정의되지 않은 활성 프로필 및 만 콩은 프로파일이 속한 지정하지 않은 created.Any 콩이있다 없다 default프로필.


답변

web.xml을 필터링 된 리소스로 설정하고 maven 프로필 설정에서 maven으로이 값을 채울 수 있습니다.

pom에서 모든 리소스를 필터링합니다 ($ {} 표시가 없으면 taht 할 수 있습니다)

<webResources>
    <resource>
        <directory>src/main/webapp</directory>
        <filtering>true</filtering>
    </resource>
</webResources>

web.xml 넣어

<context-param>
     <param-name>spring.profiles.active</param-name>
     <param-value>${spring.prfile}</param-value>
</context-param>

pom에서 maven 프로필 만들기

<profiles>
    <profile>
        <id>DEFAULT</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <spring.profile>prod</spring.profile>
        </properties>
    <profile>
    <profile>
        <id>DEMO</id>
        <properties>
            <spring.profile>demo</spring.profile>
        </properties>
    <profile>
</profiles>

이제 사용할 수 있습니다

mvn jetty:run -P DEMO

또는 단순히 -P DEMOMaven 명령으로