2012-08-08 3 views
26

많은 자바 응용 프로그램이 빌드됩니다. maven에는 Profiles 개념이있다. 다른 환경에 맞는 릴리스 패키지를 만드는 것이 정말 편리하다. 예 : dev/test/prod 다른 것을 사용하는 것 path/jndiname/security rule/properties files ... 나는 그것을 설명하기 위해 여기에 코드를 나열 할 필요가 없다고 생각한다.프로필 또는 스프링 프로필?

스프링은 자바 개발을위한 매우 훌륭하고 인기있는 프레임 워크이며, 스프링 3 이후로 프로파일 개념도 지원합니다.

다른 ENV 용도로 출시 할 때 어떤 질문이 더 좋은가요? 지금 나는 메이븐 프로필을 선호합니다. 왜냐하면 봄은 각 프로파일의 각 bean 정의를 복사해야하기 때문이다. 어떤 프로필을 활성화해야 하는지를 봄에 알려주기 위해 이니셜 라이저/속성이 필요하다.

하지만 봄 프로필은 maven 프로필보다 융통성이 있다고 느낍니다.

어떻게 생각하십니까? 조언을 해주세요. 고맙습니다.

답변

30

Maven 프로파일은 빌드 타임 솔루션을 제공하지만 SpringFramework 프로파일은 런타임 대안을 제공합니다. 이것이 처음 다른 질문 일 것입니다 : 만약 그가 다른 환경에 배치 될 수있는 하나의 패키지를 원한다면, 또는 빌드 툴이 목적지 환경에 따라 다른 패키지를 제공하기를 원한다면.

다른 패키지를 다른 서버에 배포 한 경우 많은 질문이 발생할 수 있습니다. 예를 들어 제 작업 환경에서 이전에 프로덕션 환경에서 발생한 버그를 해결하기 위해 패키지를 배포하는 경우 회사 정책에 따라 QA 및 프로덕션 서버에서 동일한 솔루션 패키지를 사용할 수있는 유일한 시나리오라고 나와 있습니다.

다른 답변에서 언급 한 바와 같이
5

다른 이슈가 필요한 경우에는 maven으로 이동하십시오. 인공물이 빌드 된 후 사용자가 스프링 프로파일을 구성한 후에 구성 할 수있는 것은 실제 구성 일뿐입니다.

0

귀하의 요구 사항에 달려 있다고 생각합니다. 환경 (예 : jdbc 드라이버 등)에 따라 다른 종속성이있는 경우 maven을 사용하여이를 정렬하는 것이 좋습니다.

배치 구성에 관한 문제인 경우 스프링을 사용하는 것이 좋습니다.

6

:

  • : 모든 사용자의 작업 방식 : 우리는 지난 몇 년 동안 받는다는 지금은 스프링 3.1 프로파일을 사용하여 내놓았다 무엇

    이에 따라 달라집니다 우리는 maven-release-plugin을 사용하여 릴리즈를 줄였습니다. 이는 모든 maven 프로파일이있는 릴리즈 나 적어도 태그를 다시 만들어야하기 때문에 환경에 문제가 발생합니다.

  • 모든 환경에서 .war 파일을 만들고 스프링을 사용하여 PropertyPlaceholderConfigurer 응용 프로그램을 설정하십시오 (또는 고객에 따라 일부 JNDI 리소스). 이렇게하면 하나의 Maven 릴리스 만 실행될 수 있습니다.
  • 환경이 다른 경우에도 스프링 프로파일이 나타납니다. 예를 들어 모든 환경에서 사용할 수없는 인증 서비스입니다. 여기에 우리는 그 서비스를 스터프하여 스프링 프로파일에 넣습니다. 우리는 어쨌든 우리가 사용하는 PropertyPlaceholderConfigurer에 의해 읽혀지는 특성에서 스프링 프로파일을 활성화합니다.

멋진 자습서는 작업을 수행하는 방법에 주위가 :

우리는 일반적으로 단지에 대해 서로 다른 부분으로 빌드를 분할 받는다는 프로파일을 사용 개발자 및 지속적인 통합 빌드를 제공합니다. .war 파일에 대해서는 더 이상 대상 환경에 실제로 사용하지 않습니다. 우리는 여전히 자동화 된 데이터베이스 배치를 위해 maven 프로파일을 사용하는데, 웹 애플리케이션 (데이터 양, 테스트 데이터 등)과 비교하여 차이가 있지만 zip 등으로 제공되지는 않습니다.

확실히 다른 방법이 있습니다. 나는 그 이야기의 끝을 생각하지 않는다.

그러나 그것은 도움이 될지도 모른다.

2

어떤 maven 프로필이 활성화되었는지에 따라 시스템 속성을 설정하기 위해 maven-plugin 속성을 사용했습니다. 그런 다음 봄에 시스템 속성에 따라 원하는 프로필을 프로그래밍 방식으로 활성화했습니다.

String activeProfile = System.getProperty ("myapp.profile"); I 직접 프로파일 (받는다는/스프링)의 2 종류를 연결할 때 원했던

appContext.getEnvironment(). setActiveProfiles (....)

또한

, I는 spring.profiles.active 속성을 설정했다 메이븐 플러그인을 통해.

실천 사항이 설계에서 잘못되었을 수도 있지만 문제가 해결되었습니다.

+1

정확히 내가 뭘 찾고 있었습니까, 고맙습니다! – Vinicius