gpt4 book ai didi

java - 在 Java EE 应用程序中从文件系统加载属性文件

转载 作者:太空宇宙 更新时间:2023-11-04 13:02:35 25 4
gpt4 key购买 nike


我正在使用 EJB 3.0 和 CDI 开发一个 java ee 应用程序,该应用程序将部署在 Websphere 应用程序服务器中。我需要一个属性文件,我可以从中读取某些配置参数,并且该属性文件应该驻留在将部署我的代码的主机系统的文件系统中。属性文件的基本路径(将放置属性文件的目录)被配置为 Websphere 应用程序服务器中的 namespace 绑定(bind)字符串资源。

目前我已经编写了一个实用程序类来检索和使用属性文件,如下所示。

 @Singleton
public class AppPropertyUtil {

private static Hashtable apppProperties;

@Resource(name="jndi/basePath",lookup="jndi/basePath")
private static String basePath;

private static final Logger LOGGER = LoggerFactory.getLogger(AppPropertyUtil.class);


protected void loadPropertyBundleFromFileSystem(String path)
{
InputStream inputStream = null;
Properties properties = null;
try {String fullPath=basePath+"/"+path+".properties";
LOGGER.info("Property file path : "+fullPath);
inputStream = new FileInputStream(new File(fullPath));
if (inputStream != null) {
properties = new Properties();
properties.load(inputStream);
LOGGER.info("Properties loaded");
apppProperties = (Hashtable)properties;
}
} catch (FileNotFoundException exception) {
LOGGER.error("Cannot read property bundle ",exception);
}
catch (IOException | IllegalArgumentException exception) {
LOGGER.error("Unable to loadproperties ",
exception);
}
}

public String getProperty(String key)
{
if(apppProperties == null)
{
loadPropertyBundleFromFileSystem("AppProps");
}
Object value = apppProperties.get(key);
if(value != null){
return (String) value;
}
return null;
}

}

但是使用 @Resource 注释将强制将 AppPropertyUtil 类注入(inject)到任何希望使用它的类中。因此,我将无法在任何不受管理的 POJO 类中使用它。

请帮助我了解这是否是满足上述要求的最佳方法或者是否可以改进。我还想将 getProperty 方法和 loadPropertyBundleFromFileSystem 方法设为静态,以便从静态上下文中使用它,但这是不可能的,因为应该注入(inject)该类才能使用。

提前致谢

最佳答案

理想情况下,您不需要从任何 POJO 访问您的类。使用设计模式并分离您的关注点。使用您的类作为服务来加载您的属性文件并提供其内容的映射或集。 POJO 模型不应该关心,但您的其他类可以读取该映射/属性集并将它们传递给您的 pojo 或需要它但无法直接访问它的其他类。

另一个选项是删除 @Resource 并使其只是一个普通的旧 util 类,您可以传入文件名以在其构造函数中读取它,然后当您调用 getProperty 时,您将执行您所做的操作来检查它是否已加载,如果没有,则加载它。

将其包装在提供 @Resource 部件的工厂中,这样可以防止您的 EE 代码渗透到其他 jars (utils) 中。

关于java - 在 Java EE 应用程序中从文件系统加载属性文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34814647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com