Java 启动和启动时加载

Java 启动和启动时加载,java,tomcat,servlets,jersey,jax-rs,Java,Tomcat,Servlets,Jersey,Jax Rs,可能是重复的,但我还不允许评论,所以我必须开始一个新的问题,这 同样的设置,有一个使用Jersey和Tomcat的servlet,使用启动时加载来加载容器。 但是,由于上面提到的线程,我知道这只加载Jersey容器,而不是我为servlet设置的类 因此,与上面线程的答案中暗示的内容相关,如何做到不仅在启动时加载包含的类,而且加载带有@Path注释的类(例如,从内存中的DB加载数据) 例如: @Singleton @Path( "3455470640" ) public class Patric

可能是重复的,但我还不允许评论,所以我必须开始一个新的问题,这

同样的设置,有一个使用Jersey和Tomcat的servlet,使用启动时加载来加载容器。 但是,由于上面提到的线程,我知道这只加载Jersey容器,而不是我为servlet设置的类

因此,与上面线程的答案中暗示的内容相关,如何做到不仅在启动时加载包含的类,而且加载带有@Path注释的类(例如,从内存中的DB加载数据)

例如:

@Singleton
@Path( "3455470640" )
public class PatriciaTrieEngine {

@Inject
DatabaseService dbService;
private PatriciaTrie< Object > patriciaTrie;

@PostConstruct
public void init( ) throws SQLException {

    ...some code initializing the trie by loading data from a database u using dbService
}
}


最终应该在启动时加载PatriciaTrie,因为将数据加载到trie需要几分钟。

默认行为是为每个请求实例化资源类的新实例。在这种情况下,不需要在启动时加载。如果您想要这种行为,那么您的资源类需要是单实例,这意味着只为整个应用程序创建一个实例。如果您这样做,那么您有责任使类线程安全

在Jersey 1中,您可以使用
@singleton
注释将类设置为singleton,如前所述。这也将在启动时加载类。在Jersey 2中,
@Singleton
注释将使资源类成为Singleton,但它不会在启动时加载。为此,您可以使用
@Immediate
注释,如图所示


除此之外,仅从您的描述来看,我觉得这可能需要修复设计。如果没有看到一些代码,你就无法真正说出你想做什么

谢谢你回答@peeskillet!我会调查@Immediate,因为我已经有单身人士了。代码相当长,但一般的想法是使用servlet将数据集保存在优化的数据结构中以供查询。然而,将数据加载到结构中大约需要1-2分钟,因此我希望在收到任何请求之前实现这一点。如果db access对象是单例对象,您不能将其加载到
ResourceConfig
中吗?好的,我想在这里放一些代码确实是个好主意。。。修改了我的问题。我已经阅读了ResourceConfig,但没有找到比基本示例更详细/更高级的文档。然而,我喜欢无代码的尝试,所以如果可能的话,我更喜欢@peeskillet注释
@Singleton
@Path( "3455470640" )
public class PatriciaTrieEngine {

@Inject
DatabaseService dbService;
private PatriciaTrie< Object > patriciaTrie;

@PostConstruct
public void init( ) throws SQLException {

    ...some code initializing the trie by loading data from a database u using dbService
}
@Path( "/search" )
@Produces( "application/json" )
public class SearchService {

    @Inject
    private DatabaseService dbService;
    @Inject
    private SearchEngine    engine;

    @GET
    @Path( "/candidates" )
    public Response getCandidates(@QueryParam( "query" ) final String input) throws UnsupportedEncodingException {

    use Patricia trie via SearchEngine in order to find candidates for given query

    return Response.ok().entity( candidates ).build();
}