在Spring中获取数据库路径时出错

时间:2019-08-09 11:08:30

标签: java spring spring-boot derby

我是Spring Boot的新手,我正在编写一个代码,当我通过邮递员的请求访问控制器时,它将获取我数据库的路径。但是使用我编写的代码,它使我出错。我写的代码是在Google上找到的。 我可以得到一些帮助吗? 这是我的控制器代码:

import org.apache.derby.client.am.SqlException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.*;

import javax.sql.DataSource;
import javax.validation.Valid;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import java.util.List;

@RestController
@RequestMapping("/createBackup")
public class UserController
{

    @Autowired
    private ApplicationContext appContext;

    @GetMapping("/getPath")
    public void getPath()
    {
        DataSource ds = (DataSource)appContext.getBean("dataSource");
        Connection conn = null;
        DatabaseMetaData dmd = null;
        String url = "";
        try
        {
            conn = ds.getConnection();
            dmd = conn.getMetaData();
            url = url + dmd.getURL();
        }
        catch(SQLException sqe)
        {
            sqe.printStackTrace();
        }
        System.out.println(url);
    }
}

我用邮递员打这个控制器,并获取我的数据库的路径。现在,我正在控制台上将其打印出来,但是这个错误困扰着我很多。

服务完美启动。但是,当我通过Postman的请求命中此控制器时,即是我收到此错误:

java.lang.AbstractMethodError: org.apache.derby.client.net.NetConnection.isValid(I)Z
    at com.zaxxer.hikari.pool.PoolBase.checkDriverSupport(PoolBase.java:454) ~[HikariCP-3.2.0.jar:na]
    at com.zaxxer.hikari.pool.PoolBase.setupConnection(PoolBase.java:421) ~[HikariCP-3.2.0.jar:na]
    at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:374) ~[HikariCP-3.2.0.jar:na]
    at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:198) ~[HikariCP-3.2.0.jar:na]
    at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:467) ~[HikariCP-3.2.0.jar:na]
    at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:541) ~[HikariCP-3.2.0.jar:na]
...................................and on and on it goes..............................

1 个答案:

答案 0 :(得分:1)

derby驱动程序实现与JDBC API之间存在差异。

在这里回答了类似的问题: spring 3, hibernate, dbcp and derby connection issue

如果可能,请使用最新版本的derby驱动程序,以及最新版本的Spring boot。 可以在这里找到带有Spring boot / derby的简单Rest Controller的示例: https://github.com/springframeworkguru/spring-boot-apache-derby-example/tree/master/src/main/java/guru/springframework

请注意,如果要从数据源获取信息,则注入Bean会更容易:

@Autowired
private Datasource ds;

比通过

获得
DataSource ds = (DataSource)appContext.getBean("dataSource");