`
zhys513
  • 浏览: 26606 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

Spring加载资源文件并静态化

    博客分类:
  • J2ee
阅读更多

说明:

      在实际项目中有时候需要用到很多的配置文件,而这些配置文件我们又想按功能分文件加载。

 

第一步

      我们需要在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模糊加载资源文件并在类中直接使用。

 

 来源:优特产     个人博客:优特品

分享到:
评论
1 楼 nihao7010 2012-06-18  

相关推荐

    防止SpringMVC拦截器拦截js等静态资源文件的解决方法

    在本文中,我们讨论了三种解决SpringMVC拦截器拦截静态资源文件的方法,并对这些方法的优劣进行了分析。 方案一是在拦截器中排除静态资源路径。在SpringMVC的配置文件中(通常是spring-mvc.xml),可以通过配置元素...

    狂神springboot静态资源.zip

    通过这些资源,学习者可以了解Spring Boot如何配置并处理静态资源,例如设置`application.properties`或`application.yml`中的`spring.mvc.static-path-pattern`,以定义静态资源的路径。此外,学习者还可以学习如何...

    spring 静态实例化

    4. **资源的有效利用**:通过静态实例化,可以在应用启动时一次性加载所有必需的资源,避免了多次加载带来的性能开销。 #### 四、总结 静态实例化是Spring框架中的一个重要特性,它可以帮助开发者更好地管理Bean...

    Spring Boot 读取静态资源文件的方法

    我们在项目中需要使用一些静态资源文件,例如城市信息文件 countries.xml,在项目启动后读取其中的数据并初始化写进数据库中。这些静态资源文件通常存储在 src/main/resources 目录下。 实现 我们可以使用 Spring ...

    浅谈Spring Security 对于静态资源的拦截与放行

    当我们尝试在页面中引用静态资源时,如CSS文件,如果Spring Security没有正确配置,可能会遇到类似以下的错误: ``` Refused to apply style from 'http://localhost:8080/login' because its MIME type ('text/...

    有关Java页面静态化

    Java页面静态化是一种提高Web应用性能的技术,它通过将动态生成的HTML页面转换为静态HTML文件,从而减少了服务器处理请求的负担,加快了用户访问速度...在实际项目中,需要根据需求和资源选择合适的静态化策略和技术。

    Spring Boot Web 静态文件缓存处理的方法

    但是,有一个小问题没有解决,就是如果我的资源文件变了,比如css文件有修改,当我服务端发布之后,用户这边还是会存在缓存。最好的效果时当文件有改变时或者说当服务端的程序重启之后,用户的请求需要下载服务端的...

    java静态文件处理

    本篇文章将深入探讨Java如何进行静态文件处理,并以"通用静态页面生成系统(Engineer) v.1"为例进行讲解。 首先,让我们了解静态文件处理的基本概念。在Web服务器上,静态文件服务主要是指读取存储在服务器上的文件...

    Spring静态资源配置原理 2.6.0(csdn)————程序.pdf

    在Spring Boot中,这个过程被自动化,使得开发者无需编写大量代码即可管理静态资源。在本文中,我们将深入探讨Spring Boot 2.6.0版本中的静态资源配置原理。 首先,Spring Boot的自动配置机制是通过`@Configuration...

    SpringMVC访问静态资源

    为了提高性能,Spring MVC允许你在部署时将静态资源打包在WAR文件中,而不是放在类路径下。此外,使用CDN(内容分发网络)可以进一步提高静态资源的加载速度,特别是对于全球范围内的用户。 ### 8. 资源版本控制 ...

    springmvc静态资源访问

    本文将详细介绍如何在Spring MVC中配置和使用静态资源访问,并解释何时以及为何需要这样做。 #### 二、为什么需要处理静态资源 在Spring MVC应用中,通常会遇到以下几种情况: 1. **提高应用性能**:正确地配置...

    02_用户模块和加入样式和spring对静态文件的放行

    标题“02_用户模块和加入样式和spring对静态文件的放行”涉及到的是Web开发中的关键概念,尤其是关于Spring框架处理用户模块、样式表(CSS)以及静态资源的访问控制。这一主题主要涵盖以下几个核心知识点: 1. **...

    SpringBoot加载静态资源的方式

    在SpringBoot应用中,加载静态资源是开发过程中常见的任务,涉及到网页、图片、CSS样式表、JavaScript文件等的处理。SpringBoot提供了简单易用的方法来处理这些资源,使其能够被Web应用程序正常访问。 首先,...

    静态资源、struts2、Hibernate、Spring、js核心jar包

    这里提到的“静态资源、Struts2、Hibernate、Spring、js核心jar包”涵盖了Web开发中的几个关键组件。让我们逐一深入探讨它们的重要性及如何在项目中运用。 1. 静态资源: 静态资源主要包括HTML、CSS、JavaScript...

    Spring Boot项目打成jar包后,下载resources目录下文件为空的demo

    在Spring Boot应用中,资源文件(resources)是存放应用程序所需的静态内容、模板文件以及配置文件的地方。当项目被打成jar包后,有时可能会遇到下载这些资源文件时返回空或者找不到的情况。这个问题通常与Spring ...

    tomcat下webapps防止刷新报错的静态文件

    这是因为Tomcat在更新应用时,会重新加载Web应用目录下的文件,而在这个过程中,静态资源文件如JavaScript、CSS、图片等可能会在短暂的时间内不可用,导致用户请求无法正常处理。这个问题对于开发环境尤其明显,因为...

    在SpringBoot中静态资源访问方法

    在 SpringBoot 中,静态资源访问可以通过两种方式来实现,一种是将静态资源文件放在 `src/main/webapp` 目录下,另一种是将静态资源文件放在 `classpath` 下,并添加相应的配置项。在实际开发中,我们可以根据项目...

    springboot2版本无法加载静态资源问题解决

    这样,我们就可以成功地加载静态资源文件了。 知识点四: ResourceHandlerRegistry 的使用 ResourceHandlerRegistry 是 Spring Boot 2 版本中用于注册资源处理器的接口。通过使用 ResourceHandlerRegistry,我们...

    spring boot中的静态资源加载处理方式

    Spring Boot 中的静态资源加载处理方式 在 Spring Boot 框架中,静态资源的加载处理方式是一个非常重要的方面。静态资源是指不需要服务器端渲染的资源,如 HTML、CSS、JavaScript、图片等。Spring Boot 提供了多种...

    springbootWeb静态资源

    这将使Spring Boot除了默认的`static`目录外,还会查找名为`static`的目录来加载静态资源。 在整合Bootstrap时,我们需要在`static`目录下创建`css`和`js`子目录,并将Bootstrap的CSS和JS文件引入到HTML页面中,如...

Global site tag (gtag.js) - Google Analytics