Java 在tomcat上的web应用程序之间共享属性
在访问资源(例如属性文件)的两个web应用程序之间共享服务而不复制两个web应用程序中的代码,最有效的设计模式/编码实践是什么 在Tomcat上运行的两个web应用程序,每个应用程序读取Tomcat的context.xml中的一个属性文件和一些环境条目。这很好,但基本上我只将读取的代码复制到两个web应用程序中。复制这样的代码是好的设计和/或编程实践吗 我考虑创建一个包含服务(接口和实现)的JAR文件和一个作为获取服务入口点的单例。我读过,搜索过,找到了一个单身汉:Java 在tomcat上的web应用程序之间共享属性,java,tomcat,web-applications,tomcat6,java-6,Java,Tomcat,Web Applications,Tomcat6,Java 6,在访问资源(例如属性文件)的两个web应用程序之间共享服务而不复制两个web应用程序中的代码,最有效的设计模式/编码实践是什么 在Tomcat上运行的两个web应用程序,每个应用程序读取Tomcat的context.xml中的一个属性文件和一些环境条目。这很好,但基本上我只将读取的代码复制到两个web应用程序中。复制这样的代码是好的设计和/或编程实践吗 我考虑创建一个包含服务(接口和实现)的JAR文件和一个作为获取服务入口点的单例。我读过,搜索过,找到了一个单身汉: public class P
public class PropertyService {
private static volatile ExternalPropertyService eps;
private static volatile SettingsPropertyService sps;
private static volatile AuditPropertyService aps;
private PropertyService () {
}
private static class ServiceHolder {
private static final PropertyService propertyService = new PropertyService();
}
public static PropertyService getInstance() {
return ServiceHolder.propertyService;
}
public ExternalPropertyService getExternalPropertyService() {
ExternalPropertyService tmp = eps;
if (tmp == null) {
synchronized(this) {
tmp = eps;
if (tmp== null) {
tmp = new ExternalPropertyServiceImpl();
eps = tmp;
}
}
}
return tmp;
}
// Rest of the property member accessors omitted
}
Singleton是延迟加载的(按需初始化持有者),服务也是延迟加载的(双重检查锁定)。基本上,singleton只是包装服务。拥有它是必要的还是明智的?服务读取、缓存和刷新值,并且这些值是同步的和线程安全的
如果我把这个JAR放在Tomcat的公共文件夹中,它将被公共类加载器拾取,并提供给两个web应用程序。这两个web应用程序也将使用公共类加载器发现的相同单例,对吗?它是线程安全的吗?据我所知,这应该是
我做错什么了吗?有更好的方法吗?为什么?用伟大的唐纳德·克努斯的话说。清除你不需要的花哨垃圾。那么“花哨垃圾”到底是什么?例如,DCL,大概你需要在某个时候提供服务;懒散地初始化它有什么意义?出于同样的原因,懒散地初始化整个服务同样过于复杂。