在使用tomcat监听器初始化方法时,往往需要注入配置文件中的某个内容,此时在初始化方法中使用spring注解是不可行的,可以采用Spring工具类获取Bean,从而得到自己想要的值。这样做需要新建一个实体类,属性即为你想要获取的内容,然后交给spring管理,实体类对应属性值即为想要从配置文件中获取到的内容。举个列子:
初始化方法:
public void contextInitialized(ServletContextEvent sce) {
log.info("从运营平台获取H5模板初始化");
ServletContext servletContext = sce.getServletContext();
GetTemplateUtil.getTemplate(servletContext, log);
log.info("H5模板获取结束");
}
实体类:
public class CopyTemplateUrl {
private String saveTemplateUrl;//从运营平台获取模板需要的访问路径
public String getSaveTemplateUrl() {
return saveTemplateUrl;
}
public void setSaveTemplateUrl(String saveTemplateUrl) {
this.saveTemplateUrl = saveTemplateUrl;
}
}
配置文件:
server.webservice.copyTemplate.url=http://172.0.0.1
spring配置:
<!-- 向监听器中注入URL -->
<bean id="copyTemplateUrl" class="cn.easier.bill.view.data.CopyTemplateUrl">
<property name="saveTemplateUrl" value="${server.webservice.copyTemplate.url}"/>
</bean>
另外在tomcat启动时候如果需要获取当前tomcat端口可以参考一下方法:
/**
* 获取当前服务器的端口号
* @return
*/
static String getPort(){
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
Set<ObjectName> objs = null;
try {
objs = mbs.queryNames(new ObjectName("*:type=Connector,*"),
Query.match(Query.attr("protocol"), Query.value("HTTP/1.1")));
} catch (MalformedObjectNameException e) {
e.printStackTrace();
}
String port = null;
for (Iterator<ObjectName> i = objs.iterator(); i.hasNext();) {
ObjectName obj = i.next();
obj.getCanonicalName();
port = obj.getKeyProperty("port");
}
return port;
}