在 Servlet 3.0标准中含有一个 ServletContainerInitializer接口,所有实现了这个接口的类会在容器启动的时候得到一个通知,并且会调用其 onStartup()方法,这个接口非常简单,只有一个 onStratup()方法 package javax.servlet;   import java.util.Set;   public interface ServletContainerInitializer {   void onStartup(Set<Class<…
1. 前言 Docker在开发中使用的越来越多了,最近搞了一个Spring Boot应用,为了方便部署将Mysql也放在Docker中运行.那么怎么初始化 SQL脚本以及数据呢? 我这里有两个传统方案. 第一种方案是在容器启动后手动导入,太low了不行.第二种在Spring Boot客户端连接Mysql容器时初始化数据库,你可以参考使用flyway进行数据库版本控制一文,但是这依赖客户端的能力.能不能做到Mysql容器启动时就自己初始化数据库呢?当然可以!今天就来演示一下.全部代码见文末. 2.…
参考:https://blog.csdn.net/fredaq/article/details/9366043 一.概念 所谓Servlet容器其实说白了是符合Servlet规范的Java web容器.目前市场上面常用的开源Java Web容器有Tomcat,resin和Jetty. 注意Web容器和HTTP服务器的不同,虽然都是处理web请求的. 在HTTP服务器领域,Apache HTTP的效率是最高的,也是最稳定的,但是只能用于处理静态请求,如果需要支持动态页面请求,则必须要安装相应的插件…
需求:在tomcat启动时开启一个定时任务. 想法:容器启动时执行方法,最容易想到的就是servlet中可以配置load-on-startup,设置一个正整数也就可以随容器一起启动. 问题:上面的方法很好,但是由于定时任务需要去操作数据库,而项目采用了spring的依赖注入来管理对象,而servlet并不受Spring的管理.若此时在servlet中注入Spring管理的对象,则会报错:javax.naming.NameNotFoundException: Name com.test.InitS…
Spring Boot 2 (七):Spring Boot 如何解决项目启动时初始化资源 在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等.今天就给大家介绍一个 Spring Boot 神器,专门帮助大家解决项目启动初始化资源操作. 这个神器就是 CommandLineRunner,CommandLineRunner 接口的 Component 会在所有 Spring Beans 都初始化之后,SpringApplication.run() 之前执行,非常适合在应用…
在我们用 springboot 搭建项目的时候,有时候会碰到在项目启动时初始化一些操作的需求 ,针对这种需求 spring boot为我们提供了以下几种方案供我们选择: ApplicationRunner 与 CommandLineRunner 接口 Spring容器初始化时InitializingBean接口和@PostConstruct Spring的事件机制 ApplicationRunner与CommandLineRunner 我们可以实现 ApplicationRunner 或 Com…
docker中启动容器有以下两种情况. 第一种是通过 # docker run containerid 启动一个容器. 第二种是重新启动已经关闭的容器. # docker start containerid 那么这两种情况在启动容器的时候,如何指定容器启动时需要运行的脚本呢. 通常,在容器中部署一个web网站,通过外网访问时,通常在容器中先要部署. 对于动态网站,也需要对其载体(服务器)进行启动运行. 这里以 *.sh 文件为例子. 命令如下: # docker run -i -t image…
开发框架:spingMVC+myBatis 解决方案:给web容器添加一个Listener类,在容器启动的时候执行Listener的“初始化”方法,在这个初始化方法中执行查询数据库的所有操作,然后将数据库中的信息缓存起来 问题:上面的方法很好,但问题是如何去查询数据库,由于使用了spring的IOC特性,查询数据库的service控制dao层,dao层访问数据库,而Listener类只是在系统启动的时候会执行初始化方法,但是“service”对象没有被spring管理,也就是说没有service…
tomcat 8.0.36 知识点: 通过配置loadOnStartup可以设置Servlet是否在Tomcat启动时加载,以及按值大小进行有序加载,其最小有效值为0,最大有效值为Integer.MAX_VALUE. Jsp Servlet的类是org.apache.jasper.servlet.JspServlet. Jsp Servlet是强制性启动时加载,其loadOnStartup的默认值,或其值是失效值时,将使用最大有效值. 通过配置Context或Host的failCtxIfServ…
什么时候创建嵌入式的Servlet容器工厂?什么时候获取嵌入式的Servlet容器并启动Tomcat: 获取嵌入式的Servlet容器工厂: 1).SpringBoot应用启动运行run方法 2).refreshContext(context);SpringBoot刷新IOC容器[创建IOC容器对象,并初始化容器,创建容器中的每一个 组 件 ] : 如 果 是 web 应 用 创 建 AnnotationConfigEmbeddedWebApplicationContext, 否 则 : Anno…
问题描述: 什么时候创建嵌入式的Servlet容器工厂? 什么时候获取嵌入式的Servlet容器并启动Tomcat? *获取嵌入式的Servlet容器工厂: 1).SpringBoot应用启动运行run方法 2).refreshContext(context);SpringBoot刷新IOC容器[创建IOC容器对象,并初始化容器,创建容器中的每一个组件]:如果是web应用创建AnnotationConfigServletWebServerApplicationContext,否则:Annotat…
镜像启动时,自动执行的是~/.bashrc文件,所以,环境变量需要配置在该文件内,这样镜像启动时,可自动执行该文件,使环境变量生效. vi  ~/.bashrc ---------------------------------------------------------------------------------- # .bashrc # User specific aliases and functions alias rm='rm -i'alias cp='cp -i'alias…
private static List<ResourceEntity> resourceList = null; //初始化的全局静态变量 @Autowired private ResourceService resourceServiceTemp; private static ResourceService resourceService; //字面上看, 这个注解的意思是在构造方法之后执行(还有个PreConstruct方法) @PostConstruct public void ini…
之前使用springmvc的时候,都是写好controller和对应的数据库操作. 外界发请求的时候,controller进行一堆操作后返回相应的json数据. 似乎springmvc就是外界驱动的一样.那如果我们的服务器,要在启动的时候,就自行开一个线程一直爬某个地方的数据要怎么办呢? springmvc提供了一个接口 InitializingBean 这个接口的方法 package org.springframework.beans.factory; public interface Ini…
Spring-MVC的应用中,要实现类似的功能,主要是通过实现下面这些接口(任选一,至少一个即可) 一.ApplicationContextAware接口 +? 1 2 3 4 5 6 7 8 9 package org.springframework.context;   import org.springframework.beans.BeansException; import org.springframework.beans.factory.Aware; import org.spri…
http://www.ityouknow.com/springboot/2018/05/03/spring-boot-commandLineRunner.html 在我们实际工作中,总会遇到这样需求,在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等.今天就给大家介绍一个 Spring Boot 神器,专门帮助大家解决项目启动初始化资源操作. 这个神器就是 CommandLineRunner,CommandLineRunner 接口的 Component 会在所有 S…
在我们实际工作中,总会遇到这样需求,在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等.今天就给大家介绍一个 Spring Boot 神器,专门帮助大家解决项目启动初始化资源操作. 这个神器就是 CommandLineRunner,CommandLineRunner 接口的 Component 会在所有 Spring Beans都初始化之后,SpringApplication.run()之前执行,非常适合在应用程序启动之初进行一些数据初始化的工作. 接下来我们就运用案…
搜了很多资料发现并未解决,以下方法失败!求大神评论给出完美方案 1.首先需要编写需要启动的脚本,并将脚本放在 /etc/init.d/目录下 如:cs.sh 2.修改权限 3.chkconfig --add cs.sh 4. chkconfig cs.sh on 启动容器时 docker run -idt ***/*** /bin/bash cs1.sh: cs2.sh: cs3.sh 每个指令后面加上分号 最好在每个脚本后面都加上 tail -f /dev/null…
在我们实际工作中,总会遇到这样需求,在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等.今天就给大家介绍一个 Spring Boot 神器,专门帮助大家解决项目启动初始化资源操作. 这个神器就是 CommandLineRunner,CommandLineRunner 接口的 Component 会在所有 Spring Beans 都初始化之后,SpringApplication.run() 之前执行,非常适合在应用程序启动之初进行一些数据初始化的工作. 接下来我们就运…
1.下载quartz的相应jar包 2.增加spring配置文件(applicationContext-quartz.xml) 内容如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema…
在日常的项目开发中经常会遇到这样的需求:项目启动的时候进行一些一次性的初始化工作,如读取加载资源文件.或者执行其它外部程序. 这个时候我们就可以用到spring-boot为我们提供的一种扩展机制--Runner. 在spring-boot中提供了两种Runner接口:ApplicationRunner和CommandLineRunner,接下来我们就看看他们都是怎么使用的 Runner的使用 要想在我们的项目中使用ApplicaitonRunner和CommandLineRunner只需要实现如…
最近在看spring的源码,关于web.xml文件在容器(Tomcat.JBOSS等)启动时加载顺序问题很混乱,通过搜集资料,得出以下的结论: 1.加载顺序与它们在 web.xml 文件中的先后顺序无关.即不会因为 filter 写在 listener 的前面而会先加载 filter.最终得出的结论是:context-param -> listener -> filter -> servlet; 容器首先会去它的配置文件web.xml读取两个节点:  <context-param&…
背景:面试中很基础的一个问题,所以有必要好好整理一番. Servlet体系结构是建立在 Java 多线程机制上的,它的生命周期由 Web 容器负责. 当客户端第一次请求某个 Servlet 时,Servlet 容器将会根据 web.xml 的配置文件实例化这个 Servlet 类.当有新的客户端请求该 Servlet 时,一般不会再实例化该 Servlet 类. 当有多个请求时,Servlet 容器会起多个线程来访问同一个 Servlet 实例的 service() 方法,如果该 Servlet…
红色部分为本章所述模块 所讲述的请求流程模块,大家已经很清楚了.那怎么给大家去讲的更清晰,大家理解的更容易呢?当然是,带着问题去学习,吸收或许会更快些啦.:) 开篇之前,给大家提以下几个问题,这些问题是本文的主体思路(也是个人学习路线): WEB服务器那么多,Apache.Tomcat.Nginx.Jetty.Resin,名词那么多,HTTP Server.Application Server.Web Server.Servlet Container,他们是什么?之间关系是什么?区别又在哪? C…
一 1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个ServletContext(servlet上下文),这个web项目的所有部分都将共享这个上下文. 3.容器将<context-param>转换为键值对,并交给servletContext. 4.容器创建<listener>中的类实例,创建监听器. 二  Load-on-startup Lo…
一 1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个ServletContext(servlet上下文),这个web项目的所有部分都将共享这个上下文. 3.容器将<context-param>转换为键值对,并交给servletContext. 4.容器创建<listener>中的类实例,创建监听器. 二  Load-on-startup Lo…
Servlet与Servlet容器关系 Servlet 比较这两个的区别, 就得先搞清楚Servlet 的含义, Servlet (/ˈsərvlit/ ) 翻译成中文就是小型应用程序或者小服务程序, 与之相类似的是Server (/ˈsɜːrvər/), 翻译过来是服务器的意思, 可见这二者承担类似的功能,但是Servlet更轻量, web开发的本质就一句话:客户端和服务器交换数据.于是使用 Java 的 Socket 套接字进行编程,去处理客户端来的 tcp 请求,经过编解码处理读取请求体,…
1.说明 SpringMVC作为Spring提供的MVC实现,可以实现与Spring的天然无缝联合,因为具有很广泛的用途.具体的关于SpringMVC的处理流程逻辑我在这里就不在赘述了.还是来通过源码来追述下SpringMVC的启动过程. 2.入口 DispatcherServlet作为SpringMVC的前端控制器,具有很核心的地位.来看下它的继承结构. 可以看到DispatcherServlet依次继承了GenericServlet.HttpServlet.HttpServletBean.F…
转自 https://blog.csdn.net/dhaiuda/article/details/80026354 Spring和SpringMVC的容器具有父子关系,Spring容器为父容器,SpringMVC为子容器,子容器可以引用父容器中的Bean,而父容器不可以引用子容器中的Bean. 了解了Spring与SpringMVC父子容器的关系,接下来让我们看看Spring与SpringMVC容器的初始化过程. 以下讲解使用的web.xml文件如下: <context-param> <…