说明:
在实际项目中有时候需要用到很多的配置文件,而这些配置文件我们又想按功能分文件加载。
第一步
我们需要在Spring的配置文件中加入一段配置,配置如下
<bean id="propertyBean" class="com.funo.util.WcityProperty"> <property name="locations"> <list> <value>/WEB-INF/config/wcity-*.properties</value> </list> </property> </bean>
以上配置中我们需要建立一个类com.funo.util.WcityProperty 这个类继承了Spring读取资源文件的PropertyPlaceholderConfigurer类,该类可以帮你自动加载配置文件到全局资源文件中。当然<value>/WEB-INF/config/wcity-*.properties</value>部分你也可以读取外部的文件如:<value>file:c:/wcity-*.properties</value> 还可以配置他的编码,不过我建议使用全局编码。
第二步
我们需要开始写com.funo.util.WcityProperty这个类
import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Properties; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer; /** * 采用Spring的加载属性信息 在应用中获取 * * @author zhys513 * */ public class WcityProperty extends PropertyPlaceholderConfigurer { private Map<String, String> resolvedProps;// 将属性保存起来 @SuppressWarnings("unchecked") @Override protected void processProperties(ConfigurableListableBeanFactory beanFactoryToProcess, Properties props) throws BeansException { super.processProperties(beanFactoryToProcess, props); resolvedProps = new HashMap<String, String>(); for (Object key : props.keySet()) { String keyStr = key.toString(); resolvedProps.put(keyStr, parseStringValue(props.getProperty(keyStr), props, new HashSet())); } } public Map<String, String> getResolvedProps() { return resolvedProps; } public void setResolvedProps(Map<String, String> resolvedProps) { this.resolvedProps = resolvedProps; } }
这个类其实只是做了一个转换,到这里,直接从Spring的上下文已经可以取到这个propertyBean,但是为了更方便使用我们需要把Spring加载进来的资源文件读取到一个静态的常量工具类中,代码如下:
import java.util.HashMap; import java.util.Map; /** * 表常量类 * zhys513 */ public class WcityConstant { @SuppressWarnings("unchecked") private static HashMap properties; @SuppressWarnings("unchecked") public static void setProperties(Map<String, String> maps) { WcityConstant.properties = (HashMap) maps; } /** * 通过key,查找property中key的内容 * * @param key * property的key * @return 返回对应的value */ public static String getProValue(String key) { String returnValue = (String)properties.get(key); if(returnValue == null || "".equals(returnValue)) returnValue = ""; return returnValue.trim(); } }
到这里这个常量类还不能使用。我们还需要把这个常量累和资源文件建立一个关系。想到的方法是启动的时候直接加载,如果有需要每几分钟就加载一次的童鞋可以另外配置。这里就不多说了。以下为监听器代码:
import java.util.Map; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; public class WcityServletContextListener implements ServletContextListener { @SuppressWarnings("unused") private static final Log log = LogFactory.getLog(WcityServletContextListener.class); public void contextInitialized(ServletContextEvent event) { WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(event.getServletContext()); WcityProperty propertyBean = (WcityProperty) wac.getBean("propertyBean"); Map<String, String> maps = propertyBean.getResolvedProps(); WcityConstant.setProperties(maps); } public void contextDestroyed(ServletContextEvent event) { } }
既然我们使用到了监听器,那就需要配置下监听器,WEB.xml监听器的配置如下:
<listener> <listener-class>com.funo.util.WcityServletContextListener</listener-class></listener>
资源文件里面我就不多说了。大家都懂。如果资源文件里面需要放中文字,请设置编码。资源文件:
# 平台验证登录开关 0 0FF 1ON PORTAL_CHECK_LOGIN_STATUS=0
具体使用如下:
WcityConstant.getProValue("PORTAL_CHECK_LOGIN_STATUS")
直到这里,可以由Spring模糊加载资源文件并在类中直接使用。
相关推荐
在本文中,我们讨论了三种解决SpringMVC拦截器拦截静态资源文件的方法,并对这些方法的优劣进行了分析。 方案一是在拦截器中排除静态资源路径。在SpringMVC的配置文件中(通常是spring-mvc.xml),可以通过配置元素...
通过这些资源,学习者可以了解Spring Boot如何配置并处理静态资源,例如设置`application.properties`或`application.yml`中的`spring.mvc.static-path-pattern`,以定义静态资源的路径。此外,学习者还可以学习如何...
4. **资源的有效利用**:通过静态实例化,可以在应用启动时一次性加载所有必需的资源,避免了多次加载带来的性能开销。 #### 四、总结 静态实例化是Spring框架中的一个重要特性,它可以帮助开发者更好地管理Bean...
我们在项目中需要使用一些静态资源文件,例如城市信息文件 countries.xml,在项目启动后读取其中的数据并初始化写进数据库中。这些静态资源文件通常存储在 src/main/resources 目录下。 实现 我们可以使用 Spring ...
当我们尝试在页面中引用静态资源时,如CSS文件,如果Spring Security没有正确配置,可能会遇到类似以下的错误: ``` Refused to apply style from 'http://localhost:8080/login' because its MIME type ('text/...
Java页面静态化是一种提高Web应用性能的技术,它通过将动态生成的HTML页面转换为静态HTML文件,从而减少了服务器处理请求的负担,加快了用户访问速度...在实际项目中,需要根据需求和资源选择合适的静态化策略和技术。
但是,有一个小问题没有解决,就是如果我的资源文件变了,比如css文件有修改,当我服务端发布之后,用户这边还是会存在缓存。最好的效果时当文件有改变时或者说当服务端的程序重启之后,用户的请求需要下载服务端的...
本篇文章将深入探讨Java如何进行静态文件处理,并以"通用静态页面生成系统(Engineer) v.1"为例进行讲解。 首先,让我们了解静态文件处理的基本概念。在Web服务器上,静态文件服务主要是指读取存储在服务器上的文件...
在Spring Boot中,这个过程被自动化,使得开发者无需编写大量代码即可管理静态资源。在本文中,我们将深入探讨Spring Boot 2.6.0版本中的静态资源配置原理。 首先,Spring Boot的自动配置机制是通过`@Configuration...
为了提高性能,Spring MVC允许你在部署时将静态资源打包在WAR文件中,而不是放在类路径下。此外,使用CDN(内容分发网络)可以进一步提高静态资源的加载速度,特别是对于全球范围内的用户。 ### 8. 资源版本控制 ...
本文将详细介绍如何在Spring MVC中配置和使用静态资源访问,并解释何时以及为何需要这样做。 #### 二、为什么需要处理静态资源 在Spring MVC应用中,通常会遇到以下几种情况: 1. **提高应用性能**:正确地配置...
标题“02_用户模块和加入样式和spring对静态文件的放行”涉及到的是Web开发中的关键概念,尤其是关于Spring框架处理用户模块、样式表(CSS)以及静态资源的访问控制。这一主题主要涵盖以下几个核心知识点: 1. **...
在SpringBoot应用中,加载静态资源是开发过程中常见的任务,涉及到网页、图片、CSS样式表、JavaScript文件等的处理。SpringBoot提供了简单易用的方法来处理这些资源,使其能够被Web应用程序正常访问。 首先,...
这里提到的“静态资源、Struts2、Hibernate、Spring、js核心jar包”涵盖了Web开发中的几个关键组件。让我们逐一深入探讨它们的重要性及如何在项目中运用。 1. 静态资源: 静态资源主要包括HTML、CSS、JavaScript...
这是因为Tomcat在更新应用时,会重新加载Web应用目录下的文件,而在这个过程中,静态资源文件如JavaScript、CSS、图片等可能会在短暂的时间内不可用,导致用户请求无法正常处理。这个问题对于开发环境尤其明显,因为...
在 SpringBoot 中,静态资源访问可以通过两种方式来实现,一种是将静态资源文件放在 `src/main/webapp` 目录下,另一种是将静态资源文件放在 `classpath` 下,并添加相应的配置项。在实际开发中,我们可以根据项目...
这样,我们就可以成功地加载静态资源文件了。 知识点四: ResourceHandlerRegistry 的使用 ResourceHandlerRegistry 是 Spring Boot 2 版本中用于注册资源处理器的接口。通过使用 ResourceHandlerRegistry,我们...
在Spring Boot应用中,资源文件(resources)是存放应用程序所需的静态内容、模板文件以及配置文件的地方。当项目被打成jar包后,有时可能会遇到下载这些资源文件时返回空或者找不到的情况。这个问题通常与Spring ...
Spring Boot 中的静态资源加载处理方式 在 Spring Boot 框架中,静态资源的加载处理方式是一个非常重要的方面。静态资源是指不需要服务器端渲染的资源,如 HTML、CSS、JavaScript、图片等。Spring Boot 提供了多种...
这将使Spring Boot除了默认的`static`目录外,还会查找名为`static`的目录来加载静态资源。 在整合Bootstrap时,我们需要在`static`目录下创建`css`和`js`子目录,并将Bootstrap的CSS和JS文件引入到HTML页面中,如...