优化代码逻辑,使用ServiceLoader加载未知类的实例

This commit is contained in:
2019-05-15 17:04:42 +08:00
parent 3e1fc4ac19
commit ce8c0362d7
14 changed files with 175 additions and 15 deletions

View File

@@ -1,14 +1,11 @@
package net.tccn.base;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.OfficeXmlFileException;
import org.apache.poi.ss.formula.functions.T;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
@@ -278,8 +275,7 @@ public class ExcelKit {
List<Map> list = new ArrayList<>();
int t = 0;
r:
for (int i = 0; i <= lastRowNum; i++) {
r:for (int i = 0; i <= lastRowNum; i++) {
Row row = sheet.getRow(i);
if (row == null) continue;
short cellNum = row.getLastCellNum();
@@ -376,7 +372,8 @@ public class ExcelKit {
}
private static Workbook getWorkbook(File file) throws IOException {
Workbook wk;
return WorkbookFactory.create(file);
/*Workbook wk;
FileInputStream fis = new FileInputStream(file);
try {
wk = new HSSFWorkbook(fis);//if excel version 2007+ will throws OfficeXmlFileException
@@ -392,6 +389,6 @@ public class ExcelKit {
}
}
return wk;
return wk;*/
}
}

View File

@@ -0,0 +1,9 @@
package net.tccn.base;
/**
* ServiceLoader 管理标识
* @author: liangxianyou
*/
public interface IService {
String getType();
}

View File

@@ -65,4 +65,24 @@ public class Liangs {
return toArray(list);
}
/**
*
* @param type 待加载的class 类型
* @param name class 的实现名称
* @param <T> 泛型<T>
* @return
*/
public static <T extends IService> T getDbSource(Class<T> type, String name) {
ServiceLoader<T> loader = ServiceLoader.load(type);
Iterator<T> iterator = loader.iterator();
if (iterator.hasNext()) {
T dbSource = iterator.next();
if (name.equalsIgnoreCase(dbSource.getType())) {
return dbSource;
}
}
return null;
}
}

View File

@@ -4,7 +4,6 @@ import lombok.Data;
import net.tccn.base.arango.Doc;
import javax.persistence.Table;
import java.util.List;
/**
* 数据库平台
@@ -21,7 +20,7 @@ public class DbAccount extends Doc<DbAccount> {
private String url; //数据库连接地址
private String user; //账号
private String pwd; //密码
private List<String> catalogs; //库
private String[] catalogs; //库
//----------------------------

View File

@@ -1,5 +1,7 @@
package net.tccn.dbq.jdbc.api;
import net.tccn.base.Liangs;
import java.util.List;
import java.util.concurrent.CompletableFuture;
@@ -14,9 +16,12 @@ public class DbKit implements DbSource{
public DbKit(DbAccount dbAccount) {
this.dbAccount = dbAccount;
if ("mysql".equalsIgnoreCase(dbAccount.getCate())) {
dbSource = new DbSourceMysql(dbAccount);
} else {
try {
DbSource dbSource = Liangs.getDbSource(DbSource.class, dbAccount.getCate());
dbSource.setDbAccount(dbAccount);
this.dbSource = dbSource;
} catch (Exception e) {
throw new IllegalArgumentException(String.format("创建DbKit失败数据库类型[cate:%s]未知", dbAccount.getCate()));
}
}
@@ -31,6 +36,11 @@ public class DbKit implements DbSource{
}
@Override
public void setDbAccount(DbAccount dbAccount) {
// nothing to do
}
@Override
public <T> List<T> findList(String sql, Class<T> type) {
return dbSource.findList(sql, type);
@@ -73,4 +83,9 @@ public class DbKit implements DbSource{
public CompletableFuture<Void> exetuteAsync(String sql) {
return CompletableFuture.runAsync(() -> exetute(sql));
}
@Override
public String getType() {
return null;
}
}

View File

@@ -1,12 +1,16 @@
package net.tccn.dbq.jdbc.api;
import net.tccn.base.IService;
import java.util.Date;
import java.util.List;
/**
* Created by liangxianyou at 2019/3/12 14:07.
*/
public interface DbSource {
public interface DbSource extends IService {
void setDbAccount(DbAccount dbAccount);
<T> List<T> findList(String sql, Class<T> type);

View File

@@ -23,6 +23,15 @@ public class DbSourceMysql implements DbSource {
private DbAccount dbAccount;
private String catalog;
public DbSourceMysql() {
}
public void setDbAccount(DbAccount dbAccount) {
this.dbAccount = dbAccount;
this.accountKey = dbAccount.accountKey();
}
public DbSourceMysql(DbAccount dbAccount) {
this.dbAccount = dbAccount;
this.accountKey = dbAccount.accountKey();
@@ -33,6 +42,11 @@ public class DbSourceMysql implements DbSource {
this.accountKey = dbAccount.accountKey();
}
@Override
public String getType() {
return "mysql";
}
@Override
public <T> List<T> findList(String sql, Class<T> type) {
Connection connection = connection();

View File

@@ -0,0 +1 @@
net.tccn.dbq.jdbc.api.DbSourceMysql