Druid 导致图标字体文件不能加载的问题

本文详细介绍了在使用SpringMVC搭建WEB项目框架时,遇到图标字体不显示的问题,并通过排查发现是由于未正确配置Druid过滤器导致的。文章提供了解决方案,在exclusions配置中添加/font/*即可解决。

搭建WEB项目框架时,图标字体总是不显示,后台偶尔报下面的错误,刚开始以为是因为使用SpringMVC没有正确的映射字体文件,DEBUG到源码中才发现是因为配置了Druid过滤器但没有排除.eot,.woff等后缀的文件。

在exclusions配置中加上/font/*,就可以了

 

2015-09-29 13:35:09.380:WARN:oejs.ServletHandler:/fonts/fontawesome-webfont.eot
java.lang.IllegalArgumentException: No matching constant for [0]
	at org.springframework.http.HttpStatus.valueOf(HttpStatus.java:488)
	at org.springframework.web.context.request.ServletWebRequest.isCompatibleWithConditionalRequests(ServletWebRequest.java:244)
	at org.springframework.web.context.request.ServletWebRequest.checkNotModified(ServletWebRequest.java:181)
	at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:240)
	at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:51)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:735)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1496)
	at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1476)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:85)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1467)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:501)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557)
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:429)
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
	at org.eclipse.jetty.server.Server.handle(Server.java:370)
	at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:494)
	at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:971)
	at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1033)
	at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:644)
	at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
	at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
	at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:696)
	at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:53)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
	at java.lang.Thread.run(Thread.java:745)
 <filter>
  <filter-name>DruidWebStatFilter</filter-name>
  <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
  <init-param>
   <param-name>exclusions</param-name>
   <param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/font/*,/druid/*</param-value>
  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>DruidWebStatFilter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>
 <servlet>
  <servlet-name>DruidStatView</servlet-name>
  <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>DruidStatView</servlet-name>
  <url-pattern>/druid/*</url-pattern>
 </servlet-mapping>

转载于:https://my.oschina.net/morven/blog/512289

### 回答1: Druid是一款开源的分布式数据库连接池,用于提供高效稳定的数据库连接管理和查询性能优化。当我们需要修改Druid的数据源配置时,通常情况下需要重启服务器才能使修改生效。但是,Druid也提供了一种在不重启服务器的情况下自动加载修改后的数据源配置的方法。 要实现自动加载修改后的数据源配置,我们可以通过使用Druid的动态数据源管理功能来实现。首先,我们需要将Druid的数据源配置信息保存在外部文件中,比如XML或者properties文件。然后,在应用程序启动时,我们可以使用Druid提供的配置管理类DynamicDataSourceFactory将外部配置文件中的数据源配置加载Druid中。 在实际使用过程中,如果我们需要修改数据源配置,我们只需修改外部配置文件中的数据源配置,并保存。此时,我们无需重启服务器,Druid会自动检测到外部配置文件的修改,并重新加载配置信息。这样,我们就实现了在不重启服务器的情况下自动加载修改后的数据源配置。 需要注意的是,为了使Druid能够自动加载修改后的数据源配置,我们需要在配置文件中设置相关的自动加载属性,比如配置自动检测修改、重新加载等。这样,Druid就能够自动监测外部配置文件的修改,并在需要时重新加载数据源配置信息。 总的来说,通过使用Druid的动态数据源管理功能,我们可以实现在不重启服务器的情况下自动加载修改后的数据源配置。这种方式可以提高开发的效率,同时也能够避免因重启服务器而导致的系统中断和服务不可用的情况。 ### 回答2: 在Druid中,修改数据源并自动加载,可以通过以下步骤实现而无需重启: 1. 打开Druid的配置文件,通常是`druid.properties`或者`application.properties`。 2. 找到需要修改的数据源配置项,对应的配置格式可能是`spring.datasource.[datasource-name].property=value`,其中`[datasource-name]`是你要修改的数据源名称。 3. 将需要修改的配置项进行修改,可以是数据库连接URL、用户名、密码等。 4. 保存配置文件。 5. 进入Druid的管理界面,通常是通过浏览器访问`http://localhost:8080/druid/`。 6. 在管理界面中,找到数据源管理的选项,通常是"数据源"或者"连接池"。 7. 在数据源管理页面中,可以看到已存在的数据源列表,找到目标数据源名称。 8. 点击目标数据源名称,进入数据源详情页面。 9. 在数据源详情页面中,找到"测试链接"或者"测试连接池"的按钮,点击进行测试。 10. 如果测试连接成功,说明修改的数据源已经生效。如果测试连接失败,可以检查配置文件中修改的配置项是否正确。 11. 修改完成后,Druid会自动重新加载数据源,无需重启服务即可生效。 需要注意的是,修改数据源配置可能会影响到服务的稳定性和性能,建议在修改之前进行充分的测试和评估。此外,具体的操作步骤可能会因Druid版本或配置文件格式的不同而有所差异,以上步骤仅作为一般参考。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值