Browse Source

调整为mybatis 结构

master
453530270@qq.com 2 years ago
parent
commit
a28c00acc4
  1. 31
      pom.xml
  2. 17
      src/main/java/io/xtfs/jwebfs/annotation/PassToken.java
  3. 9
      src/main/java/io/xtfs/jwebfs/bean/WbFile.java
  4. 49
      src/main/java/io/xtfs/jwebfs/configure/EnvConfig.java
  5. 54
      src/main/java/io/xtfs/jwebfs/configure/YcWebMvcConfigurer.java
  6. 34
      src/main/java/io/xtfs/jwebfs/exception/ChException.java
  7. 84
      src/main/java/io/xtfs/jwebfs/interceptor/ChInterceptor.java
  8. 14
      src/main/java/io/xtfs/jwebfs/mybatis/mybatis-config.xml
  9. 22
      src/main/java/io/xtfs/jwebfs/repository/WbFileRepository.java
  10. 67
      src/main/resources/application.properties
  11. 27
      src/main/resources/logback-spring.xml
  12. 15
      src/main/resources/mybatis/mybatis-config.xml
  13. 26
      src/main/resources/quartz.properties

31
pom.xml

@ -14,10 +14,7 @@
<spring-boot.version>2.6.13</spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
@ -42,6 +39,32 @@
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
<!--mybaits spring集成包-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version> 2.3.1</version>
</dependency>
<!--common 类-->
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.12</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>

17
src/main/java/io/xtfs/jwebfs/annotation/PassToken.java

@ -0,0 +1,17 @@
package io.xtfs.jwebfs.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 免toKEN验证注解
* 注解不仅被保存到class文件中jvm加载class文件之后仍然存在
*/
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface PassToken {
boolean required() default true;
}

9
src/main/java/io/xtfs/jwebfs/bean/WbFile.java

@ -1,19 +1,12 @@
package io.xtfs.jwebfs.bean;
import javax.persistence.*;
/**
* 文件实体
*/
@Entity
@Table(name = "wbfile")
public class WbFile {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id; //
@Column
private String filenmae; // 文件名
@Column
private String filehash; // 文件hash
public Integer getId() {

49
src/main/java/io/xtfs/jwebfs/configure/EnvConfig.java

@ -0,0 +1,49 @@
package io.xtfs.jwebfs.configure;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import javax.servlet.MultipartConfigElement;
import java.io.File;
@Configuration
public class EnvConfig {
private Log log = LogFactory.getLog(EnvConfig.class);
@Autowired
private Environment env;
/**
* 获取大数据链接信息
* 项目初始化的时候完成操作
* @return
*/
@Bean
public static String yxDbConf(){
//读取当前运行位置
String curPath=System.getProperty("user.dir");
return curPath;
}
/**
* 文件上传临时路径
* @return
*/
@Bean
public MultipartConfigElement multipartConfigElement(){
MultipartConfigFactory factory = new MultipartConfigFactory();
String tempUrl = System.getProperty("user.dir") + File.separator + "upload" + File.separator + "tmp";
System.out.println("临时目录:" + tempUrl);
File file = new File(tempUrl);
if (!file.exists()) {
file.mkdirs();
}
factory.setLocation(tempUrl);
return factory.createMultipartConfig();
}
}

54
src/main/java/io/xtfs/jwebfs/configure/YcWebMvcConfigurer.java

@ -0,0 +1,54 @@
package io.xtfs.jwebfs.configure;
import io.xtfs.jwebfs.interceptor.ChInterceptor;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.format.datetime.DateFormatter;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class YcWebMvcConfigurer implements WebMvcConfigurer {
//日志初始化
private static Log log = LogFactory.getLog(YcWebMvcConfigurer.class);
/**
* 注册拦截器 拦截 store 开头的uri
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new ChInterceptor()).addPathPatterns("/store/**")
.addPathPatterns("/admin/**")
.excludePathPatterns("/agent/**")
.excludePathPatterns("/upload/**")
.excludePathPatterns("**/passport/login")
.excludePathPatterns("**/passport/logout");
}
/**
* 前后分离的系统进行跨域配置
* @param registry
*/
@Override
public void addCorsMappings(CorsRegistry registry){
registry.addMapping("/**")
.allowedOriginPatterns("*")
.allowedMethods("GET","POST");
// .allowedHeaders("*");
}
/**
* 日期格式化
* @param registry
*/
@Override
public void addFormatters(FormatterRegistry registry){
registry.addFormatter(new DateFormatter("yyyy-MM-dd HH:mm:ss"));
}
}

34
src/main/java/io/xtfs/jwebfs/exception/ChException.java

@ -0,0 +1,34 @@
package io.xtfs.jwebfs.exception;
/**
* 全局异常
*/
public class ChException extends RuntimeException {
private String msg;
private int code;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public ChException(String msg, int code) {
this.msg = msg;
this.code = code;
}
public ChException(String msg) {
this.msg = msg;
}
}

84
src/main/java/io/xtfs/jwebfs/interceptor/ChInterceptor.java

@ -0,0 +1,84 @@
package io.xtfs.jwebfs.interceptor;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import io.xtfs.jwebfs.annotation.PassToken;
import io.xtfs.jwebfs.exception.ChException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
@Component
public class ChInterceptor implements HandlerInterceptor {
private static Log log = LogFactory.getLog(ChInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String uri = request.getRequestURI();
// 判断是否是数据库监控的
if(uri.contains("/druid/**") || uri.contains("/api/**")){
return true;
}
// options 放过
if (HttpMethod.OPTIONS.toString().equals(request.getMethod())) {
return true;
}
// 从请求头中获取token
String token = request.getHeader("access-token");
// 如果不是映射到方法直接通过
if(!(handler instanceof HandlerMethod)){
return true;
}
HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod();
//检查是否有passtoken注释,有则跳过认证
if (method.isAnnotationPresent(PassToken.class)) {
PassToken passToken = method.getAnnotation(PassToken.class);
if (passToken.required()) {
return true;
}
}
//默认全部检查
else {
// 执行认证
if (token==null || StringUtils.isBlank(token)) {
throw new ChException("token为空,token为必须参数");
}
}
return true;
}
/**
* 设置输出头,添加跨域
* @param response
*/
private void setHeader(HttpServletResponse response,HttpServletRequest request){
//跨域的header设置
response.setHeader("Access-control-Allow-Origin", request.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Methods", request.getMethod());
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Headers", request.getHeader("Access-Control-Request-Headers"));
// 个性化主机设置
response.setHeader("chhong","true");
// 防止乱码
response.setHeader("Content-Type","application/json;charset=UTF-8");
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 拦截post
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 完成后的请求
}
}

14
src/main/java/io/xtfs/jwebfs/mybatis/mybatis-config.xml

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="cacheEnabled" value="true" /> <!-- 全局映射器启用缓存 -->
<setting name="useGeneratedKeys" value="true" /> <!-- 允许 JDBC 支持自动生成主键 -->
<setting name="defaultExecutorType" value="REUSE" /> <!-- 配置默认的执行器 -->
<!-- <setting name="logImpl" value="org.apache.ibatis.logging.stdout.StdOutImpl" /> &lt;!&ndash; 指定 MyBatis 所用日志的具体实现 &ndash;&gt;-->
<setting name="logImpl" value="SLF4J" /> <!-- 指定 MyBatis 所用日志的具体实现 -->
<setting name="mapUnderscoreToCamelCase" value="true"/> <!--驼峰式命名 -->
</settings>
</configuration>

22
src/main/java/io/xtfs/jwebfs/repository/WbFileRepository.java

@ -1,22 +0,0 @@
package io.xtfs.jwebfs.repository;
import io.xtfs.jwebfs.bean.WbFile;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
public interface WbFileRepository extends JpaRepository<WbFile,Integer> {
/**
* single
* @param id
* @return
*/
WbFile findAllById(Integer id);
/**
* list
* @param pageable
* @return
*/
Page<WbFile> findAll(Pageable pageable);
}

67
src/main/resources/application.properties

@ -1,44 +1,33 @@
# 应用服务 WEB 访问端口
server.port=8099
# 服务器信息
server.port=9091
#
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/wbfs
spring.datasource.username=root
spring.datasource.password=root
#
#Java代码实体字段命名与数据库表结构字段之间的名称映射策略
spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
#下面配置开启后,会禁止将驼峰转为下划线
#spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
# 调试语句
spring.jpa.show-sql=true
#
# logback日志操作
logging.config=classpath:logback-spring.xml
logging.path=./logs/
server.servlet.context-path=/
mybatis.mapper-locations=classpath*:/mapper/ycmall/*.xml
# 开启调试sql语句
logging.level.yc.mall.api.mapper=DEBUG
# 临时文件存放
#location.tempDir=/upload/temp
# 格式化全局时间字段
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
# 指定时间区域类型
spring.jackson.time-zone=GMT+8
#
#spring.datasource.hikari.connection-timeout=1200
#spring.datasource.hikari.connection-test-query=SELECT * FROM DUAL;
## Spring HikariConfig
# 事务自动提交 - 默认值:true
spring.datasource.hikari.auto-commit=true
# 连接测试查询 - Using the JDBC4 <code>Connection.isValid()</code> method to test connection validity can be more efficient on some databases and is recommended.
# 如果你的驱动程序支持JDBC4,强烈建议不要设置此属性。
spring.datasource.hikari.connection-test-query=select 1
# 连接超时时间 - 默认值:30秒。
spring.datasource.hikari.connection-timeout=30000
# 连接池中允许闲置的最长时间 - 默认值:10分钟
spring.datasource.hikari.idle-timeout=600000
# 一个连接生命时长(毫秒),超时而没被使用则被释放 - 默认值:30分钟
spring.datasource.hikari.max-lifetime=1800000
# 连接池中允许的最大连接数,包括闲置和使用中的连接 - 默认值:10
spring.datasource.hikari.maximum-pool-size=100
# 连接池中允许的最小空闲连接数 - 默认值:10。
spring.datasource.hikari.minimum-idle=10
# 连接被测试活动的最长时间 - 默认值:5秒。
spring.datasource.hikari.validation-timeout=5000
# 指定连接池的名称 - 默认自动生成
spring.datasource.hikari.pool-name=HikaraPool-1
spring.servlet.multipart.enabled=true
# 设置自定义的临时文件夹路径
spring.servlet.multipart.location=./upload/tmp
#文件大小
server.tomcat.max-http-form-post-size=2MB
# 静态资源
spring.mvc.static-path-pattern=/upload/**
# 设置日志级别为DEBUG模式
#log4j.rootLogger=DEBUG, stdout

27
src/main/resources/logback-spring.xml

@ -10,6 +10,7 @@
<contextName>logback</contextName>
<!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
<!--<property name="logging.path" value="${logging.path}" />-->
<!--<springProfile name="logging.path" scope="context" source="project.log.path" defaultValue="./aislogs/"/>-->
<springProperty name="LOG_PATH" source="logging.path" defaultValue="/home/logs" />
@ -41,7 +42,7 @@
<!-- 时间滚动输出 level为 DEBUG 日志 -->
<appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${LOG_PATH}/log_debug.log</file>
<file>${LOG_PATH}/jweb_debug.log</file>
<!--日志文件输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
@ -68,7 +69,7 @@
<!-- 时间滚动输出 level为 INFO 日志 -->
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${LOG_PATH}/bcapi_log_info.log</file>
<file>${LOG_PATH}/jweb_info.log</file>
<!--日志文件输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
@ -95,7 +96,7 @@
<!-- 时间滚动输出 level为 WARN 日志 -->
<appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${LOG_PATH}/bcapi_log_warn.log</file>
<file>${LOG_PATH}/jwebwarn.log</file>
<!--日志文件输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
@ -122,7 +123,7 @@
<!-- 时间滚动输出 level为 ERROR 日志 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${LOG_PATH}/bcapi_log_error.log</file>
<file>${LOG_PATH}/jweb_error.log</file>
<!--日志文件输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
@ -171,11 +172,6 @@
可以包含零个或多个元素,标识这个appender将会添加到这个logger。
-->
<!--开发环境:打印控制台-->
<springProfile name="dev">
<logger name="com.nmys.view" level="debug"/>
</springProfile>
<root level="info">
<appender-ref ref="CONSOLE" />
<appender-ref ref="DEBUG_FILE" />
@ -184,15 +180,4 @@
<appender-ref ref="ERROR_FILE" />
</root>
<!--生产环境:输出到文件-->
<!--<springProfile name="pro">-->
<!--<root level="info">-->
<!--<appender-ref ref="CONSOLE" />-->
<!--<appender-ref ref="DEBUG_FILE" />-->
<!--<appender-ref ref="INFO_FILE" />-->
<!--<appender-ref ref="ERROR_FILE" />-->
<!--<appender-ref ref="WARN_FILE" />-->
<!--</root>-->
<!--</springProfile>-->
</configuration>
</configuration>

15
src/main/resources/mybatis/mybatis-config.xml

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="cacheEnabled" value="true" /> <!-- 全局映射器启用缓存 -->
<setting name="useGeneratedKeys" value="true" /> <!-- 允许 JDBC 支持自动生成主键 -->
<setting name="defaultExecutorType" value="REUSE" /> <!-- 配置默认的执行器 -->
<!-- <setting name="logImpl" value="org.apache.ibatis.logging.stdout.StdOutImpl" /> &lt;!&ndash; 指定 MyBatis 所用日志的具体实现 &ndash;&gt;-->
<setting name="logImpl" value="SLF4J" /> <!-- 指定 MyBatis 所用日志的具体实现 -->
<!-- <setting name="logImpl" value="LOG4J" /> &lt;!&ndash; 指定 MyBatis 所用日志的具体实现 &ndash;&gt;-->
<setting name="mapUnderscoreToCamelCase" value="true"/> <!--驼峰式命名 -->
</settings>
</configuration>

26
src/main/resources/quartz.properties

@ -0,0 +1,26 @@
#
#============================================================================
# Configure Main Scheduler Properties
#============================================================================
org.quartz.scheduler.instanceName:ChjyjScheduler
org.quartz.scheduler.instanceId=AUTO
org.quartz.scheduler.rmi.export:false
org.quartz.scheduler.rmi.proxy:false
org.quartz.scheduler.wrapJobExecutionInUserTransaction:false
org.quartz.threadPool.class:org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount=10
org.quartz.threadPool.threadPriority:5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread:true
org.quartz.jobStore.misfireThreshold:60000
#============================================================================
# Configure JobStore
#============================================================================
# 存储方式使用JobStoreTX,也就是数据库
org.quartz.jobStore.class:org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass:org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.useProperties:true
#数据库中quartz表的表名前缀
org.quartz.jobStore.tablePrefix:qrtz_
org.quartz.jobStore.dataSource:qzDS
# 是否使用集群
org.quartz.jobStore.isClustered=false
Loading…
Cancel
Save