0

AppModuleTapestry项目中考虑一些。

我想订购必须在系统启动时调用的操作序列。

考虑一下,我有两个简单的动作:

1)行动,必须先行:

@Startup
public static void initMyApplication(Logger logger, LiquibaseService liquibaseService) {
    logger.info("Updating database by liquibase service...");
    liquibaseService.update();
    logger.info("update-db done.");
}

2)和第二个:

@Startup
@Order("after:LiquibaseService")
public static void doSomeChecks(HibernateSessionManager hsm) {
   ... 
}

我无法理解(即使在阅读文档之后):如何使用@Order注释指定此类操作的顺序?

更具体地说:我需要指出@Order("after:<HERE>)什么?

看起来,这样的结构:

@Order("after:LiquibaseService")

或者

@Order("after:initMyApplication")

不工作。实际上我的startup动作是按任意顺序调用的。

4

1 回答 1

1

我不认为@Ordercan be used@Startup但你可以做的是 use contributeRegistryStartup。正如它所期望的那样,OrderedConfiguration您可以订购您的贡献。

public class MyModule1
{
  public static void contributeRegistryStartup(OrderedConfiguration<Runnable> configuration)
  {
    configuration.add("MyFirstContribution", new Runnable() { ... });
  }
}

public class MyModule2
{
  public static void contributeRegistryStartup(OrderedConfiguration<Runnable> configuration)
  {
    configuration.add("MySecondContribution", new Runnable() { ... }, "after:MyFirstContribution");
  }
}
于 2013-01-17T13:57:31.107 回答