Spring MVC Web应用主数据存储位置咨询:属性文件或数据库存储至作用域?
嘿,这个问题得结合你的主数据特性和业务需求来选方案,我给你拆解两种常见的做法,还有各自的适用场景:
方案1:属性文件存储(适合静态、不常变更的主数据)
如果像货币代码这类数据,短期内不会频繁新增/修改,而且数量不多,用属性文件是个简单高效的选择:
- 把主数据放在专门的属性文件里,比如
master-data.properties,格式可以是:currency.codes=INR,USD,EUR,GBP - 在Spring中通过
@PropertySource加载这个文件,再封装成一个可复用的Bean:@Component @PropertySource("classpath:master-data.properties") public class MasterDataHolder { @Value("#{'${currency.codes}'.split(',')}") private List<String> currencyCodes; public List<String> getCurrencyCodes() { return Collections.unmodifiableList(currencyCodes); } } - 在JSP页面中,直接通过Spring EL调用这个Bean,配合JSTL和表单Bean的数据做比对,比如:
<c:if test="${not empty formBean.currencyCode && masterDataHolder.currencyCodes.contains(formBean.currencyCode)}"> <span>有效的货币代码</span> </c:if>
方案2:数据库存储+缓存到作用域(适合动态、需维护的主数据)
如果你的主数据需要频繁新增/修改(比如后续要加后台管理界面来维护货币代码),那数据库存储是更合适的选择:
- 先建一张主数据表,比如
currency,包含code、name等字段 - 编写Repository接口获取所有货币代码,比如用Spring Data JPA:
public interface CurrencyRepository extends JpaRepository<Currency, String> { List<String> findAllByCode(); } - 把数据缓存到应用作用域(
Application),避免重复查询数据库:- 可以在启动时通过
@PostConstruct加载:@Component public class ApplicationDataLoader { @Autowired private CurrencyRepository currencyRepo; @Autowired private ServletContext servletContext; @PostConstruct public void loadMasterData() { List<String> currencyCodes = currencyRepo.findAllByCode(); servletContext.setAttribute("currencyCodes", currencyCodes); } } - 如果数据会变更,可以加定时刷新逻辑,或者提供后台接口手动刷新缓存
- 可以在启动时通过
- 在JSP中直接从应用作用域取数据做比对:
<c:if test="${not empty formBean.currencyCode && applicationScope.currencyCodes.contains(formBean.currencyCode)}"> <span>有效的货币代码</span> </c:if>
额外的最佳实践
- 不管用哪种方案,都建议在后端也做验证,比如用Spring的自定义校验注解,避免前端绕过验证直接提交非法数据
- 如果是非常核心的主数据(比如货币代码),可以考虑用Java枚举类来约束,类型更安全:
这样在后端验证时直接调用public enum CurrencyCode { INR, USD, EUR; public static boolean isValid(String code) { try { CurrencyCode.valueOf(code); return true; } catch (IllegalArgumentException e) { return false; } } }CurrencyCode.isValid(formBean.getCurrencyCode())即可。
内容的提问来源于stack exchange,提问作者Swapneel
相关产品推荐
相关产品推荐

