Java 在tomcat上的web应用程序之间共享属性

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

在访问资源(例如属性文件)的两个web应用程序之间共享服务而不复制两个web应用程序中的代码,最有效的设计模式/编码实践是什么

在Tomcat上运行的两个web应用程序,每个应用程序读取Tomcat的context.xml中的一个属性文件和一些环境条目。这很好,但基本上我只将读取的代码复制到两个web应用程序中。复制这样的代码是好的设计和/或编程实践吗

我考虑创建一个包含服务(接口和实现)的JAR文件和一个作为获取服务入口点的单例。我读过,搜索过,找到了一个单身汉:

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,大概你需要在某个时候提供服务;懒散地初始化它有什么意义?出于同样的原因,懒散地初始化整个服务同样过于复杂。