为了账号安全,请及时绑定邮箱和手机立即绑定

嵌入Tomcat 9执行@PostConstruct

嵌入Tomcat 9执行@PostConstruct

心有法竹 2023-09-27 16:44:12
我正在创建一个可执行 jar,其中使用嵌入了 Tomcat 9 的 Jsf myfaces 2.3,因此当我执行该 jar 时,它将读取一个 war 文件并将其部署在嵌入式服务器上,它读取 bean 并正确显示内容。但是tomcat似乎没有执行@PostConstruct注释。例如:我在 bean 中有以下内容:    @PostConstruct    public void init() {        System.out.println("init bean called..........");    }但它不执行被调用的 void bean。我已将 javax.annotation-api-1.3.2 jar 包含在 WEB-INF\Lib 文件夹中。String contextPath = "/Test";             String warFilePath = "D:\\Test\\embedded\\Test.war";StandardContext ctx = (StandardContext) tomcat.addWebapp(contextPath, warFilePath);((StandardJarScanner) ctx.getJarScanner()).setScanAllDirectories(true);((StandardJarScanner) ctx.getJarScanner()).setScanAllFiles(true);((StandardJarScanner) ctx.getJarScanner()).setScanClassPath(true);tomcat.start();tomcat.getServer().await();控制台上没有错误消息...。只是不执行@PostConstruct init void。任何帮助将不胜感激。
查看完整描述

1 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

明白了..只需要启用命名即可。


tomcat.enableNaming();

在我的主要空白处:


Tomcat tomcat = new Tomcat();

tomcat.setBaseDir("temp");

tomcat.setPort(8080);

tomcat.enableNaming();

tomcat.getConnector(); // Tomcat 9 we need to get the connector. it not by default.


String contextPath = "/Test";     

String warFilePath = "D:\\Test\\embedded\\Test.war";


tomcat.getHost().setAppBase(".");

StandardContext ctx = (StandardContext) tomcat.addWebapp(contextPath, warFilePath);

((StandardJarScanner) ctx.getJarScanner()).setScanAllDirectories(true);

((StandardJarScanner) ctx.getJarScanner()).setScanAllFiles(true);

((StandardJarScanner) ctx.getJarScanner()).setScanClassPath(true);


tomcat.start();

tomcat.getServer().await();


查看完整回答
反对 回复 2023-09-27
  • 1 回答
  • 0 关注
  • 75 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信