Spring Boot 2.1.2 创建动态数据库连接只是为了运行查询

Posted

技术标签:

【中文标题】Spring Boot 2.1.2 创建动态数据库连接只是为了运行查询【英文标题】:Spring Boot 2.1.2 Create dynamic DB connection just to run a query 【发布时间】:2019-12-30 16:09:24 【问题描述】:

在Spring Boot 2.1.2项目中,application.properties中定义了一个默认的PostgreSQL db连接:

spring.datasource.url=jdbc:postgresql://host:port/dbName
spring.datasource.username=username
spring.datasource.password=pass

Postgre DB 没有任何问题,但是,我很少需要通过 JDBC 连接来连接另一个 DB (MsSql)。 我只需要运行一个查询,并从 mssql 表的视图中处理结果列表。 我尝试的是;

为 Mssql 将 jdbc 驱动程序添加到 Pom.xml:

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>7.2.1.jre11</version>
    <scope>test</scope>
</dependency>

连接到 sql-server 并运行查询:

@GetMapping(path = "/getKonteynersFromSifirAtikServis/", produces = "application/json")
public ResponseEntity<ResponseStatusDto> getKonteynersFromSifirAtikServis() 
    try 
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        dataSource.setUrl("jdbc:mysql://host:1433/msDbName");
        dataSource.setUsername("ms_user");
        dataSource.setPassword("ms_pass");

        JdbcTemplate template = new JdbcTemplate(dataSource);
        SqlRowSet sqlRowSet = template.queryForRowSet("SELECT * FROM dbo.viewName;");

     catch (Exception e) 
        return new ResponseEntity<ResponseStatusDto>(ResponseStatusDto.createErrorDto(e.getMessage(), e), HttpStatus.ACCEPTED);
    

这不起作用。它抛出:

Could not load JDBC driver class [com.microsoft.sqlserver.jdbc.SQLServerDriver]

我一直很难在 pom 定义中加载 mssql-jdbc。已解决制作版本 7.2.1.jre11。

【问题讨论】:

试用版本 7.4.1.jre8 依赖的范围设置为 test 。删除相同并尝试运行 【参考方案1】:

依赖范围设置为test。

test 这个范围表示不需要依赖 应用正常使用,仅供测试使用 编译和执行阶段。这个范围是不可传递的。

删除相同并尝试运行

【讨论】:

上帝保佑你!默认情况下,maven 依赖项是作用域测试,我没有意识到它会阻止访问编译作用域。现在,它可以使用驱动程序,但是,此时,我得到:com.microsoft.sqlserver.jdbc.SQLServerException:端口号 1433/DbName 无效,即使我可以通过 DBeaver 使用相同的设置进行访问。我已经检查过防火墙上启用了 IntelliJ 和 Java 服务... 使用的连接URL是mysql格式。从细节来看,我假设您正在连接到 Microsoft SQL Server。请检查以下 URL 以识别正确的格式:alvinalexander.com/java/…。 db_url = jdbc:microsoft:sqlserver://HOST:1433;DatabaseName=DATABASE 哦..你是对的:jdbc:sqlserver://HOST:1433;databaseName=DBNAME 工作...谢谢。 很高兴能帮上忙!祝你新年快乐

以上是关于Spring Boot 2.1.2 创建动态数据库连接只是为了运行查询的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot:实现MyBatis动态创建表

Spring Boot创建动态数据源:当前正在创建请求的bean:是否存在无法解析的循环引用?

当我进行 Rest api 调用时,使用 Spring Boot 动态创建列/表

Spring Boot 多数据源配置

基于Spring Boot,使用JPA动态调用Sql查询数据

Spring Boot 工厂 Bean 创建顺序