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

标签 java jersey

假设我在 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 内部),您可以将 mydata 设为静态或单例实例变量() 服务的方法)。

这种技术通常适用于常见的配置属性。

一般来说,这是这种情况的标准方法。顺便说一句,您可以将不必要的 mydata 保留在 Server 类中,但可以创建另一个类来保留此类通用数据(如果有一堆),但这是一个选择问题。

另外,更标准的做法是不将实际的 mydata 字段设为 public ,而是为其提供 getter/setter 对。

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

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

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

关于Java Jersey : Whats the best way to share data between the Main-object and the Webservice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51325458/

相关文章:

java - 如何使用mapPartitions函数将Rdd转换为数据集

用于大文件上传的 Java REST API

Java Jersey Framework RESTful Web 服务最佳实践

java - 在哪里放置 Java Web 应用程序的驱动程序

java - 如何为 Spring Security 的 SecurityConfig 编写单元测试

java - AWS S3 和手机架构

glassfish - JAX-RS 自定义路径参数验证器

java - Documents4j 的 RemoteConverter 的自定义 HttpClient

java - 创建一个所有相邻颜色都不同的随机颜色网格

java - JFrame 对象准备好进行垃圾回收的条件