Springとredisの統合の概要


1、spring中context:property-placeholder/要素
1.一部のパラメータはある段階で定数である
例えば、a、開発段階でデータベースに接続する際のurl、username、password、driverClassなど
b、分散アプリケーションにおけるクライアント側がserver側にアクセスするためのserverアドレス、port、serviceなど
c、プロファイルの場所
2.これらのパラメータは、異なる段階の間で変更されることが多い
たとえば、プロジェクト開発フェーズと配信フェーズでは、データベースの接続情報が異なることが多く、分散アプリケーションも同様です.
期待:1つのフェーズ内でパラメータの値を頻繁に書く必要がなく、異なるフェーズ間でパラメータ構成情報を容易に切り替えることができるソリューションがありますか?
解決:spring 3ではcontext:property-placeholder/要素を簡単に使用できます.
springのプロファイルに「classpath:jdbc.properties」/>を追加するだけでいいです.ここでlocation値はパラメータプロファイルの場所です.パラメータプロファイルは通常srcディレクトリの下に配置されますが、パラメータプロファイルのフォーマットはjavaで一般的なパラメータプロファイルと同じです.つまり、キー値のペアの形式です.たとえば、
#jdbc構成
test.jdbc.driverClassName=com.mysql.jdbc.Drivertest.jdbc.url=jdbc:mysql://localhost:3306/testtest.jdbc.username=roottest.jdbc.password=root
行内#番号の後ろの部分はコメントです
適用:
1.これにより、springにjdbcデータソースを持つクラスDriverManagerDataSourceなどのspring構成beanのプロパティに値を設定できます.
プロファイルでbeanを定義します.
                2.${}という形式の変数をspringで提供される注釈に使用して、注釈の属性に値を提供することもできます.
---------------------------------------------------------  
アプリケーションパラメータの構成の外在化
エンタープライズアプリケーションの開発中、またはエンタープライズアプリケーションを本番環境に導入する際に、LDAP接続、RDBMS JDBC接続など、アプリケーションに依存する多くのパラメータ情報を調整する必要があることが多い.このような情報の外在化管理は特に重要である.PropertyPlaceholderConfigurerオブジェクトとPropertyOverrideConfigurerオブジェクトは、アプリケーションパラメータの外在的な構成の責任を負います.
要素
P r o p e r t y PlaceholderConfigurerは、BeanFactoryPostProcessorインタフェースを実現し、のプロパティ値を外部管理できます.開発者は、関連するプロパティを管理するために個別のプロパティファイルを提供することができます.例えば、userinfoから抜粋する属性ファイルが存在する.properties. db.username=scott db.password=tiger
以下の内容はpropertyplaceholderconfigurer.から抜粋する.xml.通常、userInfoの定義では${db.username}、${db.password}などの類似情報は表示されません.ここでP r e t y P e r y P e r c e holderConfigurerを使用してusernameとpassword属性の値を管理します.DI容器がuserInfoをインスタンス化する前に、PropertyPlaceholderConfigurerはuserInfoのメタデータ情報(定義)を変更します.${db.username}、db.passwordに対応するtiger値をuserinfo.propertiesのdb.usernameに対応するscott値に置き換えます.最終的に、DIコンテナはuserInfoをインスタンス化すると、${db.username}、${db.password}ではなく、新しい属性値を取得します.などの類似情報が表示されます.
"propertyPlaceholderConfigurer"   
        class="org.springframework.beans.factory.config.  
PropertyPlaceholderConfigurer">  
    "locations">  
          
            userinfo.properties  
          
      
 
 
"userInfo" class="test.UserInfo">  
  "username" value="${db.username}"/>  
  "password" value="${db.password}"/>  
 
PropertyPlaceholderConfigurerDemoのサンプルアプリケーションを実行して分析することで、開発者はPropertyPlaceholderConfigurerを深く理解することができます.Springは、PropertyPlaceholderConfigurerの使用を簡略化するために要素を提供します.以下に構成例を示します.これを有効にすると、開発者はPropertyPlaceholderConfigurerオブジェクトを構成する必要はありません.
"userinfo.properties"/> 
PropertyPlaceholderConfigurerには、${xxx}で定義されたxxxキーが見つからない場合、JVMシステムプロパティ(System.getProperty()と環境変数(System.getenv()にも検索されます.システムプロフェッショナルモードとsearchSystemEnvironmentプロパティを有効にすることで、開発者はこの動作を制御できます.
*****:構成に「Could not resolve placeholder」というエラーが検出された場合、次の解決策に注意してください.
Properitesファイルのパスエラー、スペルエラーを除いて、「Could not resolve placeholder」が発生したのは、複数のPropertyPlaceholderConfigurerまたは複数の理由が使用されている可能性が高い.
 
例えばdaoがありますxmlはdbConnectを読み込む.properties、もう一つdfs.xml読み出しdfsManager.そしてweb.xml統一loadこの2つのxmlファイル
  
        contextConfigLocationparam-name>  
          
                WEB-INF/config/spring/dao.xml,   
                WEB-INF/config/spring/dfs.xml  
        param-value>  
context-param>  
この2つのxmlファイルにそれぞれ
  
  
  
  
  
では、必ず「Could not resolve placeholder」が出ます.
 
1つのSpringファイルでも複数のSpringファイルが統一されたloadでも、直接書くことを覚えておいてください.
  
   
許されない.
 
ソリューション:
(1)Spring 3.0では、次のように書くことができます.

/>  

/>  
どちらもignore-unresolvable=「true」を付けなければならないので注意してください.一つにもう一つを加えなくてもだめです.
 
(2)Spring 2.5では、ignore-unresolvable属性がない場合、P r o p e r t y PlaceholderConfigurerに変更できます.実はignore-unresolvable=「true」/>は次の構成と等価です
「任意」class=「org.springframework.beans.factory.config.P r e tyPlaceholderConfigurer」>    "location" value="xxx.properties" />  
    "ignoreUnresolvablePlaceholders" value="true" />   
  
それだけに、複数のP r e r t y P e r e t y P r a c e holderConfigurerにignoreUnresolvablePlaceholdersを付けない属性を書くのも同様に「Could not resolve placeholder」が出ます.
 
両者は等価ですが、もっと書くのが好きだと思いますが、簡単ですね.Spring 3.0なら、ソリューション(1)を直接使うのは簡単です.Spring 2.5の場合は、PropertyPlaceholderConfigurerに書き換えるのに苦労する必要があります