只是简单写了一个demo版本,实际应用的时候,可以使用环切,将datasources使用map缓存起来,不需要每次都创建对象。
-----------------maven---------------------
<dependencies>
<!-- spring常用jar包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<!-- 数据库连接 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
<!-- spring测试用 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
<scope>provided</scope>
</dependency>
<!-- 自动重启工具 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>4.1.0</version>
</dependency>
</dependencies>
<!-- Spring boot编译插件 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork><!-- 如果没有该配置,热部署的devtools不生效 -->
</configuration>
</plugin>
</plugins>
</build>
package com.phone.jdbc;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import com.phone.entity.MyDatasource;
@RestController
public class QueryDa {
/**
* 动态使用任意数据库查询数据
* @param myDatasource
*/
@PostMapping("testConnection")
public List<Map<String,Object>> testConnection(@RequestBody MyDatasource myDatasource) {
DriverManagerDataSource dataSource=new DriverManagerDataSource();
String url = "jdbc:DBTYPE://IP:PORT/DB?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT";
url=url.replace("DBTYPE", myDatasource.getDbType()).replace("IP", myDatasource.getIp()).replace("PORT", myDatasource.getPort()).replace("DB", myDatasource.getDb());
dataSource.setUsername(myDatasource.getUsername());
dataSource.setPassword(myDatasource.getPassword());
dataSource.setDriverClassName(myDatasource.getDriverClassName());
dataSource.setUrl(url);
JdbcTemplate jdbcTemplate=new JdbcTemplate();
jdbcTemplate.setDataSource(dataSource);
String sql=myDatasource.getSql();
List<Map<String,Object>> queryForList = jdbcTemplate.queryForList(sql);
if(queryForList==null) {
return Collections.EMPTY_LIST;
}
for (Map<String, Object> map : queryForList) {
System.out.println("-------------------");
for (String key : map.keySet()) {
Object object = map.get(key);
System.out.println("key:"+key+"|value:"+object);
}
}
return queryForList;
}
}
package com.phone.entity;
import lombok.Data;
@Data
public class MyDatasource {
private String driverClassName;
private String db;
private String username;
private String password;
private String ip;
private String port;
private String sql;
private String dbType;
}