내 응용 프로그램에는 @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 DEMO
Maven 명령으로