需要实现一个功能:web容器启动的时候需要加载一个listener,去把以前开启的调度重新启动起来。这个listener需要与数据库交互,但配置数据库连接和service的bean都在spring配置文件里配置,在context-param里加载。
listener加载先于context-param这个知道,但是context-param配的配置文件经测试是后加载于listener的。
最后综合各种资料,找到一种解决办法,如下。
web.xml里做如下配置:
<!-- 配置文件参数-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
<!-- 自己的listener -->
<listener>
<listener-class>futureemail.core.FixTimeListener</listener-class>
</listener>
FixTimeListener.java如下:
public class FixTimeListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
System.out.println("listener run...");
String relativePath = event.getServletContext().getInitParameter(
"contextConfigLocation");
String realPath = event.getServletContext().getRealPath(relativePath);
SpringBeanFactory.init(realPath);
futureEmailService = (FutureEmailService) SpringBeanFactory
.getBean("futureEmailService"); //即可取到bean
// ....下面逻辑省略
}
@Override
public void contextDestroyed(ServletContextEvent e) {
SpringBeanFactory.clear();
}
}
SpringBeanFactory.java如下:
public class SpringBeanFactory {
private static ApplicationContext context;
/**
* 在应用程序启动时配置spring框架
*
* @param filePath
*/
public static void init(String filePath) {
if (context == null) {
context = new FileSystemXmlApplicationContext(filePath);
}
}
public static ApplicationContext getContext() {
return context;
}
/**
* 方法用于获取bean
*
* @param name
* @return
*/
public static Object getBean(String name) {
return context.getBean(name);
}
/**
* 在应用程序关闭时,清空spring框架配置信息
*/
public static void clear() {
if (context != null) {
context = null;
}
}
}
就是这样。
PS:部署到linux后可能会有一个问题。就是context = new FileSystemXmlApplicationContext(filePath)这里,filePath与windows下不同,会被默认成相对路径。
解决方法是:在filePath前再加一个/。代码如下:
if (filePath != null && filePath.startsWith("/")) {
filePath = "/" + filePath;
}
分享到:
相关推荐
12.2.2. 在Spring容器中创建 SessionFactory 12.2.3. The HibernateTemplate 12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的...
1. Spring容器会合适的时机创建这些Bean 1. 用到这个bean的时候;利用getBean创建bean;创建好以后保存在容器中; 2. 统一创建剩下所有的bean的时候;finishBeanFactoryInitialization(); 1. 后置处理器;...
web.xml 中定义了一个名为 annomvc 的 Spring MVC 模块,按照 Spring MVC 的契约,需要在 WEB-INF/annomvc-servlet.xml 配置文件中定义 Spring MVC 模块的具体配置。annomvc-servlet.xml 的配置内容如下所示: ...
12.2.2. 在Spring容器中创建 SessionFactory 12.2.3. The HibernateTemplate 12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的...
此外lazy="true"说明地返回整个Tfile对象时,并不返回fileContent这个字段的数据,只有在显式调用tfile.getFileContent()方法时才真正从数据库中获取fileContent的数据。这是Hibernate3引入的新特性,对于包含重量...
<bean id="temperMonitorTimerJob" class="cn.sup.cd.listener.TemperatureMonitorTaskJob"></bean> <!-- 政策调度--> <bean id="temperMonitorTask" class="org.springframework.scheduling.quartz....
web项目设置在Servlet的context parameter中 事件Application Event 自定义事件,集成ApplicationEvent 定义事件监听器,实现ApplicationListener 使用容器发布事件 Spring高级话题 Spring Aware ...
5 Spring Boot与Docker(虚拟化容器技术) 110 5.1 简介 110 5.2 核心概念 111 5.3 安装Docker 112 5.4 Docker常用命令&操作 113 5.5 安装MySQL示例 114 6 Spring Boot与数据访问 115 6.1 JDBC 115 6.1.1 实现 115 ...
本教程为授权出品教程 ...监听器(ApplicationListener) 3).Spring容器启动过程; 3).web原理 1).Servlet3.0标准新增特性 2).异步请求相关 本视频使用了maven构建程序,需要同学们有对Spring.SpringMVC的基本
-- 配置spring随web容器启动时就创建 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> 在struts.xml中配置对象创建工具为spring ...
在Spring整合JMS的应用中,如果我们要进行本地的事务管理的话非常简单,只需要在定义对应的消息监听容器时指定其sessionTransacted属性为true,如: <bean id="jmsContainer" class="org.springframework.jms....
FactoryInstance 的 lookup() 方法被调用,在 SpringFactoryInstance 中,首先查找 Spring 容器,然后,通过 Bean 的 ID 查找 Bean,最终,FlexService 接口的实例被返回。 注意到 destination 的 id 并没有写死在...
FactoryInstance 的 lookup() 方法被调用,在 SpringFactoryInstance 中,首先查找 Spring 容器,然后,通过 Bean 的 ID 查找 Bean,最终,FlexService 接口的实例被返回。 注意到 destination 的 id 并没有写死在...
java8 源码 Learn Spring Bean 注解 Target 关联注解 所在模块 所在包 ...事务(Transactional) ...bean ...学习Spring的关键 ...注解就相当于在业务开发中的功能需求,重点是理解加上注解之后程序如何...容器初始化的工作。 sprin
8.7 在Session Bean中使用事务 327 8.7.1 容器管理事务 327 8.7.2 Bean管理事务 330 8.8 拦截器 332 8.9 依赖注入 335 8.9.1 EJB注入 336 8.9.2 资源注入 339 8.10 配置EJB引用 340 8.11 使用计时器进行任务调度 342...
使用Maven POM editor打开项目中的pom.xml文件,选择Dependencies,在Dependencies栏目点击Add进行,首先弹出一个搜索按钮,例如输入spring-web,就会自动搜索关于spring-web相关的jar包,我们选择3.0.5版本的spring...
①IoC 与 Bean 配置、 管理 ②AOP 与事务、 权限控制 ③S2SH 整合开发 ④Spring, JPA 整合 2、 Hibernate ①ORM 与持久化映射 ②延迟加载、 性能优化 ③HQL 查询、 条件查询、 SQL 查询 ④二级缓存与查询缓存 3、 ...
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...