Java web系统启动时,静态初始化配置文件

    

    该工具类可以根据正则规则,去遍历查找配置文件,并静态初始化,可以在任意地方用PropUtil.get(key)方法方便的获取配置文件里的值。


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.Properties;
import java.util.regex.Pattern;

/**
 * 配置文件工具类
 *
 * @author Luo Yong
 * @date 2014-03-12
 */
public final class PropUtil {

    private static final Logger LOG = LoggerFactory.getLogger(PropUtil.class.getName());
    /** FIXME 找扩展名为properties的文件*/
    private static final String REGEX_PROPERTIES = "^(.*).properties$";
    /** 查找文件的匹配正则*/
    private static final Pattern PATTERN_PROPERTIES = Pattern.compile(REGEX_PROPERTIES);
    private static Properties properties = new Properties();
    private static ClassLoader classLoader = getDefaultClassLoader();

    static {
        init();
    }

    /**
     * 获取配置文件
     *
     * @param key
     * @return
     */
    public static String get(final String key) {
        return getProperties().getProperty(key);
    }

    /**
     * 获取配置文件,为空时,返回默认值
     *
     * @param key
     * @param defaultValue
     * @return
     */
    public static String get(final String key, final String defaultValue) {
        String value = getProperties().getProperty(key);
        if (value == null || value.trim().isEmpty()) {
            return defaultValue;
        }
        return value;
    }

    private static Properties getProperties() {
        return properties;
    }

    /**
     * 初始化配置文件
     */
    private static void init() {
        // 获取classpath
        String classpath = getClasspath();
        if (classpath != null) {
            // 从classpath的父节点开始查找
            File baseDir = new File(classpath).getParentFile();
            loadDir(baseDir);
        }
    }

    /**
     * 获取classpath
     */
    private static String getClasspath() {
        String classpath = null;
        try {
            classpath = classLoader.getResource("/").getPath();
        } catch (Exception e) {
            try {
                classpath = classLoader.getResource("").getPath();
            } catch (Exception ex) {
                LOG.error(" classpath 初始化失败:", ex);
            }
        }
        return classpath;
    }

    /**
     * copy from org.springframework.util.ClassUtils
     */
    private static ClassLoader getDefaultClassLoader() {
        ClassLoader cl = null;
        try {
            cl = Thread.currentThread().getContextClassLoader();
        } catch (Exception ex) {
            LOG.error(" Thread.currentThread() 获取 ClassLoader 出错:", ex);
        }
        if (cl == null) {
            cl = PropUtil.class.getClassLoader();
            if (cl == null) {
                try {
                    cl = ClassLoader.getSystemClassLoader();
                } catch (Exception ex) {
                    LOG.error(" ClassLoader.getSystemClassLoader() 获取 ClassLoader 出错:", ex);
                }
            }
        }
        return cl;
    }

    /**
     * 递归查找配置文件<br/>
     *
     * @param baseDir 查找的文件夹
     */
	private static void loadDir(File baseDir) {
		// 判断目录是否存在
		if (!baseDir.exists() || !baseDir.isDirectory()) {
			return;
		}
		String tempPath;
		File[] files = baseDir.listFiles();
		for (File file : files) {
			if (file.isFile()) {
				tempPath = file.getAbsolutePath();
				if (PATTERN_PROPERTIES.matcher(tempPath).matches()) {
					// 匹配成功,将文件路径添加到结果集
					load(file);
				}
			} else if (file.isDirectory()) {
				loadDir(file);
			}
		}
	}

    /**
     * 读取配置文件
     *
     * @param file
     */
    private static void load(File file) {
        try (InputStream is = new FileInputStream(file);
             InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8)) {
            getProperties().load(isr);
        } catch (IOException e) {
            throw new RuntimeException("读取配置文件" + file.getName() + "出现异常", e);
        }
    }

    /**
     * 通过配置文件路径和名称,热加载Properties
     */
    public static void load(String propsName) {
        try (InputStream is = classLoader.getResourceAsStream(propsName)) {
            getProperties().load(is);
        } catch (IOException e) {
            throw new RuntimeException("读取配置文件" + propsName + "出现异常", e);
        }
    }

    private PropUtil() {
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java Web项目源码整套包括几个主要部分。首先,它包含Java编程语言编写的后端代码,通常是使用Java Servlet和JavaServer Pages(JSP)技术开发的。这些后端代码用于处理Web请求和响应,从数据库中检索数据并生成动态的HTML页面。 其次,Java Web项目源码也包括端界面的HTML、CSS和JavaScript代码。这些代码用于在用户的Web浏览器中呈现页面,并与后端代码进行交互。HTML代码定义了页面的结构和内容,CSS代码用于设计页面的外观和样式,而JavaScript代码可以增加页面的交互性和动态性。 此外,Java Web项目源码通常还包括数据库相关的代码。这些代码用于创建、连接和操作数据库,包括定义表、插入、更新和删除数据等。常用的数据库技术包括MySQL、Oracle和MongoDB等。 另外,Java Web项目源码还可能包括其他的辅助代码,例如配置文件、日志记录、测试代码等。配置文件用于配置项目的运行参数和环境变量,日志记录可以跟踪项目的运行状态,测试代码用于测试项目的正确性和可靠性。 总之,Java Web项目源码整套涵盖了后端、端和数据库相关的代码,以及其他辅助代码。它们一起工作,构成了一个完整的Java Web应用程序。 ### 回答2: 对于一个Java web项目的源码整套,它通常包括以下几个方面: 1. 端代码:端代码是指网站或应用程序的用户界面部分,通常由HTML、CSS和JavaScript组成。这些代码负责展示数据和交互,与后端进行数据交互和页面渲染。 2. 后端代码:后端代码是指运行在服务器上的代码,负责处理和存储数据,处理业务逻辑等。Java web项目通常使用Java语言,常见的框架如Spring MVC、Struts等。 3. 数据库代码:数据库代码负责与数据库进行交互,包括创建表、插入数据、更新数据等操作。Java web项目通常使用关系型数据库,如MySQL、Oracle等,通过JDBC或者ORM框架如Hibernate进行操作。 4. 配置文件配置文件包含了项目的各种配置信息,如数据库连接信息、日志配置、权限控制等。常见的配置文件格式有XML、Properties等。 5. 测试代码:为了保证项目的质量和稳定性,需要编写测试代码。测试代码通常使用单元测试框架如JUnit,对各个模块进行测试,确保功能正常运行。 整套Java web项目源码是一个完整的系统,其中各个部分相互配合,实现了网站或应用程序的功能。开发人员可以根据需求进行二次开发和定制,添加新的功能和模块。 好的源码结构和编码规范可以提高项目的可维护性和可扩展性。同,有良好的文档和注释可以使其他开发人员更容易理解和修改源码。定期进行代码审查和优化,可以提高项目的性能和稳定性。 总而言之,一套完整的Java web项目源码包含了端、后端、数据库、配置文件和测试代码等部分,通过这些源码可以构建一个功能完善的Web应用程序。 ### 回答3: Java Web项目源码整套是指一套完整的Java编写的Web应用程序的源代码。这套源码通常包括项目的核心代码、配置文件静态资源文件以及相关的数据库脚本。 Java Web项目源码整套的结构通常遵循MVC(模型-视图-控制器)设计模式。其中,模型(Model)负责数据处理和业务逻辑,视图(View)负责展示界面,控制器(Controller)负责接收用户请求并调用相应的模型和视图处理。 这套源码的核心代码通常包括与业务逻辑相关的Java类、接口和工具类。这些代码实现了项目的核心功能,如用户管理、数据处理、权限控制等。核心代码中可能还包括与数据库交互的DAO(数据访问对象)类,以及通过服务层封装的业务逻辑处理。 此外,配置文件也是Java Web项目源码整套不可或缺的一部分。项目配置文件通常以XML或属性文件的形式存在,用于配置项目的参数、数据库连接信息、日志等。配置文件的内容可以根据项目需要进行修改和定制,以满足不同环境下的需求。 静态资源文件包括HTML、CSS和JavaScript等文件,用于实现用户界面的展示和交互。这些文件通常存放在项目的Web根路径下或者特定的目录中,通过URL可直接访问。 最后,数据库脚本用于创建和初始化项目所需的数据库表结构和数据。脚本通常以SQL语句的形式存在,可以通过数据库管理工具执行。 总之,Java Web项目源码整套是由核心代码、配置文件静态资源文件和数据库脚本组成的一套完整的源代码,它能够实现一个完整的Java Web应用程序。这套源码具备一定的灵活性,可以根据项目需要进行修改和扩展,满足不同用户的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值