@PostConstruct 在简单的@Singleton @Startup bean 上调用了两次
@PostConstruct called twice on simple @Singleton @Startup bean
我的问题是 @PostConstruct 被调用了两次,尽管它不应该被调用。我搜索了很多,发现了球衣 https://java.net/jira/browse/JERSEY-1883?filter=-3 的类似问题。然而,我试图做一个小例子,即使没有任何杂音,它显然仍然会导致问题。
import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.ejb.Startup;
@Singleton
@Startup
public class TestSingleton {
@PostConstruct
public void init() {
System.out.println("How many times am I being called?");
}
}
配置
- 应用服务器:Glassfish 3.1.2
- Java 版本:JDK 1.7_17
- 打包:一个 war 文件在一个耳朵里
有什么想法吗?
@PostConstruct —在创建 bean 实例后立即调用。
你可以看到这个:
@Startup @Singleton instantiated twice in WebLogic (EJB 3.1)
我通过使用 @PreDestroy
或应用程序服务器的 Publish 解决了这个问题。
问题是"normal"。在服务器启动后使用 Eclipse 作为 IDE 应用程序将再次发布。因此,您只会看到一条 @PreDestroy
的日志消息,但会看到两条 @PostConstruct
。
更改内容和之后发布也是如此。在这里你应该只能看到一次来自 @PostConstruct
的消息。
那你就知道万事大吉了
我的问题是 @PostConstruct 被调用了两次,尽管它不应该被调用。我搜索了很多,发现了球衣 https://java.net/jira/browse/JERSEY-1883?filter=-3 的类似问题。然而,我试图做一个小例子,即使没有任何杂音,它显然仍然会导致问题。
import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.ejb.Startup;
@Singleton
@Startup
public class TestSingleton {
@PostConstruct
public void init() {
System.out.println("How many times am I being called?");
}
}
配置
- 应用服务器:Glassfish 3.1.2
- Java 版本:JDK 1.7_17
- 打包:一个 war 文件在一个耳朵里
有什么想法吗?
@PostConstruct —在创建 bean 实例后立即调用。 你可以看到这个: @Startup @Singleton instantiated twice in WebLogic (EJB 3.1)
我通过使用 @PreDestroy
或应用程序服务器的 Publish 解决了这个问题。
问题是"normal"。在服务器启动后使用 Eclipse 作为 IDE 应用程序将再次发布。因此,您只会看到一条 @PreDestroy
的日志消息,但会看到两条 @PostConstruct
。
更改内容和之后发布也是如此。在这里你应该只能看到一次来自 @PostConstruct
的消息。
那你就知道万事大吉了