Druid简介
Druid是阿里开源的 数据库连接池 ,作为后起之秀,性能比dbcp、c3p0更高,使用也越来越广泛。
当然Druid不仅仅是一个连接池,还有很多其他的功能。
Druid的优点
高性能。性能比dbcp、c3p0高很多。
只要是 jdbc 支持的数据库,druid都支持,对数据库的支持性好。并且Druid针对oracle、 mysql 做了特别优化。
提供监控功能。可以监控sql语句的执行时间、ResultSet持有时间、返回行数、更新行数、错误次数、错误堆栈等信息,来了解连接池、sql语句的工作情况,方便统计、分析SQL的执行性能。
为什么要自动登录:
- 必须要有密码,否则别人直接访问项目地址+”/druid”就可以访问,不安全;
- 业务上不允许人工登录;
代码实现:
- 调用方式:druid api ( request ,” basic .json”);
- 访问方式:OkHttpClient;
public String druidAPI(HttpServletRequest servletRequest, String typeName) {
String result = null;
try{
String serverPort = getServerPort(servletRequest);
OkHttpClient client = new OkHttpClient().new build er(). Cookie Jar(new CookieJar() {
private final HashMap<String, List<Cookie>> cookies tore = new HashMap<>();
@Override
public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
cookieStore.put(url.host(), cookies);
}
@Override
public List<Cookie> loadForRequest(HttpUrl url) {
List<Cookie> cookies = cookieStore.get(url.host());
return cookies != null ? cookies : new ArrayList<Cookie>();
}
}).build();
// 登录api
RequestBody formBody = new FormBody.Builder()
.add(“loginUsername”, “druid账号”)
.add(“loginPassword”, “druid密码”)
.build();
Request requestLogin = new Request.Builder()
.url(serverPort + “druid/submitLogin”)
.post(formBody)
.build();
Response responseLogin = client.newCall(requestLogin).execute();
if(200 == responseLogin.code()){
// 具体API
Request requestType = new Request.Builder()
.url(serverPort + “druid/” + typeName)
.build();
Response responseType = client.newCall(requestType).execute();
result = responseType.body().string();
}
}catch(Exception e){
LOGGER.error(“调用druidAPI方法失败!”,e);
}
return result;
}
public String getServerPort(HttpServletRequest request) {
String url = request.getRequestURL(). toString ();
String uri = request.getRequestURI();
return url.substring(0, url.indexOf(uri)+1);
}