1. 程式人生 > >web專案設定全域性變數

web專案設定全域性變數

在某些場景中,運營人員需要自定義某些值來控制一些業務。而那些值一般活動於整個專案。

比如動態設定過濾值去過濾評分低的內容,

動態設定是否載入某平臺的資源,

動態設定等等

下面內容是在公司專案中遇到,總結記錄方便以後查詢和幫助需要的朋友。

第一步:建立一個表:配置表configuration;和資料字典很相似。

DROP TABLE IF EXISTS `configuration`;
CREATE TABLE `configuration` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) COLLATE utf8_bin NOT NULL,
  `value` varchar(100) COLLATE utf8_bin NOT NULL,
  `note` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
INSERT INTO `configuration` VALUES ('1', 'defaultNum', '50000', '運營人員可自定義的值');

第二步:建立實體類

package net.wecheer.entity;

import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;

import cn.weidrive.qc.annotation.QueryField;

@Entity
@Table(name = "configuration")
public class Configuration extends IdEntity {

	private String name; // 配置名
	private String value; // 配置值
	private String note; // 註釋說明

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}

	public String getNote() {
		return note;
	}

	public void setNote(String note) {
		this.note = note;
	}

	@Transient
	public int getIntValue(int defaultValue) {
		try {
			int iValue = Integer.parseInt(value);
			return iValue;
		} catch (NumberFormatException e) {
			return defaultValue;
		}
	}

	@Transient
	public float getFloatValue(float defaultValue) {
		try {
			float fValue = Float.parseFloat(value);
			return fValue;
		} catch (NumberFormatException e) {
			return defaultValue;
		}
	}

}

因為value在表中對應型別是varchat;然而實際業務中還可能是整形或者是浮點型。

第三步:Dao層,使用的是springMVC框架

package net.wecheer.repository;

import net.wecheer.entity.Configuration;

import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;

public interface ConfigurationDao extends
		PagingAndSortingRepository<Configuration, Long>,
		JpaSpecificationExecutor<Configuration> {

	Configuration findByName(String name);
}

按照springMVC的規範,findByName便可以做到通過name找到對應的Configuration

第四步:Service層

// 以下三個函式用於方便取得配置值的函式,分別對應字串、整形和浮點型
	public String getConfigValueByName(String name, String defaultValue) {
		Configuration config = configDao.findByName(name);
		if (null == config)
			return defaultValue;
		else
			return config.getValue();
	}

	public int getConfigValueByName(String name, int defaultValue) {
		Configuration config = configDao.findByName(name);
		if (null == config)
			return defaultValue;
		else {
			try {
				int iValue = Integer.parseInt(config.getValue());
				return iValue;
			} catch (NumberFormatException e) {
				return defaultValue;
			}
		}
	}

	public float getConfigValueByName(String name, float defaultValue) {
		Configuration config = configDao.findByName(name);
		if (null == config)
			return defaultValue;
		else {
			try {
				float fValue = Float.parseFloat(config.getValue());
				return fValue;
			} catch (NumberFormatException e) {
				return defaultValue;
			}
		}
	}
如果你想要long型和double型可以自行新增,注意這裡的一個技巧,預設的時候有一個預設值。

第五步:在web專案中全域性呼叫

@Autowired
private ConfigurationService configService;
int defaultNum= configService.getConfigValueByName("defaultNum", 50000);
 轉載請註明來源