Spring Boot Mongodb удалить все при завершении работы приложения - PullRequest
0 голосов
/ 19 марта 2019

Как удалить все элементы документа MongoDB при завершении работы приложения Spring Boot или при уничтожении ServletContext?

Вот файл приложения Spring Boot. Он не работает:

@SpringBootApplication
public class DiscoveryServiceApplication {

    public static void main(String[] args){
        System.setProperty("server.servlet.context-path", "/");
        SpringApplication.run(DiscoveryServiceApplication.class,args);
    }

    @NotNull
    @Bean
    ServletListenerRegistrationBean<ServletContextListener> myServletListener() {
        ServletListenerRegistrationBean<ServletContextListener> srb =
                new ServletListenerRegistrationBean<>();
        srb.setListener(new DiscoveryServiceServletContextListener());
        return srb;
    }


    class DiscoveryServiceServletContextListener implements ServletContextListener {

        Logger logger= Logger.getLogger(com.skyscanner.discovery.config.DiscoveryServiceServletContextListener.class);


        @Override
        public void contextInitialized(ServletContextEvent sce) {
            logger.info("ServletContext initialized");
        }

        @Override
        public void contextDestroyed(ServletContextEvent sce){
            //logger.info("RestAPI repository all items deleted");
            //Optional<RestAPI> query=repository.findById("flight-service");
            //RestAPI restAPI=query.get();

            MongoClient mongoClient = new MongoClient();
            DB database=mongoClient.getDB("skyscannerDiscoveryDB");
            DBCollection collection=database.getCollection("restAPI");

            BasicDBObject query=new BasicDBObject();
            query.append("id","flight-service");
            collection.remove(query);

            logger.info("flight-service deleted");

        }
    }
}

В методе contextDestroyed я пытаюсь удалить элемент с идентификатором «flight-service», но он не работает.

Как я могу удалить все элементы в базе данных MongoDB при contextDestroyed или завершении работы приложения?

1 Ответ

1 голос
/ 19 марта 2019

Сработало. Я добавил следующий код в приложение Spring Boot. Вот приложение:

@SpringBootApplication
public class DiscoveryServiceApplication {

    @Autowired
    private static ApplicationContext context;


    @Component
    public static class ApplicationLifecycle implements Lifecycle{

        @Autowired
        private RestAPIRepository repository;

        Logger logger=Logger.getLogger(ApplicationLifecycle.class);

        @Override
        public void start() {
            logger.info("Application start");
        }

        @Override
        public void stop() {
            logger.info("Application stop");
            repository.deleteAll();

        }

        @Override
        public boolean isRunning() {
            return true;
        }
    }
    public static void main(String[] args){
        System.setProperty("server.servlet.context-path", "/");
        SpringApplication.run(DiscoveryServiceApplication.class,args);

    }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...