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

 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就会执行
时间: 2024-12-31 21:32:59

容器启动后执行和执行数据库脚本的相关文章

Spring容器启动后注入service到Servlet并自动执行

通常做法是定义一个Servlet,并在web.xml中配置Servlet的启动顺序<load-on-startup>的值在DispatcherServlet之后.但这样做的缺点是在Servlet中无法使用Spring的依赖注入功能,只能使用WebApplicationContext的getBean()方法获取bean. 找到的解决办法如下: 1.自定义一个用于代理启动Servlet的类DelegatingServletProxy: package cn.edu.swu.oa.common.ut

SqlServer执行大的数据库脚本出错解决方法

如果执行线上项目拷下来sqlserver的.sql的数据库脚本文件,如果文件较大时,那么就会报错内存不足之类的. 这时可以在命令提示符使用命令来执行脚本文件.切记,执行前先改一下数据库存放位置! 命令:osql -S . ,1433 -U sa -P 123 -i C:\Users\Cheng\Desktop\sqlScript\sqlScript.sql 如果提示不支持osql,那么把osql改成sqlcmd. 原文地址:https://www.cnblogs.com/heheblog/p/1

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

原因: 容器同时只能管理一个进程,如果这个进程结束了容器就退出了,但是不表示容器只能运行一个进程(其他进程可在后台运行),但是要使容器不退出必须要有一个进程在前台执行. 解决方案: 启动脚本最后一个进程一定要用前台运行方式 即在进程最后不加 &(&表示在后台执行),否则容器退出 可在脚本后加  /bin/bash ,如果还不行,就换为 tail -f /dev/null (实时查看/dev/null) 原文地址:https://www.cnblogs.com/wangbaojun/p/10

Linux 安装Xampp以后,Apache服务器无法启动,以及启动后,连接sql数据库遇到的问题的解决方法

xampp安装以后,搭建服务器的时候,我们会遇到哪些问题呢?1.MySQL Database 可以启动,而Apache Web Server无法启动?应该是80端口被占用,那么如何解决呢?我们可以通过查找80被哪个占用,并关闭这个进程,方法如下: 1 [email protected]:/# netstat -lntp | grep :80 2 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1716/apache2 关闭该服务, 1 [email protected]:

@EnableAsync annotation metadata was not injected Spring容器启动后访问Servlet报错

@EnableAsync annotation metadata was not injected 2015年12月20日 20:06:54 7570 在初始化spring事务部分碰到该错误, 详细错误信息如下: [plain] view plain copy 警告: Exception encountered during context initialization - cancelling refresh attempt org.springframework.beans.factory.

【Spring Boot】Spring Boot之三种容器启动后进行相关应用初始化操作方法

一.方式一,使用ApplicationListener<E extends ApplicationEvent>监听ContextRefreshedEvent事件 /** * @author zhangboqing * @date 2019-11-03 */ @Component public class MyApplicationListener implements ApplicationListener<ContextRefreshedEvent> { @Autowired p

项目组数据库脚本的维护方案

背景 版本发布密集,为满足客户和领导的要求,项目经理决定每周必须发布并上线一个版本. 功能修改频繁,相应的表结构.表数据的变动也比较频繁. 产品满足两种部署方案,一是总部部署,由项目组直接来维护,供内部客户使用:二是客户自行安装.升级和维护,项目组提供版本和技术支持. 项目选型使用MySQL作为数据存储软件. 方案 针对现状,设计出数据库脚本的维护方案,脚本分为全量脚本和升级脚本两套. 全量脚本,包括 表结构定义,包括表结构定义.列的索引定义. 初始化数据,包括系统正常运行时需要的初始化数据.

spring在web容器启动时执行初始化方法

需求:在tomcat启动时开启一个定时任务. 想法:容器启动时执行方法,最容易想到的就是servlet中可以配置load-on-startup,设置一个正整数也就可以随容器一起启动. 问题:上面的方法很好,但是由于定时任务需要去操作数据库,而项目采用了spring的依赖注入来管理对象,而servlet并不受Spring的管理.若此时在servlet中注入Spring管理的对象,则会报错:javax.naming.NameNotFoundException: Name com.test.InitS

如何避免DockerPC蛋蛋源码下载 容器启动脚本运行后自动退出—

docker build DocPC蛋蛋源码下载 联系方式:QQ:2747044651 网址http://zhengtuwl.com kerfile后,采用docker run --name xxx -d 运行容器,发现start.sh执行后容器就退出了,根本无法启动定时任务,网上各种办法有说用nohup,有死循环,还有说用信号,发现都不靠谱.分析了一下docker的机制,一个docker容器同时只能管理一个进程,这个进程退出后,容器也就退出了.这并不意味着一个容器里只能同时运行一个进程(那样太