繁体   English   中英

Java Jersey:什么是在主对象和Web服务之间共享数据的最佳方法

[英]Java Jersey: Whats the best way to share data between the Main-object and the Webservice

可以说我在grizzles服务器中有一个Jersey服务,并且我喜欢在服务器和服务实现之间共享数据(例如mydata)。

public class MyServer 
{  
    String mydata="";

    public static void main (String [] args)
    {
        ResourceConfig rc = new ResourceConfig ().packages (MyServer.class.getPackage ().getName ());
        HttpServer hs = GrizzlyHttpServerFactory.createHttpServer (URI.create ("http://localhost/myserver"), rc);

        for (int i = 0; i < 10; i ++)
        {
             mydata += "bla";
        }

        hs.shutdown ();
    }
}



@Path ("myservice")
public class MyService 
{
        @GET
        public String getIt() 
        {
            // how to access mydata?
        }
}

共享数据的最佳方法是什么? 我可以想到单例或使mydata静态。 但是也许有一种标准的方式我在这里看不到?

谢谢!

仅当mydata确实是静态的并且不能被多个线程更改时(例如,在服务的getIt()方法内部getIt() ,才可以使mydata静态或单例实例变量。

此类技术通常适用于常规配置属性,并通常用于这些属性。

通常,这是这种情况的标准方法。 顺便说一句,您可以在Server类中保留不需要的mydata ,但可以使另一个类在其中保留这样的通用数据(如果有很多),但这是一个选择的问题。

另外,更标准的是不公开实际的mydata字段,而是为其提供getter / setter对。

最后,如果这样的公共/静态值可以由多个线程更改,则需要使其同步以避免并行修改。

还有更多不同的方法来处理并发并使代码具有线程安全性,但这属于您的实际需求。 无论如何,它们都最终实现了静态/单同步的实现。

PS。 请注意,如果它是常见的静态数据,则必须在启动服务器之前而不是之后(例如,在示例中)填充它-否则,请求可能会在准备好供服务线程使用的数据之前发出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM