spring - 如何防止Spring boot war文件在单独的上下文中加载组件两次?
问题描述
我有一个 spring boot 应用程序,打包为一个 war 文件并部署在 tomcat 服务器上。我注意到某些组件在启动时加载了两次:
- 应用程序启动时
- 当 ServletInitializer 启动时。
它给我带来了一些问题,因为我的组件之一是 EnableAsync 并且应该经常执行一些计划任务。当它在两个分离的上下文中加载两次时,每个任务都会完成两次并在数据库中创建重复的行。
有没有办法在 Spring Boot 中强制某些组件在单个上下文中加载?例如,这意味着防止 bean 在 ServletInitializer 中初始化。
那是我的 SpringBootServletInitializer 代码:
@SpringBootApplication
@EnableScheduling
@EnableAsync
public class TestApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
@Bean
public PasswordEncoder getPasswordEncoder(){
return new BCryptPasswordEncoder();
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(TestApplication.class);
}
}
解决方案
感谢M. Deinum,我发现我的代码中有一个额外的 SpringBootServletInitializer!我删除了它,现在一切正常!
推荐阅读
- java - Android Studio - Gradle 同步
- python-3.x - 如何使用 Selenium 和 python 检查 Chrome 中的复选框
- javascript - 使用 async-await 时如何将 Resolve 回调传递给 Promise?
- python - 连接到在我的 pi 上运行的烧瓶应用程序
- java - TXT 文件中日期格式为 yyyymmdd
- google-sheets - 是否可以在 Google 表格中批量编辑公式?
- css - 强制菜单停留在 1 行并强制页面有 1 页没有滚动
- visual-studio - 将代码签入到 AzureDevOps 后如何运行 PowerShell 脚本
- python - 如何使用熊猫查看csv中的单行
- python - Python - BigQuery 临时表