stackoverflowerror-查询数据库浏览器报出500错误:stackOverFlowError

问题描述

查询数据库浏览器报出500错误:stackOverFlowError

我在做mybatis+spring+shardbatis进行分库分表,当我查询所有记录时,在浏览器里报500错误,异常信息如下:
java.lang.StackOverflowError
java.util.concurrent.AbstractExecutorService.(AbstractExecutorService.java:71)
java.util.concurrent.ThreadPoolExecutor.(ThreadPoolExecutor.java:1302)
java.util.concurrent.ThreadPoolExecutor.(ThreadPoolExecutor.java:1195)
org.apache.tomcat.jdbc.pool.ConnectionPool.(ConnectionPool.java:116)
org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:115)
org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:102)
org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:126)
org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:85)
org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource.getConnection(AbstractRoutingDataSource.java:169)
org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDataSource(PooledConnection.java:223)
org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:179)
org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:699)
org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:633)
org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:484)
org.apache.tomcat.jdbc.pool.ConnectionPool.(ConnectionPool.java:142)
org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:115)
org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:102)
org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:126)
org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:85)
org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource.getConnection(AbstractRoutingDataSource.java:169)
org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDataSource(PooledConnection.java:223)
org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:179)
org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:699)
org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:633)
org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:484)
org.apache.tomcat.jdbc.pool.ConnectionPool.(ConnectionPool.java:142)
org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:115)
org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:102)
org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:126)
org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:85)
org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource.getConnection(AbstractRoutingDataSource.java:169)
org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDataSource(PooledConnection.java:223)
org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:179)
org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:699)
org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:633)
org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:484)
org.apache.tomcat.jdbc.pool.ConnectionPool.(ConnectionPool.java:142)
org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:115)
org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:102)
org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:126)
org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:85)......(后面还有很多重复的);

TestController.java里的内容如下:
   @Autowired
    private TestService service;

    @RequestMapping("/query")
    public ModelAndView query()
    {
        ModelAndView mv = new ModelAndView();

        List<Test> result = new ArrayList<Test>();
        for(int i = 1;i<=4;i++)
        {
            Map<String, Object> param = ImmutableMap.<String, Object> of("a", i);
            List<Test> res = service.queryAll(param);
            result.addAll(res);
        }
        System.out.println(result);
        mv.addObject("tests",result);
        mv.setViewName("test");
        return mv;
    }

TestMapper.java内容如下:

 @DbShard(dbKey = "ds", rule = "$a$ % 2")//ds0,ds1(shard0,shard1)
@TableShard(tablePattern = "test", rule = "leftPad($a$ % 4, 3)")//补足3位(000,001,002,003)
@Repository
public interface TestMapper {

    public void save(@DbShardWith(props = "a") @TableShardWith(props = "a") Test test);

    public List<Test> query(@DbShardWith(props = "a") @TableShardWith(props = "a") Map<String, Object> param);

    public void update(@DbShardWith(props = "a") @TableShardWith(props = "a") Map<String, Object> param);

    public List<Test> queryAll(@DbShardWith(props = "a") @TableShardWith(props = "a") Map<String, Object> param);

}

jsp里没什么,index里有请求controller的跳转,test.jsp显示所有记录

PS:最后我想是不是与数据源的配置有关,但感觉又不是,因为在main函数里测试是好的(附上数据源),还有VM options我也设置了,也没用:

 <!--设置数据源ds0,ds1-->
    <bean id="ds0" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="${jdbc.url0}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="maxActive" value="30"/>
        <property name="maxIdle" value="10"/>
        <property name="maxWait" value="6000"/>
        <property name="defaultAutoCommit" value="true"/>
        <property name="testOnBorrow" value="true"/>
        <property name="validationQuery" value="select 1"/>
        <property name="validationInterval" value="60000"/>
    </bean>

    <bean id="ds1" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="${jdbc.url1}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="maxActive" value="30"/>
        <property name="maxIdle" value="10"/>
        <property name="maxWait" value="6000"/>
        <property name="defaultAutoCommit" value="true"/>
        <property name="testOnBorrow" value="true"/>
        <property name="validationQuery" value="select 1"/>
        <property name="validationInterval" value="60000"/>
    </bean>

    <bean id="dataSource" class="org.lysu.shard.ds.ShardDataSource">
        <property name="targetDataSources">
            <map key-type="java.lang.String">
                <entry key="ds_0" value-ref="ds0"/>
                <entry key="ds_1" value-ref="ds1"/>
            </map>
        </property>
        <property name="defaultTargetDataSource" ref="ds0"/>
    </bean>
 vm options:
 -Xms256m
-Xmx512m
-XX:PermSize=128M
-XX:MaxNewSize=256m
-XX:MaxPermSize=256m

解决方案

stackoverflow说明无限递归了。比如说你的表关联了外键,而外键又包含这个记录。这种情况,你需要用懒惰加载。

解决方案二:

可能是…… ……

时间: 2024-08-31 14:36:39

stackoverflowerror-查询数据库浏览器报出500错误:stackOverFlowError的相关文章

mysql数据库查询怪事-查询数据库报错,错误提示如下,代码如下

问题描述 查询数据库报错,错误提示如下,代码如下 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? and sex=?' at line 1 解决方案 在执行 rs = pstat.executeQuery(sql); 之前 将sql打印出来,System.out.print

ajax请求php一直执行error函数,数据库操作正常,错误500

问题描述 ajax请求php一直执行error函数,数据库操作正常,错误500 $.ajax({ type:""post"" url:""../php/insert_articles.php"" data:""title="" +tle +""&content="" + cnt +""&time="&q

php iis mysql-用PHP实现excel数据导入数据库,但是提示500错误,服务器是IIS,求高手指点

问题描述 用PHP实现excel数据导入数据库,但是提示500错误,服务器是IIS,求高手指点 require_once ('PHPExcel.php');require_once ('PHPExcel/IOFactory.php');require_once ('PHPExcel/Reader/Excel5.php');if($_POST['leadExcel'] == ""true""){ $filename = $_FILES['inputExcel']['n

sparql查询 jena java-java代码借助jena实现Sparql查询,报出一下错误,有遇到过的么?

问题描述 java代码借助jena实现Sparql查询,报出一下错误,有遇到过的么? Exception in thread "main" HttpException: HttpException: 502 Bad Gateway: HttpException: 502 Bad Gateway at com.hp.hpl.jena.sparql.engine.http.HttpQuery.execCommon(HttpQuery.java:337) at com.hp.hpl.jena

数据库-mysql查询出现1054 Unknown column错误

问题描述 mysql查询出现1054 Unknown column错误 1 queries executed, 0 success, 1 errors, 0 warnings 查询:select * from orders where oid=1a0b3ae07ae74b08872fa140a5f805f0 LIMIT 0, 1000 错误代码: 1054 Unknown column '1a0b3ae07ae74b08872fa140a5f805f0' in 'where clause' 有人

java-Struts2注册,500错误,数据无法进入数据库

问题描述 Struts2注册,500错误,数据无法进入数据库 控制台输出的错误信息 SEVERE: Exception occurred during processing request: null java.lang.NullPointerException at slzhao.db.DBService.register(DBService.java:47) at slzhao.action.RegisterAction.execute(RegisterAction.java:27) at

新浪SAE部署应用,报出500的空指针错误,在本地运行良好,请问是什么原因

问题描述 新浪SAE部署应用,报出500的空指针错误,在本地运行良好,请问是什么原因 解决方案 http://tangjiong.iteye.com/blog/2107407

mybatis-使用MyBatis框架向MySQL数据库增加数据使用浏览器访问出现错误

问题描述 使用MyBatis框架向MySQL数据库增加数据使用浏览器访问出现错误 org.apache.ibatis.binding.BindingException: Parameter 'name' not found. Available parameters are [2, 1, 0, param1, param2, param3] at org.apache.ibatis.binding.MapperMethod$ParamMap.get(MapperMethod.java:165)

database-在数据获取查询时在数据库类中的错误

问题描述 在数据获取查询时在数据库类中的错误 我想通过 rowId 和 subjectId 从表格中获取数据,但是获取错误: The method query(boolean, String, String[], String, String[], String, String, String, String) in the type SQLiteDatabase is not applicable for the arguments (boolean, String, String[], St