diff --git a/docker-compose.yml b/docker-compose.yml index 1229bf7..2725b2e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -70,6 +70,7 @@ services: # context: ../physical-web container_name: physical-web image: registry.cn-shanghai.aliyuncs.com/physical/physical-web + hostname: physical-web depends_on: - physical-launcher networks: diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/MinioUtil.java b/physical-base-core/src/main/java/org/jeecg/common/util/MinioUtil.java index d5a13c0..ac4cd9a 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/MinioUtil.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/MinioUtil.java @@ -13,6 +13,7 @@ import java.net.URLDecoder; /** * minio文件上传工具类 + * * @author: jeecg-boot */ @Slf4j @@ -21,10 +22,8 @@ public class MinioUtil { private static String minioName; private static String minioPass; private static String bucketName; - - public static void setMinioUrl(String minioUrl) { - MinioUtil.minioUrl = minioUrl; - } + private static String minioPublicUrl; + private static MinioClient minioClient = null; public static void setMinioName(String minioName) { MinioUtil.minioName = minioName; @@ -34,22 +33,33 @@ public class MinioUtil { MinioUtil.minioPass = minioPass; } - public static void setBucketName(String bucketName) { - MinioUtil.bucketName = bucketName; - } - public static String getMinioUrl() { return minioUrl; } + public static void setMinioUrl(String minioUrl) { + MinioUtil.minioUrl = minioUrl; + } + + public static String getMinioPublicUrl() { + return minioPublicUrl; + } + + public static void setMinioPublicUrl(String minioPublicUrl) { + MinioUtil.minioPublicUrl = minioPublicUrl; + } + public static String getBucketName() { return bucketName; } - private static MinioClient minioClient = null; + public static void setBucketName(String bucketName) { + MinioUtil.bucketName = bucketName; + } /** * 上传文件 + * * @param file * @return */ @@ -64,13 +74,13 @@ public class MinioUtil { //update-end-author:liusq date:20210809 for: 过滤上传文件类型 String newBucket = bucketName; - if(oConvertUtils.isNotEmpty(customBucket)){ + if (oConvertUtils.isNotEmpty(customBucket)) { newBucket = customBucket; } try { - initMinio(minioUrl, minioName,minioPass); + initMinio(minioUrl, minioName, minioPass); // 检查存储桶是否已经存在 - if(minioClient.bucketExists(BucketExistsArgs.builder().bucket(newBucket).build())) { + if (minioClient.bucketExists(BucketExistsArgs.builder().bucket(newBucket).build())) { log.info("Bucket already exists."); } else { // 创建一个名为ota的存储桶 @@ -80,28 +90,28 @@ public class MinioUtil { InputStream stream = file.getInputStream(); // 获取文件名 String orgName = file.getOriginalFilename(); - if("".equals(orgName)){ - orgName=file.getName(); + if ("".equals(orgName)) { + orgName = file.getName(); } orgName = CommonUtils.getFileName(orgName); - String objectName = bizPath+"/" - +( orgName.indexOf(".")==-1 - ?orgName + "_" + System.currentTimeMillis() - :orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.lastIndexOf(".")) - ); + String objectName = bizPath + "/" + + (orgName.indexOf(".") == -1 + ? orgName + "_" + System.currentTimeMillis() + : orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.lastIndexOf(".")) + ); // 使用putObject上传一个本地文件到存储桶中。 - if(objectName.startsWith(SymbolConstant.SINGLE_SLASH)){ + if (objectName.startsWith(SymbolConstant.SINGLE_SLASH)) { objectName = objectName.substring(1); } PutObjectArgs objectArgs = PutObjectArgs.builder().object(objectName) .bucket(newBucket) .contentType("application/octet-stream") - .stream(stream,stream.available(),-1).build(); + .stream(stream, stream.available(), -1).build(); minioClient.putObject(objectArgs); stream.close(); - fileUrl = minioUrl+newBucket+"/"+objectName; - }catch (Exception e){ + fileUrl = minioPublicUrl + newBucket + "/" + objectName; + } catch (Exception e) { log.error(e.getMessage(), e); } return fileUrl; @@ -109,21 +119,23 @@ public class MinioUtil { /** * 文件上传 + * * @param file * @param bizPath * @return */ public static String upload(MultipartFile file, String bizPath) throws Exception { - return upload(file,bizPath,null); + return upload(file, bizPath, null); } /** * 获取文件流 + * * @param bucketName * @param objectName * @return */ - public static InputStream getMinioFile(String bucketName,String objectName){ + public static InputStream getMinioFile(String bucketName, String objectName) { InputStream inputStream = null; try { initMinio(minioUrl, minioName, minioPass); @@ -138,39 +150,41 @@ public class MinioUtil { /** * 删除文件 + * * @param bucketName * @param objectName * @throws Exception */ public static void removeObject(String bucketName, String objectName) { try { - initMinio(minioUrl, minioName,minioPass); + initMinio(minioUrl, minioName, minioPass); RemoveObjectArgs objectArgs = RemoveObjectArgs.builder().object(objectName) .bucket(bucketName).build(); minioClient.removeObject(objectArgs); - }catch (Exception e){ + } catch (Exception e) { log.info("文件删除失败" + e.getMessage()); } } /** * 获取文件外链 + * * @param bucketName * @param objectName * @param expires * @return */ public static String getObjectUrl(String bucketName, String objectName, Integer expires) { - initMinio(minioUrl, minioName,minioPass); - try{ + initMinio(minioUrl, minioName, minioPass); + try { //update-begin---author:liusq Date:20220121 for:获取文件外链报错提示method不能为空,导致文件下载和预览失败---- GetPresignedObjectUrlArgs objectArgs = GetPresignedObjectUrlArgs.builder().object(objectName) .bucket(bucketName) .expiry(expires).method(Method.GET).build(); //update-begin---author:liusq Date:20220121 for:获取文件外链报错提示method不能为空,导致文件下载和预览失败---- String url = minioClient.getPresignedObjectUrl(objectArgs); - return URLDecoder.decode(url,"UTF-8"); - }catch (Exception e){ + return URLDecoder.decode(url, "UTF-8"); + } catch (Exception e) { log.info("文件路径获取失败" + e.getMessage()); } return null; @@ -178,12 +192,13 @@ public class MinioUtil { /** * 初始化客户端 + * * @param minioUrl * @param minioName * @param minioPass * @return */ - private static MinioClient initMinio(String minioUrl, String minioName,String minioPass) { + private static MinioClient initMinio(String minioUrl, String minioName, String minioPass) { if (minioClient == null) { try { minioClient = MinioClient.builder() @@ -199,13 +214,14 @@ public class MinioUtil { /** * 上传文件到minio + * * @param stream * @param relativePath * @return */ - public static String upload(InputStream stream,String relativePath) throws Exception { - initMinio(minioUrl, minioName,minioPass); - if(minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) { + public static String upload(InputStream stream, String relativePath) throws Exception { + initMinio(minioUrl, minioName, minioPass); + if (minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) { log.info("Bucket already exists."); } else { // 创建一个名为ota的存储桶 @@ -215,10 +231,10 @@ public class MinioUtil { PutObjectArgs objectArgs = PutObjectArgs.builder().object(relativePath) .bucket(bucketName) .contentType("application/octet-stream") - .stream(stream,stream.available(),-1).build(); + .stream(stream, stream.available(), -1).build(); minioClient.putObject(objectArgs); stream.close(); - return minioUrl+bucketName+"/"+relativePath; + return minioUrl + bucketName + "/" + relativePath; } } diff --git a/physical-base-core/src/main/java/org/jeecg/config/oss/MinioConfig.java b/physical-base-core/src/main/java/org/jeecg/config/oss/MinioConfig.java index 3a19ab4..ee2ccb9 100644 --- a/physical-base-core/src/main/java/org/jeecg/config/oss/MinioConfig.java +++ b/physical-base-core/src/main/java/org/jeecg/config/oss/MinioConfig.java @@ -11,6 +11,7 @@ import org.springframework.context.annotation.Configuration; /** * Minio文件上传配置文件 + * * @author: jeecg-boot */ @Slf4j @@ -19,6 +20,8 @@ import org.springframework.context.annotation.Configuration; public class MinioConfig { @Value(value = "${jeecg.minio.minio_url}") private String minioUrl; + @Value(value = "${jeecg.minio.minio_public_url}") + private String minioPublicUrl; @Value(value = "${jeecg.minio.minio_name}") private String minioName; @Value(value = "${jeecg.minio.minio_pass}") @@ -27,17 +30,18 @@ public class MinioConfig { private String bucketName; @Bean - public void initMinio(){ - if(!minioUrl.startsWith(CommonConstant.STR_HTTP)){ + public void initMinio() { + if (!minioUrl.startsWith(CommonConstant.STR_HTTP)) { minioUrl = "http://" + minioUrl; } - if(!minioUrl.endsWith(SymbolConstant.SINGLE_SLASH)){ + if (!minioUrl.endsWith(SymbolConstant.SINGLE_SLASH)) { minioUrl = minioUrl.concat(SymbolConstant.SINGLE_SLASH); } MinioUtil.setMinioUrl(minioUrl); MinioUtil.setMinioName(minioName); MinioUtil.setMinioPass(minioPass); MinioUtil.setBucketName(bucketName); + MinioUtil.setMinioPublicUrl(minioPublicUrl); } } diff --git a/physical-launcher/Dockerfile b/physical-launcher/Dockerfile index f9d94a7..3ae37af 100644 --- a/physical-launcher/Dockerfile +++ b/physical-launcher/Dockerfile @@ -14,4 +14,4 @@ EXPOSE 8080 #ADD ./src/main/resources/jeecg ./config/jeecg ADD ./target/physical-launcher-3.7.0.jar ./ -CMD sleep 60;java -Djava.security.egd=file:/dev/./urandom -jar physical-launcher-3.7.0.jar --spring.profiles.active=prod \ No newline at end of file +CMD sleep 60;java -Djava.security.egd=file:/dev/./urandom -jar physical-launcher-3.7.0.jar --spring.profiles.active=test \ No newline at end of file diff --git a/physical-launcher/src/main/resources/application-prod.yml b/physical-launcher/src/main/resources/application-prod.yml index a8013b1..648af08 100644 --- a/physical-launcher/src/main/resources/application-prod.yml +++ b/physical-launcher/src/main/resources/application-prod.yml @@ -245,7 +245,7 @@ jeecg: file-view-domain: http://fileview.jeecg.com # minio文件上传 minio: - minio_url: http://physical-oss:9000 + minio_url: http://physical-minio:9000 minio_name: root minio_pass: 12345678 bucketName: physical diff --git a/physical-launcher/src/main/resources/application-test.yml b/physical-launcher/src/main/resources/application-test.yml index da8fc3d..0c6d38d 100644 --- a/physical-launcher/src/main/resources/application-test.yml +++ b/physical-launcher/src/main/resources/application-test.yml @@ -12,7 +12,7 @@ server: include-stacktrace: ALWAYS include-message: ALWAYS servlet: - context-path: /jeecg-boot + context-path: /physical compression: enabled: true min-response-size: 1024 @@ -67,7 +67,7 @@ spring: quartz: job-store-type: jdbc initialize-schema: embedded - #定时任务启动开关,true-开 false-关 + #定时任务开关,true-开 false-关 auto-startup: true #延迟1秒启动定时任务 startup-delay: 1s @@ -95,10 +95,10 @@ spring: jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8 - aop: - proxy-target-class: true jpa: open-in-view: false + aop: + proxy-target-class: true #配置freemarker freemarker: # 设置模板后缀名 @@ -124,7 +124,7 @@ spring: static-locations: classpath:/static/,classpath:/public/ autoconfigure: exclude: - - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure + - com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceAutoConfigure - org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration datasource: druid: @@ -166,9 +166,9 @@ spring: slow-sql-millis: 5000 datasource: master: - url: jdbc:mysql://127.0.0.1:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai + url: jdbc:mysql://physical-mysql:3306/physical-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai username: root - password: root + password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver # 多数据源配置 #multi-datasource1: @@ -177,11 +177,15 @@ spring: #password: root #driver-class-name: com.mysql.cj.jdbc.Driver #redis 配置 - redis: - database: 0 - host: 192.168.1.188 - port: 6379 - password: '' + data: + redis: + host: physical-redis + password: '' + port: 6379 + database: 0 + + main: + allow-bean-definition-overriding=true: #mybatis plus 设置 mybatis-plus: mapper-locations: classpath*:org/jeecg/**/xml/*Mapper.xml @@ -189,13 +193,13 @@ mybatis-plus: # 关闭MP3.0自带的banner banner: false db-config: - #主键类型 + #主键类型 0:"数据库ID自增",1:"该类型为未设置主键类型", 2:"用户输入ID",3:"全局唯一ID (数字类型唯一ID)", 4:"全局唯一ID UUID",5:"字符串全局唯一ID (idWorker 的字符串表示)"; id-type: ASSIGN_ID # 默认数据库表下划线命名 table-underline: true configuration: # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 返回类型为Map,显示null对应的字段 call-setters-on-nulls: true #jeecg专用配置 @@ -205,26 +209,26 @@ jeecg: # 平台上线安全配置 firewall: # 数据源安全 (开启后,Online报表和图表的数据源为必填) - dataSourceSafe: false + dataSourceSafe: true # 低代码模式(dev:开发模式,prod:发布模式——关闭所有在线开发配置能力) - lowCodeMode: dev + lowCodeMode: prod # 签名密钥串(前后端要一致,正式发布请自行修改) signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a #签名拦截接口 signUrls: /sys/dict/getDictItems/*,/sys/dict/loadDict/*,/sys/dict/loadDictOrderByValue/*,/sys/dict/loadDictItem/*,/sys/dict/loadTreeData,/sys/api/queryTableDictItemsByCode,/sys/api/queryFilterTableDictInfo,/sys/api/queryTableDictByKeys,/sys/api/translateDictFromTable,/sys/api/translateDictFromTableByKeys,/sys/sendChangePwdSms,/sys/user/sendChangePhoneSms,/sys/sms,/desform/api/sendVerifyCode # local\minio\alioss - uploadType: local + uploadType: minio # 前端访问地址 domainUrl: pc: http://localhost:3100 app: http://localhost:8051 path: #文件上传根目录 设置 - upload: D://opt//upFiles + upload: /opt/jeecg-boot/upload #webapp文件路径 - webapp: D://opt//webapp + webapp: /opt/jeecg-boot/webapp shiro: - excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/bigscreen/category/**,/bigscreen/visual/**,/bigscreen/map/**,/jmreport/bigscreen2/** + excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/bigscreen/category/**,/bigscreen/visual/**,/bigscreen/map/**,/jmreport/bigscreen2/**,/api/getUserInfo,/api/sys/common/**,/sys/common/** #阿里云oss存储和大鱼短信秘钥配置 oss: accessKey: ?? @@ -235,20 +239,21 @@ jeecg: # ElasticSearch 设置 elasticsearch: cluster-name: jeecg-ES - cluster-nodes: 192.168.1.188:9200 - check-enabled: false + cluster-nodes: 127.0.0.1:9200 + check-enabled: true # 在线预览文件服务器地址配置 - file-view-domain: http://127.0.0.1:8012 + file-view-domain: http://fileview.jeecg.com # minio文件上传 minio: - minio_url: http://minio.jeecg.com - minio_name: ?? - minio_pass: ?? - bucketName: ?? + minio_url: http://127.0.0.1:9000/ + minio_public_url: http://58.215.212.230:8005/oss/ + minio_name: root + minio_pass: 12345678 + bucketName: physical #大屏报表参数设置 jmreport: #多租户模式,默认值为空(created:按照创建人隔离、tenant:按照租户隔离) (v1.6.2+ 新增) - saasMode: + saasMode: # 平台上线安全配置(v1.6.2+ 新增) firewall: # 数据源安全 (开启后,不允许使用平台数据源、SQL解析加签并且不允许查询数据库) @@ -268,18 +273,18 @@ jeecg: logRetentionDays: 30 #分布式锁配置 redisson: - address: 127.0.0.1:6379 + address: physical-redis:6379 password: type: STANDALONE enabled: true +#cas单点登录 +cas: + prefixUrl: http://cas.example.org:8443/cas #Mybatis输出sql日志 logging: level: org.flywaydb: debug org.jeecg.modules.system.mapper: info -#cas单点登录 -cas: - prefixUrl: http://cas.example.org:8443/cas #swagger knife4j: #开启增强配置 @@ -287,7 +292,7 @@ knife4j: #开启生产环境屏蔽 production: false basic: - enable: true + enable: false username: jeecg password: jeecg1314 #第三方登录