2014-09-23 2 views
0

Apache Maven과 Spring을 사용하고 있습니다. src/main/resources 폴더에는 속성 파일이 있습니다. 이러한 속성 값은 다른 값을 가질 수 있습니다.Java 메인 클래스 Apache Maven

PropertyPlaceholderConfigurer를 사용하고 있습니다.

@Configuration 
public class ResourceConfig { 

@Bean 
public PropertyPlaceholderConfigurer properties() { 
    PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer(); 
    ppc.setIgnoreResourceNotFound(true); 
    ppc.setLocations(new ClassPathResource[] {new ClassPathResource("propertiesFile"), new ClassPathResource("myapp.properties")}); 
    return ppc; 
} 
} 

나는 런타임에이 값을 대체 :

@Configuration 
public class DataSourceConfig { 

@Value("${jdbc.url}") 
private String jdbcUrlDefault; 
     // there are more @Value 
} 

이 그냥 샘플입니다. 주된 방법이 있습니다 :

public static void main(String[] args) { 
    // accept a properties file and override those values defined in DataSourceConfig class 
    ApplicationContext application = new AnnotationConfigApplicationContext("packaageThatContainsConfiguration"); 
    DataSourceConfig dataSourceConfig = (DataSourceConfig) application.getBean("dataSourceConfig"); 
    System.out.println(dataSourceConfig.getJdbcUrlDefault()); 
} 


<build> 
<plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <version>2.4</version> 
     <configuration> 
      <descriptorRefs> 
       <descriptorRef>jar-with-dependencies</descriptorRef> 
      </descriptorRefs> 
      <archive> 
       <manifest> 
         <mainClass>com.Main</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
    <finalName>server-app</finalName> 
</build> 

Apache Maven이 응용 프로그램을 빌드 할 때 등록 정보 파일은 클래스 경로에 있습니다. 제공된 특성 파일로 특성 값을 대체하려고합니다.

주 프로그램을 통해 속성 파일을 받아들이려고하므로 Spring 측에서 PropertyPlaceholderConfigurer를 시작합니다.

나는 원하는 값을 포함하는 특성 파일을 가지고 있습니다.

내가 명령 프롬프트에서 다음 명령을 실행하면 :

java -jar server-app-jar-with-dependencies.jar -D myapp.properties "C:\Users\user\Desktop\myapp.properties" 

그것은 SRC/메인/자원/myapp.properties에 배치됩니다 원래 값을 출력은

나는를 인쇄 할 값은 Desktop myapp.properties에 있습니다.

내가 뭘 잘못하고 있니?

+0

가고, http://stackoverflow.com/questions/4097614/spring-configuration-with-system-property 이 나는이 대답을 생각하지 않는다 – Ernie

+0

귀하의 질문에 대답해야한다 내 질문. 나는 아직도 내가 잘못하고있는 것을 이해하지 못한다. 몇 가지 예를 제공해 주시겠습니까? – user

+0

Maven을 어린이의 손이 닿지 않는 곳에 두십시오! 그것은 독성 일 수있다! – UDPLover

답변

0

현재 당신은

속성이있는 경우 변경할 수있는 무엇
@Bean 
    public PropertyPlaceholderConfigurer properties() { 
     PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer(); 
     ppc.setIgnoreResourceNotFound(true); 
     ppc.setLocations(new ClassPathResource[] {new ClassPathResource("propertiesFile"), new ClassPathResource("myapp.properties")}); 
     return ppc; 
    } 

이 매개 변수는 '위치'라고 동의가 당신은 그 위치가, 인수가있는 경우

if(location) { 
     Resource file = new FileSystemResource(location); 
     ppc.setLocations(file); 
    } else { 
     ppc.setLocations(new ClassPathResource[] {new ClassPathResource("propertiesFile"), new ClassPathResource("myapp.properties")}); 
    } 

그 다음입니다 수행 할 수있는 작업 그렇지 않으면 classpath에 기본값을 사용합니다.

---- relivant에 대한 링크 추가 ----- Dealing with command line arguments and Spring 여기

+0

감사합니다. properties() 메소드는 속성 (위치)에서 어떻게 받아 들일 수 있습니까? 나는이 접근법을 이해하지만 이것이 어떻게 주입되는지는 알지 못한다. – user

+0

애플리케이션이 메인 메소드에서 실행 된 후에 특성 빈 정의를 작성합니다. 실제로는 아니지만 아이디어를 얻습니다. 아픈 정보를 빠르게 찾을 수있는 링크 – Ernie

관련 문제