Spring MVC利用读取properties实现程序配置参数完整事例

Spring MVC利用读取properties实现程序配置参数完整事例

3543发表于2016-11-11

在.net平台下web.config或app.config可以写一些配置信息这样就把一些参数从程序中解耦。而在java平台下没有这样的文件,研究了一下在java里面有properties文件。今天我就来说说我是怎么在Spring mvc中利用读取properties实现程序配置参数。

这样的好处是发布程序之后要改参数不用重要编译打包,直接改properties里面的结点信息就可以了。

为了简化我们暂时在sysConfig.properties写一个配置

sysConfig.properties内容:

resHostPrefix=http://md127.tunnel.qydev.com/lanhusoft/


sysConfig.properties文件放在项目的resources文件夹下。

一、首先,启用Spring读取文件properties

1、在Spring的配置文件头部相应的xmlns和schemaLocation

xmlns:util="http://www.springframework.org/schema/util"

http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd


如下图:


最后,加入以下配置结点:


<util:properties id="propertiesReader" location="classpath:sysConfig.properties" />


二、新建一下对应properties读取类组件

package com.lanhusoft.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class SysConfig {

	private String resHostPrefix;
		
	public String getResHostPrefix() {
		return resHostPrefix;
	}

	@Value("#{propertiesReader[resHostPrefix]}")
	public void setResHostPrefix(String resHostPrefix) {
		this.resHostPrefix = resHostPrefix;
	}
	
}


使用注解@Component声明为组件到时可以使用Spring IoC的注入。

三、使用这个properties读取类组件

package com.lanhusoft.controller;

import com.lanhusoft.bean.RespBanner;
import com.lanhusoft.config.SysConfig;
import com.lanhusoft.service.AppBannerService;
import cn.microsilver.utils.AppResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
@RequestMapping("/app/banner")
public class AppBannerController {
    // 注入服务
    @Autowired
    private AppBannerService service;

    @Autowired
    private SysConfig sysConfig;

    @RequestMapping("/list")
	@ResponseBody
	public AppResult<List<RespBanner>> list() {

        AppResult<List<RespBanner>> result = new AppResult<List<RespBanner>>();

	List<RespBanner> data = service.GetList();
        for(RespBanner item : data){
            String imgUrl=item.getImgUrl();
            if(!imgUrl.startsWith("http://")) {
                item.setImgUrl(sysConfig.getResHostPrefix() + item.getImgUrl());
            }
        }
        result.setData(data);

	return result;
	}

}

通过@Autowired注入之前新建的类SysConfig。就可以通过变量来读取相应的属性了。


小编蓝狐