プロジェクトのグローバル構成(spring propertiesプロファイルを読み込む)

4700 ワード

今日はプロジェクトをする時、プロジェクトのグローバルプロファイルconfig.propertiesを使いました。この記録の下でspringのこのような読取propertiesファイルの方式を使って、後で調べるのが便利です。
1.属性ファイルのconfog.propertiesを変更する
#path of upload
pfo.fileupload.server.path=/aaa/bbb
(1)【.properties】ファイルの内容はすべてキーペアの形式であり、プロジェクトの中にデータベース接続情報のような常に修正される値を保存して、配置ファイルを作成すればいいです。配置が変更される時、ファイルだけを修正してソースコードを修正しないようにします。(2)上の配置はプロジェクト読取ファイルの経路です。例えば、私のドメイン名はaaaです。ファイルパスはaaa/file/filepathです。
2.springのプロファイルを修正するタグの下にbeanを追加します。コードは以下の通りです。

<bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="location" value="classpath:config.properties" />
bean>
(1)【classipath:】この構成は、指定された名前をウェブコンテナにロードするように指示するプロファイルを示す。摘録:classipathとclassipath*の違い(2)構成ではIDが(WEB-INF/classes WEB-INF/lib)と定義されており、idは後述する。
3.グローバルプロファイルを読み出すクラスconfigPropertiesを変更する(新規作成可能でない場合)
私のプロジェクトでは注解に基づいていますので、このクラスはspring注解スキャンの設定を要求します。

<context:component-scan base-package="xxx.yyy" />
OperatParamのコード
/**
 * 
* @ClassName: OperatParam
* @Description:      key value[config.properties]
 */
@Component
public class OperatParam {
    private Map configMap;

    @Resource
    private Properties configProperties;//   spring  bean,  config.properties  

    @PostConstruct
    private void init() {
        this.configMap = new HashMap();
        Set> keys = this.configProperties.keySet();
        for (Iterator> localIterator = keys.iterator(); localIterator.hasNext();) {
            Object key = localIterator.next();
            this.configMap.put(key.toString(), this.configProperties.getProperty(key.toString()));
        }
    }
    public String get(String key) {
        return (String) this.configMap.get(key);
    }
}
@Component:普通のクラスをspring容器に注入すると@Controller、@Service、@repositoryと区別できます。【@Resource】:名前による依存注入が実現され、ここのOperatParam属性は第1のポイントに配置されたidである。@PostConstruct:メソッドにこの注釈を加えると、プロジェクトが起動した時にこの方法を実行し、spring容器の初期化時にこの方法を実行すると理解できる。【init()】この方法を呼び出してプロファイルの内容を読み取るのはmapにあります。【get】特定の属性値を取得するために、プロジェクト内でこの方法を呼び出します。
4.使用例
ファイルアップロード時にアップロードパスを設定します。コードは以下の通りです
【FileUpload.java】
@Resource
private OperatParam operatParam;//      OperatParam  

if(isLocal) {
     dir = System.getProperty("webapp.root")+"upload";
} else {
    //dir = "/aaa/bbb";
    dir = operatParam.get("pfo.fileupload.server.path");//  get(String key)      
}
以上は私のプロジェクトの中で使う方式です。もし正しくないところがあれば、或いは最適化できるところがあれば、ご指摘ください。