Browse Source

支持部署到docker

OPGame 6 years ago
parent
commit
f0fb9d36a9

+ 7 - 0
db/Dockerfile

@@ -0,0 +1,7 @@
+FROM mysql:5.7
+
+MAINTAINER opgames(opgames.cn@gmail.com)
+
+RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
+
+COPY ./db/yami_shop.sql /docker-entrypoint-initdb.d

+ 8 - 5
db/yami_shop.sql

@@ -3,6 +3,9 @@ SQLyog Ultimate v12.5.1 (64 bit)
 MySQL - 5.7.23 : Database - mall4j
 *********************************************************************
 */
+create database `yami_shops` default character set utf8 collate utf8_general_ci;
+
+USE yami_shops;
 
 /*!40101 SET NAMES utf8 */;
 
@@ -115,10 +118,10 @@ CREATE TABLE `qrtz_job_details` (
 /*Data for the table `qrtz_job_details` */
 
 insert  into `qrtz_job_details`(`SCHED_NAME`,`JOB_NAME`,`JOB_GROUP`,`DESCRIPTION`,`JOB_CLASS_NAME`,`IS_DURABLE`,`IS_NONCONCURRENT`,`IS_UPDATE_DATA`,`REQUESTS_RECOVERY`,`JOB_DATA`) values 
-('clusteredScheduler','TASK_10','DEFAULT',NULL,'com.yami.shop.quartz.config.QuartzJob','0','1','0','0','¬í\0sr\0org.quartz.JobDataMapŸ°ƒè¿©°Ë\0\0xr\0&org.quartz.utils.StringKeyDirtyFlagMap‚èÃûÅ](\0Z\0allowsTransientDataxr\0org.quartz.utils.DirtyFlagMapæ.­(v\nÎ\0Z\0dirtyL\0mapt\0Ljava/util/Map;xpsr\0java.util.HashMapÚÁÃ`Ñ\0F\0\nloadFactorI\0	thresholdxp?@\0\0\0\0\0w\0\0\0\0\0\0t\0\rJOB_PARAM_KEYsr\0&com.yami.shop.quartz.model.ScheduleJob~ûdê‚‘«\0L\0beanNamet\0Ljava/lang/String;L\0\ncreateTimet\0Ljava/util/Date;L\0cronExpressionq\0~\0	L\0jobIdt\0Ljava/lang/Long;L\0\nmethodNameq\0~\0	L\0paramsq\0~\0	L\0remarkq\0~\0	L\0statust\0Ljava/lang/Integer;xpt\0\ncouponTasksr\0java.util.Datehj�KYt\0\0xpw\0\0kds×sxt\0\r0 0 0/0 * * ?sr\0java.lang.Long;‹ä�Ì�#ß\0J\0valuexr\0java.lang.Number†¬•”à‹\0\0xp\0\0\0\0\0\0\0\nt\0changeCoupont\0\0q\0~\0sr\0java.lang.Integerâ ¤÷�‡8\0I\0valuexq\0~\0\0\0\0\0x\0'),
-('clusteredScheduler','TASK_11','DEFAULT',NULL,'com.yami.shop.quartz.config.QuartzJob','0','1','0','0','¬í\0sr\0org.quartz.JobDataMapŸ°ƒè¿©°Ë\0\0xr\0&org.quartz.utils.StringKeyDirtyFlagMap‚èÃûÅ](\0Z\0allowsTransientDataxr\0org.quartz.utils.DirtyFlagMapæ.­(v\nÎ\0Z\0dirtyL\0mapt\0Ljava/util/Map;xpsr\0java.util.HashMapÚÁÃ`Ñ\0F\0\nloadFactorI\0	thresholdxp?@\0\0\0\0\0w\0\0\0\0\0\0t\0\rJOB_PARAM_KEYsr\0&com.yami.shop.quartz.model.ScheduleJob~ûdê‚‘«\0L\0beanNamet\0Ljava/lang/String;L\0\ncreateTimet\0Ljava/util/Date;L\0cronExpressionq\0~\0	L\0jobIdt\0Ljava/lang/Long;L\0\nmethodNameq\0~\0	L\0paramsq\0~\0	L\0remarkq\0~\0	L\0statust\0Ljava/lang/Integer;xpt\0\ncouponTasksr\0java.util.Datehj�KYt\0\0xpw\0\0kdu0Sxt\0\r0 0 0/1 * * ?sr\0java.lang.Long;‹ä�Ì�#ß\0J\0valuexr\0java.lang.Number†¬•”à‹\0\0xp\0\0\0\0\0\0\0t\0deleteCouponUsert\0\0t\0)删除用户失效30天以上的优惠券sr\0java.lang.Integerâ ¤÷�‡8\0I\0valuexq\0~\0\0\0\0\0x\0'),
-('clusteredScheduler','TASK_12','DEFAULT',NULL,'com.yami.shop.quartz.config.QuartzJob','0','1','0','0','¬í\0sr\0org.quartz.JobDataMapŸ°ƒè¿©°Ë\0\0xr\0&org.quartz.utils.StringKeyDirtyFlagMap‚èÃûÅ](\0Z\0allowsTransientDataxr\0org.quartz.utils.DirtyFlagMapæ.­(v\nÎ\0Z\0dirtyL\0mapt\0Ljava/util/Map;xpsr\0java.util.HashMapÚÁÃ`Ñ\0F\0\nloadFactorI\0	thresholdxp?@\0\0\0\0\0w\0\0\0\0\0\0t\0\rJOB_PARAM_KEYsr\0&com.yami.shop.quartz.model.ScheduleJob~ûdê‚‘«\0L\0beanNamet\0Ljava/lang/String;L\0\ncreateTimet\0Ljava/util/Date;L\0cronExpressionq\0~\0	L\0jobIdt\0Ljava/lang/Long;L\0\nmethodNameq\0~\0	L\0paramsq\0~\0	L\0remarkq\0~\0	L\0statust\0Ljava/lang/Integer;xpt\0\ncouponTasksr\0java.util.Datehj�KYt\0\0xpw\0\0kdu¶üxt\0\r0 0 0/1 * * ?sr\0java.lang.Long;‹ä�Ì�#ß\0J\0valuexr\0java.lang.Number†¬•”à‹\0\0xp\0\0\0\0\0\0\0t\0changeCouponUsert\0\0t\02改å�˜ç”¨æˆ·ä¼˜æƒ åˆ¸çš„状æ€�(设为失效状æ€�)sr\0java.lang.Integerâ ¤÷�‡8\0I\0valuexq\0~\0\0\0\0\0x\0'),
-('clusteredScheduler','TASK_13','DEFAULT',NULL,'com.yami.shop.quartz.config.QuartzJob','0','1','0','0','¬í\0sr\0org.quartz.JobDataMapŸ°ƒè¿©°Ë\0\0xr\0&org.quartz.utils.StringKeyDirtyFlagMap‚èÃûÅ](\0Z\0allowsTransientDataxr\0org.quartz.utils.DirtyFlagMapæ.­(v\nÎ\0Z\0dirtyL\0mapt\0Ljava/util/Map;xpsr\0java.util.HashMapÚÁÃ`Ñ\0F\0\nloadFactorI\0	thresholdxp?@\0\0\0\0\0w\0\0\0\0\0\0t\0\rJOB_PARAM_KEYsr\0&com.yami.shop.quartz.model.ScheduleJob~ûdê‚‘«\0L\0beanNamet\0Ljava/lang/String;L\0\ncreateTimet\0Ljava/util/Date;L\0cronExpressionq\0~\0	L\0jobIdt\0Ljava/lang/Long;L\0\nmethodNameq\0~\0	L\0paramsq\0~\0	L\0remarkq\0~\0	L\0statust\0Ljava/lang/Integer;xpt\0\ncouponTasksr\0java.util.Datehj�KYt\0\0xpw\0\0kdv\n×xt\0\r0 0 0/1 * * ?sr\0java.lang.Long;‹ä�Ì�#ß\0J\0valuexr\0java.lang.Number†¬•”à‹\0\0xp\0\0\0\0\0\0\0\rt\0putOnCoupont\0\0t\0投放优惠券sr\0java.lang.Integerâ ¤÷�‡8\0I\0valuexq\0~\0\0\0\0\0x\0');
+('clusteredScheduler','TASK_10','DEFAULT',NULL,'com.yami.shop.quartz.config.QuartzJob','0','1','0','0','��\0sr\0org.quartz.JobDataMap���迩��\0\0xr\0&org.quartz.utils.StringKeyDirtyFlagMap�����](\0Z\0allowsTransientDataxr\0org.quartz.utils.DirtyFlagMap�.�(v\n�\0Z\0dirtyL\0mapt\0Ljava/util/Map;xpsr\0java.util.HashMap���`�\0F\0\nloadFactorI\0	thresholdxp?@\0\0\0\0\0w\0\0\0\0\0\0t\0\rJOB_PARAM_KEYsr\0&com.yami.shop.quartz.model.ScheduleJob~�dꂑ�\0L\0beanNamet\0Ljava/lang/String;L\0\ncreateTimet\0Ljava/util/Date;L\0cronExpressionq\0~\0	L\0jobIdt\0Ljava/lang/Long;L\0\nmethodNameq\0~\0	L\0paramsq\0~\0	L\0remarkq\0~\0	L\0statust\0Ljava/lang/Integer;xpt\0\ncouponTasksr\0java.util.Datehj�KYt\0\0xpw\0\0kds�sxt\0\r0 0 0/0 * * ?sr\0java.lang.Long;���#�\0J\0valuexr\0java.lang.Number������\0\0xp\0\0\0\0\0\0\0\nt\0changeCoupont\0\0q\0~\0sr\0java.lang.Integer⠤���8\0I\0valuexq\0~\0\0\0\0\0x\0'),
+('clusteredScheduler','TASK_11','DEFAULT',NULL,'com.yami.shop.quartz.config.QuartzJob','0','1','0','0','��\0sr\0org.quartz.JobDataMap���迩��\0\0xr\0&org.quartz.utils.StringKeyDirtyFlagMap�����](\0Z\0allowsTransientDataxr\0org.quartz.utils.DirtyFlagMap�.�(v\n�\0Z\0dirtyL\0mapt\0Ljava/util/Map;xpsr\0java.util.HashMap���`�\0F\0\nloadFactorI\0	thresholdxp?@\0\0\0\0\0w\0\0\0\0\0\0t\0\rJOB_PARAM_KEYsr\0&com.yami.shop.quartz.model.ScheduleJob~�dꂑ�\0L\0beanNamet\0Ljava/lang/String;L\0\ncreateTimet\0Ljava/util/Date;L\0cronExpressionq\0~\0	L\0jobIdt\0Ljava/lang/Long;L\0\nmethodNameq\0~\0	L\0paramsq\0~\0	L\0remarkq\0~\0	L\0statust\0Ljava/lang/Integer;xpt\0\ncouponTasksr\0java.util.Datehj�KYt\0\0xpw\0\0kdu0Sxt\0\r0 0 0/1 * * ?sr\0java.lang.Long;���#�\0J\0valuexr\0java.lang.Number������\0\0xp\0\0\0\0\0\0\0t\0deleteCouponUsert\0\0t\0)删除用户失效30天以上的优惠券sr\0java.lang.Integer⠤���8\0I\0valuexq\0~\0\0\0\0\0x\0'),
+('clusteredScheduler','TASK_12','DEFAULT',NULL,'com.yami.shop.quartz.config.QuartzJob','0','1','0','0','��\0sr\0org.quartz.JobDataMap���迩��\0\0xr\0&org.quartz.utils.StringKeyDirtyFlagMap�����](\0Z\0allowsTransientDataxr\0org.quartz.utils.DirtyFlagMap�.�(v\n�\0Z\0dirtyL\0mapt\0Ljava/util/Map;xpsr\0java.util.HashMap���`�\0F\0\nloadFactorI\0	thresholdxp?@\0\0\0\0\0w\0\0\0\0\0\0t\0\rJOB_PARAM_KEYsr\0&com.yami.shop.quartz.model.ScheduleJob~�dꂑ�\0L\0beanNamet\0Ljava/lang/String;L\0\ncreateTimet\0Ljava/util/Date;L\0cronExpressionq\0~\0	L\0jobIdt\0Ljava/lang/Long;L\0\nmethodNameq\0~\0	L\0paramsq\0~\0	L\0remarkq\0~\0	L\0statust\0Ljava/lang/Integer;xpt\0\ncouponTasksr\0java.util.Datehj�KYt\0\0xpw\0\0kdu��xt\0\r0 0 0/1 * * ?sr\0java.lang.Long;���#�\0J\0valuexr\0java.lang.Number������\0\0xp\0\0\0\0\0\0\0t\0changeCouponUsert\0\0t\02改�用户优惠券的状�(设为失效状�)sr\0java.lang.Integer⠤���8\0I\0valuexq\0~\0\0\0\0\0x\0'),
+('clusteredScheduler','TASK_13','DEFAULT',NULL,'com.yami.shop.quartz.config.QuartzJob','0','1','0','0','��\0sr\0org.quartz.JobDataMap���迩��\0\0xr\0&org.quartz.utils.StringKeyDirtyFlagMap�����](\0Z\0allowsTransientDataxr\0org.quartz.utils.DirtyFlagMap�.�(v\n�\0Z\0dirtyL\0mapt\0Ljava/util/Map;xpsr\0java.util.HashMap���`�\0F\0\nloadFactorI\0	thresholdxp?@\0\0\0\0\0w\0\0\0\0\0\0t\0\rJOB_PARAM_KEYsr\0&com.yami.shop.quartz.model.ScheduleJob~�dꂑ�\0L\0beanNamet\0Ljava/lang/String;L\0\ncreateTimet\0Ljava/util/Date;L\0cronExpressionq\0~\0	L\0jobIdt\0Ljava/lang/Long;L\0\nmethodNameq\0~\0	L\0paramsq\0~\0	L\0remarkq\0~\0	L\0statust\0Ljava/lang/Integer;xpt\0\ncouponTasksr\0java.util.Datehj�KYt\0\0xpw\0\0kdv\n�xt\0\r0 0 0/1 * * ?sr\0java.lang.Long;���#�\0J\0valuexr\0java.lang.Number������\0\0xp\0\0\0\0\0\0\0\rt\0putOnCoupont\0\0t\0投放优惠券sr\0java.lang.Integer⠤���8\0I\0valuexq\0~\0\0\0\0\0x\0');
 
 /*Table structure for table `qrtz_locks` */
 
@@ -247,7 +250,7 @@ CREATE TABLE `qrtz_triggers` (
 /*Data for the table `qrtz_triggers` */
 
 insert  into `qrtz_triggers`(`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`,`JOB_NAME`,`JOB_GROUP`,`DESCRIPTION`,`NEXT_FIRE_TIME`,`PREV_FIRE_TIME`,`PRIORITY`,`TRIGGER_STATE`,`TRIGGER_TYPE`,`START_TIME`,`END_TIME`,`CALENDAR_NAME`,`MISFIRE_INSTR`,`JOB_DATA`) values 
-('clusteredScheduler','TASK_10','DEFAULT','TASK_10','DEFAULT',NULL,1561359600000,1561356000000,5,'PAUSED','CRON',1560758441000,0,NULL,1,'¬í\0sr\0org.quartz.JobDataMapŸ°ƒè¿©°Ë\0\0xr\0&org.quartz.utils.StringKeyDirtyFlagMap‚èÃûÅ](\0Z\0allowsTransientDataxr\0org.quartz.utils.DirtyFlagMapæ.­(v\nÎ\0Z\0dirtyL\0mapt\0Ljava/util/Map;xpsr\0java.util.HashMapÚÁÃ`Ñ\0F\0\nloadFactorI\0	thresholdxp?@\0\0\0\0\0w\0\0\0\0\0\0t\0\rJOB_PARAM_KEYsr\0&com.yami.shop.quartz.model.ScheduleJob~ûdê‚‘«\0L\0beanNamet\0Ljava/lang/String;L\0\ncreateTimet\0Ljava/util/Date;L\0cronExpressionq\0~\0	L\0jobIdt\0Ljava/lang/Long;L\0\nmethodNameq\0~\0	L\0paramsq\0~\0	L\0remarkq\0~\0	L\0statust\0Ljava/lang/Integer;xpt\0\ncouponTaskpt\0\r0 0 0/1 * * ?sr\0java.lang.Long;‹ä�Ì�#ß\0J\0valuexr\0java.lang.Number†¬•”à‹\0\0xp\0\0\0\0\0\0\0\nt\0changeCoupont\0\0q\0~\0sr\0java.lang.Integerâ ¤÷�‡8\0I\0valuexq\0~\0\0\0\0\0x\0'),
+('clusteredScheduler','TASK_10','DEFAULT','TASK_10','DEFAULT',NULL,1561359600000,1561356000000,5,'PAUSED','CRON',1560758441000,0,NULL,1,'��\0sr\0org.quartz.JobDataMap���迩��\0\0xr\0&org.quartz.utils.StringKeyDirtyFlagMap�����](\0Z\0allowsTransientDataxr\0org.quartz.utils.DirtyFlagMap�.�(v\n�\0Z\0dirtyL\0mapt\0Ljava/util/Map;xpsr\0java.util.HashMap���`�\0F\0\nloadFactorI\0	thresholdxp?@\0\0\0\0\0w\0\0\0\0\0\0t\0\rJOB_PARAM_KEYsr\0&com.yami.shop.quartz.model.ScheduleJob~�dꂑ�\0L\0beanNamet\0Ljava/lang/String;L\0\ncreateTimet\0Ljava/util/Date;L\0cronExpressionq\0~\0	L\0jobIdt\0Ljava/lang/Long;L\0\nmethodNameq\0~\0	L\0paramsq\0~\0	L\0remarkq\0~\0	L\0statust\0Ljava/lang/Integer;xpt\0\ncouponTaskpt\0\r0 0 0/1 * * ?sr\0java.lang.Long;���#�\0J\0valuexr\0java.lang.Number������\0\0xp\0\0\0\0\0\0\0\nt\0changeCoupont\0\0q\0~\0sr\0java.lang.Integer⠤���8\0I\0valuexq\0~\0\0\0\0\0x\0'),
 ('clusteredScheduler','TASK_11','DEFAULT','TASK_11','DEFAULT',NULL,1561359600000,1561356000000,5,'PAUSED','CRON',1560758530000,0,NULL,1,''),
 ('clusteredScheduler','TASK_12','DEFAULT','TASK_12','DEFAULT',NULL,1561359600000,1561356000000,5,'PAUSED','CRON',1560758564000,0,NULL,1,''),
 ('clusteredScheduler','TASK_13','DEFAULT','TASK_13','DEFAULT',NULL,1561359600000,1561356000000,5,'PAUSED','CRON',1560758586000,0,NULL,1,'');

+ 55 - 0
docker-compose.yml

@@ -0,0 +1,55 @@
+version: '3'
+services:
+  mall4j-mysql:
+    build:
+      context: ./
+      dockerfile: ./db/Dockerfile
+    environment:
+      MYSQL_ROOT_PASSWORD: root
+    restart: always
+    container_name: mall4j-mysql
+    image: mall4j-mysql
+    ports:
+      - 3306:3306
+    volumes:
+      - ./mall4j-mysql:/var/lib/mysql
+    command: --lower_case_table_names=1
+
+  mall4j-redis:
+    image: redis:5.0.4
+    restart: always
+    container_name: mall4j-redis
+    ports:
+      - 6379:6379
+
+  mall4j-admin:
+    build:
+      context: ./
+      dockerfile: ./yami-shop-admin/Dockerfile
+    restart: always
+    container_name: mall4j-admin
+    image: mall4j-admin
+    ports:
+      - 8085:8085
+    depends_on:
+      - mall4j-redis
+      - mall4j-mysql
+    links:
+      - "mall4j-redis"
+      - "mall4j-mysql"
+
+  mall4j-api:
+    build:
+      context: ./
+      dockerfile: ./yami-shop-api/Dockerfile
+    restart: always
+    container_name: mall4j-api
+    image: mall4j-api
+    ports:
+      - 8086:8086
+    depends_on:
+      - mall4j-redis
+      - mall4j-mysql
+    links:
+      - "mall4j-redis"
+      - "mall4j-mysql"

+ 15 - 0
yami-shop-admin/Dockerfile

@@ -0,0 +1,15 @@
+FROM anapsix/alpine-java:8_server-jre_unlimited
+
+MAINTAINER opgames(opgames.cn@gmail.com)
+
+RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
+
+RUN mkdir -p /opt/projects/mall4j
+
+WORKDIR /opt/projects/mall4j
+
+ADD ./yami-shop-admin/target/yami-shop-admin-0.0.1-SNAPSHOT.jar ./
+
+EXPOSE 8085
+
+CMD java -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms512m -Xmx512m -Xmn128m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC -Dspring.profiles.active=docker,quartz yami-shop-admin-0.0.1-SNAPSHOT.jar

+ 20 - 0
yami-shop-admin/src/main/resources/application-docker.yml

@@ -0,0 +1,20 @@
+server:
+  port: 8085
+spring:
+  datasource:
+    url: jdbc:mysql://mall4j-mysql:3306/yami_shops?allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true
+    username: root
+    password: root
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    type: com.zaxxer.hikari.HikariDataSource
+    hikari:
+      minimum-idle: 0
+      maximum-pool-size: 20
+      idle-timeout: 25000
+      auto-commit: true
+      connection-test-query: SELECT 1
+  redis:
+    redisson:
+      config: classpath:redisson-docker.yml
+logging:
+  config: classpath:log4j2_prod.xml

+ 1 - 1
yami-shop-admin/src/main/resources/application-prod.yml

@@ -15,6 +15,6 @@ spring:
       connection-test-query: SELECT 1
   redis:
     redisson:
-      config: classpath:redisson.yml
+      config: classpath:redisson-docker.yml
 logging:
   config: classpath:log4j2_prod.xml

+ 31 - 0
yami-shop-admin/src/main/resources/redisson-docker.yml

@@ -0,0 +1,31 @@
+# 单节点设置
+singleServerConfig:
+  address: redis://mall4j-redis:6379
+  database: 0
+  password: null
+  idleConnectionTimeout: 10000
+  pingTimeout: 1000
+  connectTimeout: 10000
+  timeout: 3000
+  retryAttempts: 3
+  retryInterval: 1500
+  reconnectionTimeout: 3000
+  failedAttempts: 3
+  clientName: null
+  # 发布和订阅连接的最小空闲连接数 默认1
+  subscriptionConnectionMinimumIdleSize: 1
+  # 发布和订阅连接池大小 默认50
+  subscriptionConnectionPoolSize: 10
+  # 单个连接最大订阅数量 默认5
+  subscriptionsPerConnection: 5
+  # 最小空闲连接数 默认32,现在暂时不需要那么多的线程
+  connectionMinimumIdleSize: 4
+  # connectionPoolSize 默认64,现在暂时不需要那么多的线程
+  connectionPoolSize: 20
+# 这个线程池数量被所有RTopic对象监听器,RRemoteService调用者和RExecutorService任务共同共享。
+threads: 0
+# 这个线程池数量是在一个Redisson实例内,被其创建的所有分布式数据类型和服务,以及底层客户端所一同共享的线程池里保存的线程数量。
+nettyThreads: 0
+codec:
+  class: com.yami.shop.common.serializer.redisson.FstCodec
+transportMode: NIO

+ 1 - 1
yami-shop-admin/src/main/resources/redisson.yml

@@ -1,6 +1,6 @@
 # 单节点设置
 singleServerConfig:
-  address: redis://127.0.0.1:6379
+  address: redis://mall4j-redis:6379
   database: 0
   password: null
   idleConnectionTimeout: 10000

+ 15 - 0
yami-shop-api/Dockerfile

@@ -0,0 +1,15 @@
+FROM anapsix/alpine-java:8_server-jre_unlimited
+
+MAINTAINER opgames(opgames.cn@gmail.com)
+
+RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
+
+RUN mkdir -p /opt/projects/mall4j
+
+WORKDIR /opt/projects/mall4j
+
+EXPOSE 8086
+
+ADD ./yami-shop-api/target/yami-shop-api-0.0.1-SNAPSHOT.jar ./
+
+CMD java -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC -Dspring.profiles.active=docker yami-shop-api-0.0.1-SNAPSHOT.jar

+ 21 - 0
yami-shop-api/src/main/resources/application-docker.yml

@@ -0,0 +1,21 @@
+server:
+  port: 8086
+  undertow:
+    worker-threads: 200
+
+spring:
+  datasource:
+    url: jdbc:mysql://mall4j-mysql:3306/yami_shops?allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true
+    username: root
+    password: root
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    type: com.zaxxer.hikari.HikariDataSource
+    hikari:
+      minimum-idle: 0
+      maximum-pool-size: 20
+      connection-test-query: select 1
+  redis:
+    redisson:
+      config: classpath:redisson-docker.yml
+logging:
+  config: classpath:log4j2_prod.xml

+ 31 - 0
yami-shop-api/src/main/resources/redisson-docker.yml

@@ -0,0 +1,31 @@
+# 单节点设置
+singleServerConfig:
+  address: redis://mall4j-redis:6379
+  database: 0
+  password: null
+  idleConnectionTimeout: 10000
+  pingTimeout: 1000
+  connectTimeout: 10000
+  timeout: 3000
+  retryAttempts: 3
+  retryInterval: 1500
+  reconnectionTimeout: 3000
+  failedAttempts: 3
+  clientName: null
+  # 发布和订阅连接的最小空闲连接数 默认1
+  subscriptionConnectionMinimumIdleSize: 1
+  # 发布和订阅连接池大小 默认50
+  subscriptionConnectionPoolSize: 10
+  # 单个连接最大订阅数量 默认5
+  subscriptionsPerConnection: 5
+  # 最小空闲连接数 默认32,现在暂时不需要那么多的线程
+  connectionMinimumIdleSize: 4
+  # connectionPoolSize 默认64,现在暂时不需要那么多的线程
+  connectionPoolSize: 20
+# 这个线程池数量被所有RTopic对象监听器,RRemoteService调用者和RExecutorService任务共同共享。
+threads: 0
+# 这个线程池数量是在一个Redisson实例内,被其创建的所有分布式数据类型和服务,以及底层客户端所一同共享的线程池里保存的线程数量。
+nettyThreads: 0
+codec:
+  class: com.yami.shop.common.serializer.redisson.FstCodec
+transportMode: NIO