Spring web动态加载外部配置文件

本文介绍了一种在Web应用中动态加载配置文件的方法,通过实现ServletContextListener接口,利用ServiceListener监听Web应用的生命周期,在启动时加载配置,并采用PropertiesConfiguration类实现配置文件的自动重载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在web开发中,经常将一些配置的东西单独放到一个配置文件里,但是有一个问题就是当我们将项目部署到正式环境上之后,再想修改一些配置东西那该怎么办,总不能关掉服务器,修改完之后再重新部署吧,这样肯定是不行的。因此我们需要动态的去加载配置文件了。

1.编写一个监听器类,实现ServletContextListener接口。

public class ServiceListener extends HttpServlet implements ServletContextListener {
	
	private static final long serialVersionUID = -4257209167303908356L;
	
	private Logger logger = Logger.getLogger(ServiceListener.class.getName());
	
	@Override
	public void contextInitialized(ServletContextEvent event) {
		logger.debug("ServiceListener context init.");
		
		ServiceController.getInstance().init();
		
	}

	@Override
	public void contextDestroyed(ServletContextEvent servletContextEvent) {
		logger.debug("ServiceListener context destroy.");
	}

}

ServletContextListener它能够监听 ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期。

当Servlet 容器启动或终止Web 应用时,会触发ServletContextEvent 事件,该事件由ServletContextListener 来处理。
在 ServletContextListener 接口中定义了处理ServletContextEvent 事件的两个方法。

①contextInitialized(ServletContextEvent sce)
当Servlet 容器启动Web 应用时调用该方法。在调用完该方法之后,容器再对Filter 初始化,
并且对那些在Web 应用启动时就需要被初始化的Servlet 进行初始化。
②contextDestroyed(ServletContextEvent sce)
当Servlet 容器终止Web 应用时调用该方法。在调用该方法之前,容器会先销毁所有的Servlet 和Filter 过滤器。

2.在contextinitialized方法中去执行加载配置文件的逻辑。

public class ServiceController {

	private static ServiceController instance;
	
	private ServiceController() {
		cacheManager = new CacheManager();
	}

	public static ServiceController getInstance() {
		synchronized (ServiceController.class) {
			if (null == instance) {
				instance = new ServiceController();
			}
		}
		return instance;
	}
	//配置文件初始化
	public void init() {
		SystemConfig.init();
		ErrorMsgConfig.init();
	}
	}

3.配置文件动态加载

public class SystemConfig {
	
	private static final String PROP_FILE = "system.properties";
	
	private static PropertiesConfiguration propconfig = null;
	
	public static String getString(String key) {
		return propconfig.getString(key);
	}
	
	public static boolean getBoolean(String key) {
		return propconfig.getBoolean(key);
	}
	
	public static int getInt(String key) {
		return propconfig.getInt(key);
	}

	public static void init() {
		try {
		//使用Apache下的commons-configuration包下的PropertiesConfiguration创建实例
			propconfig = new PropertiesConfiguration(PROP_FILE);
			propconfig.setEncoding(Constant.DEFAULT_ENCODING);
//设置reload策略,这里用当文件被修改之后reload(默认5s中检测一次)	
		propconfig.setReloadingStrategy(new FileChangedReloadingStrategy());
		} catch (Exception e) {
			ExceptionUtil.printStackTrace(e);
		}
	}
	

这样就达到在web容器启动的时候去加载配置文件,当配置文件修改之后自动的去加载配置文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值