2015-08-10 19 views
5

Tôi nhận được IllegalArgumentException khi tạo ThreadPoolExecutor theo cách sau.Không thể tạo ThreadPoolExecutor từ ngữ cảnh ứng dụng Spring

<bean id="processorQueue" class="java.util.concurrent.LinkedBlockingDeque"/> 
<bean id="processorThreadPool" class="java.util.concurrent.ThreadPoolExecutor"> 
     <constructor-arg index="0" type="int" value="10"/> 
     <constructor-arg index="1" type="int" value="20"/> 
     <constructor-arg type="long" value="1"/> 
     <constructor-arg> 
      <value type="java.util.concurrent.TimeUnit">MINUTES</value> 
     </constructor-arg> 
     <constructor-arg ref="processorQueue"/> 
</bean> 

Tôi đang làm gì sai? (Tôi đang sử dụng Spring 3.2 với Java 8)

Đây là dấu vết ngăn xếp.

2015-08-10 14:20:14 DefaultListableBeanFactory doGetBean [http-nio-8080-exec-37] DEBUG: Returning cached instance of singleton bean 'processorQueue' 
2015-08-10 14:20:14 DispatcherServlet initServletBean [http-nio-8080-exec-37] ERROR: Context initialization failed 
java.lang.IllegalArgumentException 
    at org.springframework.asm.ClassReader.<init>(Unknown Source) 
    at org.springframework.asm.ClassReader.<init>(Unknown Source) 
    at org.springframework.asm.ClassReader.<init>(Unknown Source) 
    at org.springframework.core.LocalVariableTableParameterNameDiscoverer.inspectClass(LocalVariableTableParameterNameDiscoverer.java:110) 
    at org.springframework.core.LocalVariableTableParameterNameDiscoverer.getParameterNames(LocalVariableTableParameterNameDiscoverer.java:85) 
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:193) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1051) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:955) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:490) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) 
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:651) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:599) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:665) 
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:518) 
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:459) 
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:158) 
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1241) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1154) 
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:827) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:136) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:74) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:526) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1017) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:652) 
    at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1575) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1533) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

Tôi đã thử với cùng một giá trị cho corePoolSize và maximumPoolSize nhưng kết quả giống nhau.

+0

mã của bạn hoạt động tốt trong ứng dụng web của tôi, tôi đã sử dụng java 7, spring 4.0 –

+0

bạn đang sử dụng java 8 chưa? –

+0

bản sao có thể có của: http://stackoverflow.com/questions/22730801/java-se-spring-data-hibernate –

Trả lời

2

Từ javadoc (1.8) Tôi có thể thấy như sau:

@throws IllegalArgumentException if one of the following holds:<br> 
{@code corePoolSize < 0}<br> 
{@code keepAliveTime < 0}<br> 
{@code maximumPoolSize <= 0}<br> 
{@code maximumPoolSize < corePoolSize} 

tôi thêm chiết xuất của bạn với một trong những ứng dụng của tôi và nó làm việc tốt, trừ khi tôi thay đổi các thông số để vi phạm một trong các điều kiện trên và do đó buộc một IllegalArgumentException. Thứ tự của các tham số là giống nhau kể từ Java 1.5 nên cấu hình của bạn sẽ hoạt động. Bạn có thể cung cấp dấu vết ngăn xếp khi bắt đầu ứng dụng của mình không?

+0

Dennis, vui lòng kiểm tra dấu vết ngăn xếp. – Somabrata

+0

Tôi đã thử điều này với Java 8 và bối cảnh mùa xuân 3.2.14.RELEASE. Nó vẫn hoạt động. Như được mô tả bởi http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/migration-3.2.html, tôi không thêm bất kỳ phụ thuộc ASM nào trực tiếp. Ngoài bối cảnh, bạn có phụ thuộc mùa xuân nào khác trên classpath của mình không và bạn có đang sử dụng phiên bản 3.2.14 mới nhất, gần đây không? –

+0

Ồ, tôi đã sử dụng 3.2.2.RELEASE. Nó hoạt động hoàn hảo với 3.2.14.RELEASE. Trợ giúp tuyệt vời, Cảm ơn – Somabrata

1

bạn chưa đề cập đến thiết lập classpath của mình, nhưng có vẻ như bạn đang sử dụng java 8 với spring 3.2 không hỗ trợ nó. nâng cấp mùa xuân lên 4.0

+0

Cảm ơn bạn đã thông tin. Có, tôi đang sử dụng Java 8. Tôi sẽ kiểm tra với 4.0. – Somabrata

Các vấn đề liên quan