容器启动后执行和执行数据库脚本

Posted yweihainan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了容器启动后执行和执行数据库脚本相关的知识,希望对你有一定的参考价值。

 1 package com.jt.mongo.demo.modules.init;
 2 
 3 import org.slf4j.Logger;
 4 import org.slf4j.LoggerFactory;
 5 import org.springframework.context.ApplicationListener;
 6 import org.springframework.context.event.ContextRefreshedEvent;
 7 import org.springframework.core.io.ClassPathResource;
 8 import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
 9 import org.springframework.stereotype.Component;
10 
11 import javax.annotation.Resource;
12 import javax.sql.DataSource;
13 import java.sql.SQLException;
14 
15 @Component
16 public class SqlScriptInitExecutor implements ApplicationListener<ContextRefreshedEvent> {
17 
18     private static final Logger LOGGER = LoggerFactory.getLogger(SqlScriptInitExecutor.class);
19 
20     @Resource
21     private DataSource mysqlDataSource;
22 
23     @Override
24     public void onApplicationEvent(ContextRefreshedEvent event) {
25         initMySqlTables();
26     }
27     
28     private void initMySqlTables() {
29         try {
30 
31             ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
32             populator.addScript(new ClassPathResource("sql/mysql_pdca_manager.sql"));
33             populator.populate(mysqlDataSource.getConnection());
34 
35             LOGGER.info("init pdca manager tables success.");
36 
37         } catch (SQLException e) {
38             LOGGER.error("init pdca manager tables error", e);
39         }
40     }
41 }

 

ContextRefreshedEvent:
Event raised when an {@code ApplicationContext} gets initialized or refreshed.
当容器初始化或者重启之后实例化到容器中,然后监听他的listener就会执行

以上是关于容器启动后执行和执行数据库脚本的主要内容,如果未能解决你的问题,请参考以下文章

docker容器启动Mysql执行初始化sql脚本实现

docker容器启动Mysql执行初始化sql脚本实现

docker 容器启动后立马退出的解决方法

代码片段:Shell脚本实现重复执行和多进程

在docker container restart上执行相同的入口点脚本

docker容器启动时执行脚本 run /bin/bash执行多条指令