2017-12-21 13 views
0

私は休憩サービスを利用する方法を持っています。このRESTサービスのURLは、私はその元のサービスを所有しているが、私はそのプロジェクトには何も変更したくないorg.springframework.core.env.EnvironmentTomcatのdeployment.properties内のプロパティをJavaメソッドから一時的に置き換える方法はありますか?

@PropertySource("file:${catalina.home}/conf/deployment.properties") 
public class OriginalService{ 
    @Autowired 
    private Environment env; 

    public void originalMethod(){ 
    String endPoint = env.getProperty("rest.url"); 
    . 
    . 
    } 
} 

使用のTomcatのdeployment.propertiesから取られています。私はこのメソッドを別のjavaプロジェクトから呼び出すことを望みますが、上記の行のURLを置き換えて、メソッドが元のサービスの代わりにダミーのサービスを消費するようにします。

両方のプロジェクトが同じTomcatサーバーに配置されています。

私は一時的にJavaメソッドからのTomcatのdeployment.propertiesrest.urlプロパティを置き換えることができます方法はありますか?

答えて

0

元のファイルを更新するのではなく、プロパティをロードしている間に変更することができます。これは、PropertyPlaceHolderConfigurerクラスを次のようにオーバーライドすることによって実行できます。

public class MyPropertyConfigurer extends PropertyPlaceHolderConfigurer{ 
    protected void convertProperties(Properties props){ 
     Enumeration<?> propertyNames = props.propertyNames(); 
     while(propertyNames.hasMoreElements()){ 
      String propName = (String)propertyNames.nextElement(); 
      String propValue = (String)props.getProperty(propName); 
      if(propName.indexOf("rest.url") != -1){ 
      setPropertyValue(props,propName,propValue); 
      } 
     } 
    } 

    private void setPropertyValue(Properties props,String propName,String propValue){ 
     String newRestUrl = "<your local url>"; 
     props.setProperty(propName,newRestUrl); 
    } 
} 

MyPropertyConfigurerは他のBeanと同様に登録できます。私はこれがはるかにクリーンな方法だと思う。

関連する問題