JUnit测试中如何为Jetty服务器配置非System来源的临时属性
Jetty测试中脱离System.setProperty配置属性的方案
方案1:改用ServletContext初始化参数(推荐)
你之前尝试的webAppContext.getInitParams().put()是标准的Web应用属性配置方式,之所以无效是因为应用代码还在读取System属性。只需调整应用的读取逻辑,从ServletContext获取参数即可:
// 应用代码替换原System.getProperty() String propValue = getServletContext().getInitParameter("myProperty");
Jetty侧配置保持你的写法:
webAppContext.getInitParams().putAll(Map.of( "myProperty", "propertyValue", "otherProp", "otherValue" ));
方案2:通过Jetty工具注入System属性(无需修改应用)
如果无法改动应用的读取逻辑,可使用Jetty自带的SystemProperty类批量注入属性,替代直接调用System.setProperty():
Map<String, String> testProperties = Map.of( "myProperty", "propertyValue", "anotherProp", "anotherValue" ); // 利用Jetty工具注入,避免直接操作System类 testProperties.forEach(SystemProperty::set); // 启动服务器 server.start();
方案3:从配置文件加载属性(复杂场景)
若属性需要从外部配置文件读取,可自定义加载逻辑后注入:
Properties testProps = new Properties(); // 读取classpath下的测试配置文件 try (InputStream input = getClass().getResourceAsStream("/test-config.properties")) { testProps.load(input); } // 注入属性(根据需求选择注入到System或ServletContext) testProps.forEach((key, value) -> { // 若应用读System属性 SystemProperty.set(key.toString(), value.toString()); // 若应用读ServletContext参数 // webAppContext.getInitParams().put(key.toString(), value.toString()); });
内容的提问来源于stack exchange,提问作者Valeriy K.
相关产品推荐
相关产品推荐

