马府强
2 years ago
24 changed files with 554 additions and 56 deletions
@ -0,0 +1,23 @@ |
|||||
|
package com.wm.file.config; |
||||
|
|
||||
|
|
||||
|
import org.springframework.boot.context.properties.ConfigurationProperties; |
||||
|
import org.springframework.context.annotation.Bean; |
||||
|
import org.springframework.context.annotation.Configuration; |
||||
|
|
||||
|
import javax.sql.DataSource; |
||||
|
|
||||
|
@Configuration |
||||
|
public class DataSourceConfig { |
||||
|
|
||||
|
@Bean |
||||
|
@ConfigurationProperties(prefix = "spring.datasource.druid") |
||||
|
public DataSourceProperties dataSourceProperties() { |
||||
|
return new DataSourceProperties(); |
||||
|
} |
||||
|
|
||||
|
@Bean |
||||
|
public DataSource dynamicDataSource(DataSourceProperties dataSourceProperties) { |
||||
|
return DynamicDataSourceFactory.buildDruidDataSource(dataSourceProperties); |
||||
|
} |
||||
|
} |
@ -0,0 +1,197 @@ |
|||||
|
/** |
||||
|
* Copyright (c) 2018 人人开源 All rights reserved. |
||||
|
* |
||||
|
* https://www.renren.io
|
||||
|
* |
||||
|
* 版权所有,侵权必究! |
||||
|
*/ |
||||
|
|
||||
|
package com.wm.file.config; |
||||
|
|
||||
|
|
||||
|
public class DataSourceProperties { |
||||
|
private String driverClassName; |
||||
|
private String url; |
||||
|
private String username; |
||||
|
private String password; |
||||
|
|
||||
|
/** |
||||
|
* Druid默认参数 |
||||
|
*/ |
||||
|
private int initialSize = 2; |
||||
|
private int maxActive = 10; |
||||
|
private int minIdle = -1; |
||||
|
private long maxWait = 60 * 1000L; |
||||
|
private long timeBetweenEvictionRunsMillis = 60 * 1000L; |
||||
|
private long minEvictableIdleTimeMillis = 1000L * 60L * 30L; |
||||
|
private long maxEvictableIdleTimeMillis = 1000L * 60L * 60L * 7; |
||||
|
private String validationQuery = "select 1"; |
||||
|
private int validationQueryTimeout = -1; |
||||
|
private boolean testOnBorrow = false; |
||||
|
private boolean testOnReturn = false; |
||||
|
private boolean testWhileIdle = true; |
||||
|
private boolean poolPreparedStatements = false; |
||||
|
private int maxOpenPreparedStatements = -1; |
||||
|
private boolean sharePreparedStatements = false; |
||||
|
private String filters = "stat,wall"; |
||||
|
|
||||
|
public String getDriverClassName() { |
||||
|
return driverClassName; |
||||
|
} |
||||
|
|
||||
|
public void setDriverClassName(String driverClassName) { |
||||
|
this.driverClassName = driverClassName; |
||||
|
} |
||||
|
|
||||
|
public String getUrl() { |
||||
|
return url; |
||||
|
} |
||||
|
|
||||
|
public void setUrl(String url) { |
||||
|
this.url = url; |
||||
|
} |
||||
|
|
||||
|
public String getUsername() { |
||||
|
return username; |
||||
|
} |
||||
|
|
||||
|
public void setUsername(String username) { |
||||
|
this.username = username; |
||||
|
} |
||||
|
|
||||
|
public String getPassword() { |
||||
|
return password; |
||||
|
} |
||||
|
|
||||
|
public void setPassword(String password) { |
||||
|
this.password = password; |
||||
|
} |
||||
|
|
||||
|
public int getInitialSize() { |
||||
|
return initialSize; |
||||
|
} |
||||
|
|
||||
|
public void setInitialSize(int initialSize) { |
||||
|
this.initialSize = initialSize; |
||||
|
} |
||||
|
|
||||
|
public int getMaxActive() { |
||||
|
return maxActive; |
||||
|
} |
||||
|
|
||||
|
public void setMaxActive(int maxActive) { |
||||
|
this.maxActive = maxActive; |
||||
|
} |
||||
|
|
||||
|
public int getMinIdle() { |
||||
|
return minIdle; |
||||
|
} |
||||
|
|
||||
|
public void setMinIdle(int minIdle) { |
||||
|
this.minIdle = minIdle; |
||||
|
} |
||||
|
|
||||
|
public long getMaxWait() { |
||||
|
return maxWait; |
||||
|
} |
||||
|
|
||||
|
public void setMaxWait(long maxWait) { |
||||
|
this.maxWait = maxWait; |
||||
|
} |
||||
|
|
||||
|
public long getTimeBetweenEvictionRunsMillis() { |
||||
|
return timeBetweenEvictionRunsMillis; |
||||
|
} |
||||
|
|
||||
|
public void setTimeBetweenEvictionRunsMillis(long timeBetweenEvictionRunsMillis) { |
||||
|
this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis; |
||||
|
} |
||||
|
|
||||
|
public long getMinEvictableIdleTimeMillis() { |
||||
|
return minEvictableIdleTimeMillis; |
||||
|
} |
||||
|
|
||||
|
public void setMinEvictableIdleTimeMillis(long minEvictableIdleTimeMillis) { |
||||
|
this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis; |
||||
|
} |
||||
|
|
||||
|
public long getMaxEvictableIdleTimeMillis() { |
||||
|
return maxEvictableIdleTimeMillis; |
||||
|
} |
||||
|
|
||||
|
public void setMaxEvictableIdleTimeMillis(long maxEvictableIdleTimeMillis) { |
||||
|
this.maxEvictableIdleTimeMillis = maxEvictableIdleTimeMillis; |
||||
|
} |
||||
|
|
||||
|
public String getValidationQuery() { |
||||
|
return validationQuery; |
||||
|
} |
||||
|
|
||||
|
public void setValidationQuery(String validationQuery) { |
||||
|
this.validationQuery = validationQuery; |
||||
|
} |
||||
|
|
||||
|
public int getValidationQueryTimeout() { |
||||
|
return validationQueryTimeout; |
||||
|
} |
||||
|
|
||||
|
public void setValidationQueryTimeout(int validationQueryTimeout) { |
||||
|
this.validationQueryTimeout = validationQueryTimeout; |
||||
|
} |
||||
|
|
||||
|
public boolean isTestOnBorrow() { |
||||
|
return testOnBorrow; |
||||
|
} |
||||
|
|
||||
|
public void setTestOnBorrow(boolean testOnBorrow) { |
||||
|
this.testOnBorrow = testOnBorrow; |
||||
|
} |
||||
|
|
||||
|
public boolean isTestOnReturn() { |
||||
|
return testOnReturn; |
||||
|
} |
||||
|
|
||||
|
public void setTestOnReturn(boolean testOnReturn) { |
||||
|
this.testOnReturn = testOnReturn; |
||||
|
} |
||||
|
|
||||
|
public boolean isTestWhileIdle() { |
||||
|
return testWhileIdle; |
||||
|
} |
||||
|
|
||||
|
public void setTestWhileIdle(boolean testWhileIdle) { |
||||
|
this.testWhileIdle = testWhileIdle; |
||||
|
} |
||||
|
|
||||
|
public boolean isPoolPreparedStatements() { |
||||
|
return poolPreparedStatements; |
||||
|
} |
||||
|
|
||||
|
public void setPoolPreparedStatements(boolean poolPreparedStatements) { |
||||
|
this.poolPreparedStatements = poolPreparedStatements; |
||||
|
} |
||||
|
|
||||
|
public int getMaxOpenPreparedStatements() { |
||||
|
return maxOpenPreparedStatements; |
||||
|
} |
||||
|
|
||||
|
public void setMaxOpenPreparedStatements(int maxOpenPreparedStatements) { |
||||
|
this.maxOpenPreparedStatements = maxOpenPreparedStatements; |
||||
|
} |
||||
|
|
||||
|
public boolean isSharePreparedStatements() { |
||||
|
return sharePreparedStatements; |
||||
|
} |
||||
|
|
||||
|
public void setSharePreparedStatements(boolean sharePreparedStatements) { |
||||
|
this.sharePreparedStatements = sharePreparedStatements; |
||||
|
} |
||||
|
|
||||
|
public String getFilters() { |
||||
|
return filters; |
||||
|
} |
||||
|
|
||||
|
public void setFilters(String filters) { |
||||
|
this.filters = filters; |
||||
|
} |
||||
|
} |
@ -0,0 +1,53 @@ |
|||||
|
/** |
||||
|
* Copyright (c) 2018 人人开源 All rights reserved. |
||||
|
* |
||||
|
* https://www.renren.io
|
||||
|
* |
||||
|
* 版权所有,侵权必究! |
||||
|
*/ |
||||
|
|
||||
|
package com.wm.file.config; |
||||
|
|
||||
|
import com.alibaba.druid.pool.DruidDataSource; |
||||
|
|
||||
|
import java.sql.SQLException; |
||||
|
|
||||
|
/** |
||||
|
* DruidDataSource |
||||
|
* |
||||
|
* @author Mark sunlightcs@gmail.com |
||||
|
* @since 1.0.0 |
||||
|
*/ |
||||
|
public class DynamicDataSourceFactory { |
||||
|
|
||||
|
public static DruidDataSource buildDruidDataSource(DataSourceProperties properties) { |
||||
|
DruidDataSource druidDataSource = new DruidDataSource(); |
||||
|
druidDataSource.setDriverClassName(properties.getDriverClassName()); |
||||
|
druidDataSource.setUrl(properties.getUrl()); |
||||
|
druidDataSource.setUsername(properties.getUsername()); |
||||
|
druidDataSource.setPassword(properties.getPassword()); |
||||
|
|
||||
|
druidDataSource.setInitialSize(properties.getInitialSize()); |
||||
|
druidDataSource.setMaxActive(properties.getMaxActive()); |
||||
|
druidDataSource.setMinIdle(properties.getMinIdle()); |
||||
|
druidDataSource.setMaxWait(properties.getMaxWait()); |
||||
|
druidDataSource.setTimeBetweenEvictionRunsMillis(properties.getTimeBetweenEvictionRunsMillis()); |
||||
|
druidDataSource.setMinEvictableIdleTimeMillis(properties.getMinEvictableIdleTimeMillis()); |
||||
|
druidDataSource.setMaxEvictableIdleTimeMillis(properties.getMaxEvictableIdleTimeMillis()); |
||||
|
druidDataSource.setValidationQuery(properties.getValidationQuery()); |
||||
|
druidDataSource.setValidationQueryTimeout(properties.getValidationQueryTimeout()); |
||||
|
druidDataSource.setTestOnBorrow(properties.isTestOnBorrow()); |
||||
|
druidDataSource.setTestOnReturn(properties.isTestOnReturn()); |
||||
|
druidDataSource.setPoolPreparedStatements(properties.isPoolPreparedStatements()); |
||||
|
druidDataSource.setMaxOpenPreparedStatements(properties.getMaxOpenPreparedStatements()); |
||||
|
druidDataSource.setSharePreparedStatements(properties.isSharePreparedStatements()); |
||||
|
|
||||
|
try { |
||||
|
druidDataSource.setFilters(properties.getFilters()); |
||||
|
druidDataSource.init(); |
||||
|
} catch (SQLException e) { |
||||
|
e.printStackTrace(); |
||||
|
} |
||||
|
return druidDataSource; |
||||
|
} |
||||
|
} |
@ -0,0 +1,68 @@ |
|||||
|
package com.wm.file.listen; |
||||
|
|
||||
|
|
||||
|
import com.alibaba.excel.context.AnalysisContext; |
||||
|
import com.alibaba.excel.event.AnalysisEventListener; |
||||
|
import com.wm.file.service.UserService; |
||||
|
|
||||
|
import java.util.ArrayList; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
// 事件监听
|
||||
|
public class EasyExceGeneralDatalListener extends AnalysisEventListener<Map<Integer, String>> { |
||||
|
/** |
||||
|
* 处理业务逻辑的Service,也可以是Mapper |
||||
|
*/ |
||||
|
private UserService userService; |
||||
|
|
||||
|
/** |
||||
|
* 用于存储读取的数据 |
||||
|
*/ |
||||
|
private List<Map<Integer, String>> dataList = new ArrayList<Map<Integer, String>>(); |
||||
|
|
||||
|
public EasyExceGeneralDatalListener() { |
||||
|
} |
||||
|
|
||||
|
public EasyExceGeneralDatalListener(UserService userService) { |
||||
|
this.userService = userService; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public void invoke(Map<Integer, String> data, AnalysisContext context) { |
||||
|
//数据add进入集合
|
||||
|
dataList.add(data); |
||||
|
//size是否为200000条:这里其实就是分批.当数据等于20w的时候执行一次插入
|
||||
|
if (dataList.size() >= 200000) { |
||||
|
//存入数据库:数据小于1w条使用Mybatis的批量插入即可;
|
||||
|
saveData(); |
||||
|
//清理集合便于GC回收
|
||||
|
dataList.clear(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 保存数据到DB |
||||
|
* |
||||
|
* @param |
||||
|
* @MethodName: saveData |
||||
|
* @return: void |
||||
|
*/ |
||||
|
private void saveData() { |
||||
|
userService.importDBFromExcel10w(dataList); |
||||
|
dataList.clear(); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Excel中所有数据解析完毕会调用此方法 |
||||
|
* |
||||
|
* @param: context |
||||
|
* @MethodName: doAfterAllAnalysed |
||||
|
* @return: void |
||||
|
*/ |
||||
|
@Override |
||||
|
public void doAfterAllAnalysed(AnalysisContext context) { |
||||
|
saveData(); |
||||
|
dataList.clear(); |
||||
|
} |
||||
|
} |
@ -0,0 +1,57 @@ |
|||||
|
package com.wm.file.util.easypoi; |
||||
|
|
||||
|
|
||||
|
import java.sql.Connection; |
||||
|
import java.sql.ResultSet; |
||||
|
import java.sql.SQLException; |
||||
|
import java.sql.Statement; |
||||
|
|
||||
|
public class JDBCDruidUtils { |
||||
|
|
||||
|
/** |
||||
|
* 关闭conn,和 statement独对象资源 |
||||
|
* |
||||
|
* @param connection |
||||
|
* @param statement |
||||
|
* @MethodName: close |
||||
|
* @return: void |
||||
|
*/ |
||||
|
public static void close(Connection connection, Statement statement) { |
||||
|
if (connection != null) { |
||||
|
try { |
||||
|
connection.close(); |
||||
|
} catch (SQLException e) { |
||||
|
e.printStackTrace(); |
||||
|
} |
||||
|
} |
||||
|
if (statement != null) { |
||||
|
try { |
||||
|
statement.close(); |
||||
|
} catch (SQLException e) { |
||||
|
e.printStackTrace(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 关闭 conn , statement 和resultset三个对象资源 |
||||
|
* |
||||
|
* @param connection |
||||
|
* @param statement |
||||
|
* @param resultSet |
||||
|
* @MethodName: close |
||||
|
* @return: void |
||||
|
*/ |
||||
|
public static void close(Connection connection, Statement statement, ResultSet resultSet) { |
||||
|
close(connection, statement); |
||||
|
if (resultSet != null) { |
||||
|
try { |
||||
|
resultSet.close(); |
||||
|
} catch (SQLException e) { |
||||
|
e.printStackTrace(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
@ -0,0 +1,39 @@ |
|||||
|
spring: |
||||
|
datasource: |
||||
|
type: com.alibaba.druid.pool.DruidDataSource |
||||
|
druid: |
||||
|
driver-class-name: com.mysql.cj.jdbc.Driver |
||||
|
url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai |
||||
|
username: root |
||||
|
password: 123456 |
||||
|
initial-size: 10 |
||||
|
max-active: 100 |
||||
|
min-idle: 10 |
||||
|
max-wait: 60000 |
||||
|
pool-prepared-statements: true |
||||
|
max-pool-prepared-statement-per-connection-size: 20 |
||||
|
time-between-eviction-runs-millis: 60000 |
||||
|
min-evictable-idle-time-millis: 300000 |
||||
|
#Oracle需要打开注释 |
||||
|
#validation-query: SELECT 1 FROM DUAL |
||||
|
test-while-idle: true |
||||
|
test-on-borrow: false |
||||
|
test-on-return: false |
||||
|
stat-view-servlet: |
||||
|
enabled: true |
||||
|
url-pattern: /druid/* |
||||
|
#login-username: admin |
||||
|
#login-password: admin |
||||
|
filter: |
||||
|
stat: |
||||
|
log-slow-sql: true |
||||
|
slow-sql-millis: 1000 |
||||
|
merge-sql: false |
||||
|
wall: |
||||
|
config: |
||||
|
multi-statement-allow: true |
||||
|
mybatis-plus: |
||||
|
mapper-locations: classpath*:/mapper/*.xml |
||||
|
|
||||
|
configuration: |
||||
|
map-underscore-to-camel-case: true |
@ -1,13 +0,0 @@ |
|||||
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=CTT&allowMultiQueries=true |
|
||||
spring.datasource.username=root |
|
||||
spring.datasource.password=123456 |
|
||||
spring.datasource.driver-class-name=com.mysql.jdbc.Driver |
|
||||
|
|
||||
|
|
||||
#mybatis-plus.configuration.log-impl: org.apache.ibatis.logging.stdout.StdOutImpl |
|
||||
mybatis-plus.configuration.map-underscore-to-camel-case: true |
|
||||
|
|
||||
mybatis-plus.mapper-locations=classpath*:/mapper/*.xml |
|
||||
|
|
||||
|
|
||||
# �����þ��ǽ������»��ߵı��ֶ�ӳ��Ϊ�շ��ʽ��ʵ�������� |
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,30 +0,0 @@ |
|||||
<?xml version="1.0" encoding="UTF-8" ?> |
|
||||
<!DOCTYPE mapper |
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" |
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
|
||||
|
|
||||
|
|
||||
<mapper namespace="com.wm.file.mapper.UserMapper"> |
|
||||
|
|
||||
<select id="findLimit" resultType="com.wm.file.entity.UserEntity"> |
|
||||
select id, |
|
||||
name, |
|
||||
phone, |
|
||||
ceate_by as ceateBy |
|
||||
from user |
|
||||
order by id asc |
|
||||
limit #{index},#{pageSize} |
|
||||
</select> |
|
||||
|
|
||||
<select id="findNewPage" resultType="com.wm.file.entity.UserEntity"> |
|
||||
SELECT id,NAME, |
|
||||
phone,ceate_by AS ceateBy |
|
||||
FROM USER |
|
||||
<if test="id!=null and id!=''"> |
|
||||
WHERE id > #{id} |
|
||||
</if> |
|
||||
ORDER BY id ASC |
|
||||
LIMIT #{pageSize} |
|
||||
</select> |
|
||||
|
|
||||
</mapper> |
|
Binary file not shown.
Loading…
Reference in new issue