2016-06-15 8 views
1

ファイル私はPropertyPlaceholderConfigurerによって、古典的な方法で管理されたプロパティファイルがあります。Javaの春PropertyPlaceholderConfigurer、どのような特性で空白/タブをトリミングする

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location" value="classpath:mail.properties" /> 
</bean> 

<bean id="jobDataPathUtils" class="com.hello.test.DataPathUtils"> 
    <property name="host" value="${smtp.host}" /> 
    <property name="port" value="${smtp.port}" /> 
    <property name="username" value="${smtp.user}" /> 
    <property name="password" value="${smtp.pass}" /> 
</bean> 

を私が持っている問題.propertiesファイルの文字列のプロパティ、およそ30エントリ、およびプロパティ値の最後に誰かが表を追加した場合、アプリケーションはこれらのプロパティを正しく使用できません。私はそれを使用する前に各プロパティの値をトリムしたいと思います。 DataPathUtilsクラスの各プロパティで.trim()を使用して手動で行うことはできますが、PropertyPlaceholderConfigurerのいずれかでこれを行う他の方法があるかどうか疑問に思っています。

は、私は末尾のスペースをしているあなたのデータが入力されている方法は、対処する必要があると思います

+0

それが可能だ場合、私は知らないが、あなたはこれを行うたいよろしいですか?すべてのエントリを削除する必要がありますか?いくつかのプロバイダは、ユーザーとパスワードのスペースを許可します。私は、DataPathUtils内のトリムが良いアイデアだと思います。 –

+0

テーブル作成の意味は?あなたは例を挙げることができます – Mudassar

+0

@Mudassar、タブ文字です、キーボードのTabキーをタップすると、 –

答えて

1
  • 、事前にありがとうございます。
  • ソースを制御できない場合は、PropertyPlaceholderConfigurerを拡張し、processProperties()をトリムする必要があります。 このアプローチを使用すると、データベースからデータを取得したり、特定のキー値のペアを変更したり、キャッシュしたりするなど、将来的に要件を変更できます。

     public class CustomPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer { 
          /** 
         * Map that hold all the properties. 
          */ 
         private Map<String, String> propertiesMap; 
         /** 
         * Iterate through all the Propery keys and build a Map, resolve all the nested values before beuilding the map. 
         */ 
         @Override 
         protected void processProperties(ConfigurableListableBeanFactory beanFactory, Properties props) throws BeansException { 
          super.processProperties(beanFactory, props); 
    
          propertiesMap = new HashMap<String, String>(); 
          for (Object key : props.keySet()) { 
           String keyStr = key.toString(); 
           String valueStr = prop.getProperty(keyStr); 
           propertiesMap.put(keyStr.trim(), valueStr.trim()); 
          } 
         } 
    
    
         public String getProperty(String name) { 
          return propertiesMap.get(name).toString(); 
         } 
    
+0

ありがとう、私はカスタムPropertyPlaceholderConfigurerを実装しようとします! –

+0

PropertyPlaceholderConfigurerクラスのresolvePlaceholder(Stringプレースホルダ、Properties props、int systemPropertiesMode)関数をオーバーライドしました。それが私の問題を解決しました。しかし、私は最初にプロパティファイルの初期化方法を変更する方が良いと思いますが、残念ながらそれはクライアントの仕事の一部であり、私はそのファイルにアクセスできません。 –

関連する問題