当前位置: 首页 > 知识库问答 >
问题:

在为Spring Boot应用程序使用jar打包时如何使用SpringBootServletInitializer

颜博达
2023-03-14

我在spring boot应用程序中有一个类,它扩展了SpringBootServletInitializer,在这个类中,我在运行时加载spring datasource详细信息,当我将应用程序打包为WAR时,这很好,但当我将其更改为jar时,SpringBootServletInitializer将被忽略。并从文档中发现,SpringBootServletInitializer仅在以WAR形式运行应用程序时才被调用。

当spring boot应用程序作为jar运行时,我想通过从secrets中提取db详细信息,在运行时设置spring datasource详细信息。

这是我在扩展SpringBootServletInitializer的类中所做的

@Override
public void onStartup(ServletContext servletContext) throws ServletException 
....

servletContext.setInitParameter("spring.datasource.driver-class-name", dbClassName);
servletContext.setInitParameter("spring.datasource.url", dbURL);
servletContext.setInitParameter("spring.datasource.username", dbUserName);
servletContext.setInitParameter("spring.datasource.password", dbPWD);

共有1个答案

田马鲁
2023-03-14

您可以使用类似CommanlineRunner接口的回调run()方法,该方法可以在Spring应用程序上下文实例化后在应用程序启动时调用:

@Component
public class CommandLineAppStartupRunner implements CommandLineRunner,ServletContextAware {
    private static final Logger LOG =
      LoggerFactory.getLogger(CommandLineAppStartupRunner.class);
 
    private ServletContext context;

    @Override
    public void run(String...args) throws Exception {
        //provide what you want here
        LOG.info("This is triggered");
    }

    @Override
    public void setServletContext(ServletContext servletContext) {
       this.context = servletContext;
    }
}
 类似资料:
  • 我有Kafka Streams java应用程序启动并运行。我试图使用KSQL创建简单的查询,并使用Kafka流来实现复杂的解决方案。我希望将KSQL和Kafka流作为Java应用程序运行。 我打算通过https://github.com/confluentinc/ksql/blob/master/ksqldb-examples/src/main/java/io/confluent/ksql/em

  • 使用SpringBoot创建了一个自定义jar,用于数据库表上的CRUD操作。其目的是使其成为一个实用程序jar,以便其他服务或应用程序可以将此jar用于该表上的任何操作。以下是我遵循的步骤: 1)。在REST SERVICE的pom.xml中添加此jar条目并成功构建。2)。在REST SERVICE的控制器内自动生成实用程序jar的服务类。 但是当我启动REST服务(服务是在spring bo

  • 问题内容: 因此,我正在考虑在使用OpenCV的应用程序的开发中使用哪种语言。作为我决定的一部分,我想知道在最终应用程序中包含opencv库有多么容易/困难。我真的很想用python写这个,因为opencv绑定很棒,python很容易等等。 但是我还没有找到明确的答案,例如“当py2app看到导入cv行时会自动捆绑opencv”(我认为不是),如果没有,那么有一种已知的方法吗? 总的来说,我想知道

  • 我试图理解我们什么时候需要使用这个应用程序。在我们的node Express中使用 当我在网上搜索时,我在reddit上偶然发现了这个答案,它说明了应用程序之间的区别。获取和应用程序。使用 在此基础上,我总结了以下几点。 充当超级路由或中间件?这意味着它在? 此外,如果有人能添加更多关于app.use.的信息/练习,我将不胜感激

  • 我是kubernetes的新手,需要在openshift平台上使用k8s confimap将springboot应用程序的属性文件外部化。我已将属性文件保存在git repo中,作为“greeter.message=Spring Bootmyapplication.properties已在库伯内特斯上挂载为卷!”并使用“oc create confimap myconfig--from-file=