在Erwin评论后编辑:
您好,
我需要一种方法远程在UNIX机器上编译程序,然后获得编译结果。
我可以通过SSH直接进行,但编译器不允许同时运行10个以上的编译。因此,如果30个人试图在同一时刻发布一个编辑,那么应该启动10个编译,其他20个应该排队。
到目前为止,我尝试将spring batch admin与自定义启动程序一起使用,该启动程序将通过REST API发送的编译传递给大小为10的线程池执行程序。编译完成后,您可以通过REST获取结果API。
只要没有太多人查询spring batch admin,此方法就可以正常工作。 但是当有太多人使用REST API向应用程序发送请求时,我遇到了数百个线程被阻塞等待连接数据库的问题:
"http-8090-200" daemon prio=10 tid=0x000000005c0a4000 nid=0x22a0 in Object.wait() [0x0000000051e36000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:485)
at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:810)
- locked <0x00002aaab3a6d7b0> (a org.apache.commons.pool.impl.GenericObjectPool)
at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:96)
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:572)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:636)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:665)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:673)
at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:728)
at org.springframework.jdbc.core.simple.SimpleJdbcTemplate.queryForObject(SimpleJdbcTemplate.java:169)
at org.springframework.jdbc.core.simple.SimpleJdbcTemplate.queryForObject(SimpleJdbcTemplate.java:174)
at org.springframework.batch.core.repository.dao.JdbcJobExecutionDao.getJobExecution(JdbcJobExecutionDao.java:244)
at org.springframework.batch.admin.service.SimpleJobService.getJobExecution(SimpleJobService.java:309)
at org.springframework.batch.admin.web.JobExecutionController.detail(JobExecutionController.java:313)
我试图调试我是如何达到这一点的,但我找不到解决方案。
所以我试图看看是否有其他解决方案可以对编译进行排队,因为Spring批处理管理器太复杂了,我无法找到任何其他解决方案。
是否有一个简单的解决方案来排队这些编译并从Java程序中获取结果?
谢谢