# Apollo安装
准备:
环境要求:jdk1.8 mysql5.7.27
下载:https://github.com/ctripcorp/apollo/wiki

***
上传压缩包:

在Apollo目录下创建三个文件夹,因为在同一目录下解压会有名称相同的文件。
在三个文件夹下分别解压,logs是记录日志的文件。
下载sql文件:生成数据库:
地址:同上找一下。apolloconfigdb.sql和apolloportaldb.sql 导入MySQL生成数据库。
上传sql文件到/root/目录下:

导入mysql:
~~~shell
mysql> source /root/apolloconfigdb.sql
mysql> source /root/apolloportaldb.sql
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| ApolloConfigDB |
| ApolloPortalDB |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.00 sec)
mysql> flush privileges;
~~~

***
### 三个服务的配置信息:
#### 修改一:
~~~shell
每个对应文件下有个/config/application-github.properties文件,修改数据库url 用户 密码。
[root@docker-angent_1 ~]# cd /apollo/adminservice/apollo-adminservice-1.3.0/config/
[root@docker-angent_1 config]# vim application-github.properties
# DataSource
spring.datasource.url = jdbc:mysql://10.160.103.100:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = root
spring.datasource.password = 123
别遗漏,改三个文件!!
~~~

***
#### 修改二:
~~~shell
修改startup.sh文件:
同样:每个对应文件下有个scripts/startup.sh文件
[root@docker-angent_1 scripts]# pwd
/apollo/adminservice/apollo-adminservice-1.3.0/scripts
[root@docker-angent_1 scripts]# vim startup.sh
#!/bin/bash
SERVICE_NAME=apollo-adminservice
## Adjust log dir if necessary
LOG_DIR=/apollo/logs 修改日志地址
## Adjust server port if necessary
SERVER_PORT=9002 是否被占用
别遗漏,改三个文件!!
~~~

***
#### 修改三:
~~~shell
修改portal服务下的meta配置:
[root@docker-angent_1 ~]# cd /apollo/portal/apollo-portal-1.3.0/config
[root@docker-angent_1 config]# vim apollo-env.properties
local.meta=http://localhost:9001
dev.meta=http://localhost:9001
fat.meta=http://fill-in-fat-meta-server:8080
uat.meta=http://fill-in-uat-meta-server:8080
lpt.meta=${lpt_meta}
pro.meta=http://fill-in-pro-meta-server:8080
~~~
***
### 修改数据库meta地址:
~~~shell
mysql> use ApolloConfigDB;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+--------------------------+
| Tables_in_ApolloConfigDB |
+--------------------------+
| AccessKey |
| App |
| AppNamespace |
| Audit |
| Cluster |
| Commit |
| GrayReleaseRule |
| Instance |
| InstanceConfig |
| Item |
| Namespace |
| NamespaceLock |
| Release |
| ReleaseHistory |
| ReleaseMessage |
| ServerConfig |
+--------------------------+
16 rows in set (0.01 sec)
mysql> use ServerConfig;
ERROR 1049 (42000): Unknown database 'ServerConfig'
mysql> select * from ServerConfig;
+----+------------------------------+---------+-------------------------------+---------------------------------------------------------------------------------------------+-----------+----------------------+------------------------+---------------------------+---------------------+
| Id | Key | Cluster | Value | Comment | IsDeleted | DataChange_CreatedBy | DataChange_CreatedTime | DataChange_LastModifiedBy | DataChange_LastTime |
+----+------------------------------+---------+-------------------------------+---------------------------------------------------------------------------------------------+-----------+----------------------+------------------------+---------------------------+---------------------+
| 1 | eureka.service.url | default | http://localhost:8080/eureka/ | Eureka服务Url,多个service以英文逗号分隔 | | default | 2020-11-27 14:28:57 | | 2020-11-27 14:28:57 |
| 2 | namespace.lock.switch | default | false | 一次发布只能有一个人修改开关 | | default | 2020-11-27 14:28:57 | | 2020-11-27 14:28:57 |
| 3 | item.value.length.limit | default | 20000 | item value最大长度限制 | | default | 2020-11-27 14:28:57 | | 2020-11-27 14:28:57 |
| 4 | config-service.cache.enabled | default | false | ConfigService是否开启缓存,开启后能提高性能,但是会增大内存消耗! | | default | 2020-11-27 14:28:57 | | 2020-11-27 14:28:57 |
| 5 | item.key.length.limit | default | 128 | item key 最大长度限制 | | default | 2020-11-27 14:28:57 | | 2020-11-27 14:28:57 |
+----+------------------------------+---------+-------------------------------+---------------------------------------------------------------------------------------------+-----------+----------------------+------------------------+---------------------------+---------------------+
5 rows in set (0.00 sec)
mysql> exit
# eureka地址修改为真实的地址:
mysql> update ServerConfig set Value="http://10.162.1.76:8761/eureka/" where id = 1;
-----------------------------------------------------------
设置最大连接数为1500、默认是100太小了。
mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 1000 |
+-----------------+-------+
1 row in set (0.02 sec)
mysql> set global max_connections = 1500;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 1500 |
+-----------------+-------+
1 row in set (0.00 sec)
~~~

***
#### 启动三个服务
启动三个/scripts/startup.sh 注意服务的启动顺序:
configservice—adminservice—portal
### 核算微服务apollo配置与使用
1. 使用apollo新建项目添加配置文件
1.1. 登录apollo
测试环境地址:http://10.162.1.76:9003/
用户名:apollo
密码:admin
1.2. 新建项目

输入ID与名称,一般与应用名保持一致,输入完成点击提交

默认application.properties,核算配置文件为application.yml,需要新建namespace,点击添加namespace

点击创建namespace

点击private

选择yml输入application,点击提交

点击返回项目首页

点击编辑

粘贴进去配置文件的所有内容(注意license内容是单行的,出现以下情况需要删除回车符),然后点击✔号

点击发布


这样apollo项目就建好了,如果一个应用在多个环境使用apollo配置,只需要新建集群即可,步骤如下:
点击添加集群

输入集群名称

点击返回项目首页,这样就有一个环境单独使用的配置

按照之前步骤添加配置信息即可
1.3. 修改项目配置使用apollo
在配置文件bootstrap.yml中添加apollo
注意信息如下如果多个环境新建了多个集群,每个环境的cluster都要改为相应的集群名称
app:
id: ycloans-file-service
apollo:
meta: http://10.200.9.7:9001
cluster: DEV #集群名称
cacheDir: ../apollo/ #apollo配置文件存放目录
bootstrap:
enabled: ***\*true\****
namespace: application.yml
应用的main方法添加相应的注解
@EnableApolloConfig({"application.yml"})

以上就完成了apollo的配置使用。
ycloans-pay-service (namespace 配置)
~~~shell
EUREKA:
eureka.instance.prefer-ip-address = true
eureka.instance.instanceId = ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}
eureka.instance.lease-renewal-interval-in-seconds = 5
eureka.instance.lease-expiration-duration-in-seconds = 10
eureka.instance.status-page-url-path = /management/info
eureka.instance.health-check-url-path = /management/health
eureka.instance.metadata-map.profile = ${spring.profiles.active}
eureka.instance.metadata-map.version = ${info.project.version}
eureka.client.service-url.defaultZone = http://10.162.1.76:8761/eureka/,http://10.162.1.100:8762/eureka/
eureka.client.enabled = true
eureka.client.healthcheck.enabled = true
eureka.client.fetch-registry = true
eureka.client.register-with-eureka = true
eureka.client.instance-info-replication-interval-seconds = 10
eureka.client.registry-fetch-interval-seconds = 10
----------------------------------------------------------
############################################
#### ActiveMq 消息队列配置
############################################
# 采用的消息队列类型:
# 0-default,仅内存模拟
# 1-redisMq
# 2-activeMq
spring.mq.type = 2
# 消费通知方式 0-开启线程调用borker接口; 1-开启线程放入消息队列
# 如果此值被设置成1,则broker启动时需要开启监听通知结果的队列,队列命名
# 规则是: 业务对列:result
reliable.message.consumer.notify.type = 1
reliable.message.consumer.notify.thread.corePerSize = 100
reliable.message.consumer.notify.thread.maxPerSize = 500
reliable.message.consumer.notify.thread.keepAliveTime = 500
reliable.message.consumer.notify.thread.blockingQueueSize = 500
test.activemq.net-address = 127.0.0.1
# spring.activemq.broker-url = tcp://10.162.1.245:61616 测试环境
spring.activemq.broker-url = tcp://10.162.1.100:61616
#spring.activemq.broker-url = tcp://activemq-net:61616
spring.activemq.user = admin
spring.activemq.password = admin
# 在考虑结束之前等待的时间
spring.activemq.close-timeout = 15s
# 默认代理URL是否应该在内存中。如果指定了显式代理,则忽略此值。
spring.activemq.in-memory = false
# 是否在回滚消息之前停止消息传递。这意味着当启用此命令时,消息顺序不会被保留。
spring.activemq.non-blocking-redelivery = false
# 等待消息发送响应的时间。设置为0等待永远。
spring.activemq.send-timeout = 0
spring.activemq.queue-name = aa:pay:mock
spring.activemq.response-queue-name = aa:pay:mock:result
# 表示使用Topic模式还是queue模式,默认使用topic模式
spring.activemq.toTopic = true
spring.pool.enabled = true
spring.pool.max-connections = 10
spring.pool.idle-timeout = 30000
#默认情况下activemq提供的是queue模式,若要使用topic模式需要配置下面配置
spring.jms.pub-sub-domain = true
# 是否信任所有包
#spring.activemq.packages.trust-all=
# 要信任的特定包的逗号分隔列表(当不信任所有包时)
#spring.activemq.packages.trusted=
# 当连接请求和池满时是否阻塞。设置false会抛“JMSException异常”。
#spring.activemq.pool.block-if-full=true
# 如果池仍然满,则在抛出异常前阻塞时间。
#spring.activemq.pool.block-if-full-timeout=-1ms
# 是否在启动时创建连接。可以在启动时用于加热池。
#spring.activemq.pool.create-connection-on-startup=true
# 是否用Pooledconnectionfactory代替普通的ConnectionFactory。
#spring.activemq.pool.enabled=false
# 连接过期超时。
#spring.activemq.pool.expiry-timeout=0ms
# 连接空闲超时
#spring.activemq.pool.idle-timeout=30s
# 连接池最大连接数
#spring.activemq.pool.max-connections=1
# 每个连接的有效会话的最大数目。
#spring.activemq.pool.maximum-active-session-per-connection=500
# 当有"JMSException"时尝试重新连接
#spring.activemq.pool.reconnect-on-exception=true
# 在空闲连接清除线程之间运行的时间。当为负数时,没有空闲连接驱逐线程运行。
#spring.activemq.pool.time-between-expiration-check=-1ms
# 是否只使用一个MessageProducer
#spring.activemq.pool.use-anonymous-producers=true
----------------------------------
YCLOANS-PUBLIC:
license.licenseContext = <?xml version="1.0" encoding="UTF-8"?><license build-time="Mon May 06 11:39:46 CST 2019" validate-code="FC6107A40B8E7CF356B4EC5CC39A9CA6"><element name="license_code">0000011874</element><element name="product_code">0000001122</element><element name="product_name_zh-cn">宇信科技基于微服务框架统一开发平台</element><element name="product_name_en-us">YUSP</element><element name="version_major">1</element><element name="version_sub">0</element><element name="version_publish">1</element><element name="complie_date">2018-03-20</element><element name="license_type">内部试用许可证</element><element name="customer_name"/><element name="contract_code"/><element name="license_start_time">2019-05-06</element><element name="license_end_time">2119-06-01</element></license>
license.licenseModel = TRIAL
management.health.rabbit.enabled = false
management.health.ycloansmq.enabled = true
management.endpoints.web.base-path = /api/system/actuator
management.endpoint.health.show-details = always
management.endpoints.web.exposure.include = *
management.security.enabled = false
swagger.enabled = true
swagger.title = YUSP APP ycloans-starter Application API
swagger.description = YUSP APP ycloans-starter API documentation
swagger.version = 2.1.1.RELEASE
spring.liquibase.enabled = false
spring.liquibase.change-log = classpath:config/liquibase/master.xml
spring.cloud.inetutils.preferred-networks = 172.20.*
spring.jackson.serialization.INDENT_OUTPUT = true
spring.messages.cache-duration = 1
pagehelper.helperDialect = mysql
pagehelper.reasonable = true
mapper.mappers[0] = cn.com.yusys.yusp.commons.mapper.CommonMapper
-----------------------------------------------
MYSQL:
######################################
## MYSQL数据库配置
######################################
spring.datasource.url = jdbc:mysql://10.162.1.102:3306/apolloconfigdb?useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username = apollo
spring.datasource.password = apollo
spring.datasource.hikari.minimum-idle = 20
spring.datasource.hikari.maximum-pool-size = 500
spring.datasource.hikari.data-source-properties.cachePrepStmts = true
spring.datasource.hikari.data-source-properties.prepStmtCacheSize = 250
spring.datasource.hikari.data-source-properties.prepStmtCacheSqlLimit = 2048
spring.datasource.hikari.data-source-properties.useServerPrepStmts = true
# 特别注意此处,否则存储mysql将无效
mybatis.mapperLocations = classpath*:mapper/**/*.xml
mybatis.configuration.map-underscore-to-camel-case = true
~~~




ycloans-agent-service
~~~shell
application:
spring.application.name = ycloans-pay-service
spring.liquibase.enabled = false
spring.liquibase.change-log = classpath:config/liquibase/master.xml
spring.cloud.inetutils.preferred-networks = 10
spring.cloud.inetutils.ignored-interfaces = lo,lo:0
spring.jackson.serialization.INDENT_OUTPUT = true
spring.datasource.driver-class-name = oracle.jdbc.OracleDriver
spring.datasource.type = com.zaxxer.hikari.HikariDataSource
spring.datasource.url = jdbc:oracle:thin:@10.162.1.57:1521:orcl
spring.datasource.username = ycloanspay
spring.datasource.password = ycloanspay
spring.datasource.hikari.minimum-idle = 2
spring.datasource.hikari.maximum-pool-size = 2
spring.datasource.hikari.data-source-properties.cachePrepStmts = true
spring.datasource.hikari.data-source-properties.prepStmtCacheSize = 250
spring.datasource.hikari.data-source-properties.prepStmtCacheSqlLimit = 2048
spring.datasource.hikari.data-source-properties.useServerPrepStmts = true
spring.messages.cache-duration = 1
############################################
#### ActiveMq 消息队列配置
############################################
# 采用的消息队列类型:
# 0-default,仅内存模拟
# 1-redisMq
# 2-activeMq
spring.mq.type = 2
# 消费通知方式 0-开启线程调用borker接口; 1-开启线程放入消息队列
# 如果此值被设置成1,则broker启动时需要开启监听通知结果的队列,队列命名
# 规则是: 业务对列:result
reliable.message.consumer.notify.type = 1
reliable.message.consumer.notify.thread.corePerSize = 100
reliable.message.consumer.notify.thread.maxPerSize = 500
reliable.message.consumer.notify.thread.keepAliveTime = 500
reliable.message.consumer.notify.thread.blockingQueueSize = 500
test.activemq.net-address = 127.0.0.1
# spring.activemq.broker-url = tcp://10.162.1.245:61616 测试环境
spring.activemq.broker-url = tcp://10.162.1.100:61616
#spring.activemq.broker-url = tcp://activemq-net:61616
spring.activemq.user = admin
spring.activemq.password = admin
# 在考虑结束之前等待的时间
spring.activemq.close-timeout = 15s
# 默认代理URL是否应该在内存中。如果指定了显式代理,则忽略此值。
spring.activemq.in-memory = false
# 是否在回滚消息之前停止消息传递。这意味着当启用此命令时,消息顺序不会被保留。
spring.activemq.non-blocking-redelivery = false
# 等待消息发送响应的时间。设置为0等待永远。
spring.activemq.send-timeout = 0
spring.activemq.queue-name = CommonPaySendQueue
spring.activemq.response-queue-name = CommonPayResultQueue
spring.activemq.topic-name = abc
spring.activemq.respone-topic-name = abc
# 表示使用Topic模式还是queue模式,默认使用topic模式
spring.activemq.toTopic = true
spring.pool.enabled = true
spring.pool.max-connections = 10
spring.pool.idle-timeout = 30000
#默认情况下activemq提供的是queue模式,若要使用topic模式需要配置下面配置
spring.jms.pub-sub-domain = true
############################################
#### 业务参数配置
############################################
moneyPay.pay = http://10.162.4.92:8080/paybatch/receipt/order11
moneyPay.qry = http://10.162.4.92:8080/paybatch/receipt/query11
moneyPay.notify = http://10.162.4.92:8080/paybatch/receipt/batch/state/notify11
############################################
#### 注册中心 配置
############################################
eureka.instance.prefer-ip-address = true
eureka.instance.instanceId = ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}
eureka.instance.lease-renewal-interval-in-seconds = 5
eureka.instance.lease-expiration-duration-in-seconds = 10
eureka.instance.status-page-url-path = /management/info
eureka.instance.health-check-url-path = /management/health
eureka.instance.metadata-map.profile = ${spring.profiles.active}
eureka.instance.metadata-map.version = ${info.project.version}
eureka.client.service-url.defaultZone = http://10.162.1.76:8761/eureka/,http://10.162.1.100:8762/eureka/
eureka.client.enabled = true
eureka.client.healthcheck.enabled = true
eureka.client.fetch-registry = true
eureka.client.register-with-eureka = true
eureka.client.instance-info-replication-interval-seconds = 10
eureka.client.registry-fetch-interval-seconds = 10
~~~

ycloans-common-reliable-message
~~~shell
EUREKA:
eureka.instance.prefer-ip-address = true
eureka.instance.instanceId = ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}
eureka.instance.lease-renewal-interval-in-seconds = 5
eureka.instance.lease-expiration-duration-in-seconds = 10
eureka.instance.status-page-url-path = /management/info
eureka.instance.health-check-url-path = /management/health
eureka.instance.metadata-map.profile = ${spring.profiles.active}
eureka.instance.metadata-map.version = ${info.project.version}
eureka.client.service-url.defaultZone = http://10.162.1.76:8761/eureka/,http://10.162.1.100:8762/eureka/
eureka.client.enabled = true
eureka.client.healthcheck.enabled = true
eureka.client.fetch-registry = true
eureka.client.register-with-eureka = true
eureka.client.instance-info-replication-interval-seconds = 10
eureka.client.registry-fetch-interval-seconds = 10
--------------------------------
ActiveMq:
############################################
#### ActiveMq 消息队列配置
############################################
# 采用的消息队列类型:
# 0-default,仅内存模拟
# 1-redisMq
# 2-activeMq
spring.mq.type = 2
# 消费通知方式 0-开启线程调用borker接口; 1-开启线程放入消息队列
# 如果此值被设置成1,则broker启动时需要开启监听通知结果的队列,队列命名
# 规则是: 业务对列:result
reliable.message.consumer.notify.type = 1
reliable.message.consumer.notify.thread.corePerSize = 100
reliable.message.consumer.notify.thread.maxPerSize = 500
reliable.message.consumer.notify.thread.keepAliveTime = 500
reliable.message.consumer.notify.thread.blockingQueueSize = 500
test.activemq.net-address = 127.0.0.1
# spring.activemq.broker-url = tcp://10.162.1.245:61616 测试环境
spring.activemq.broker-url = tcp://10.162.1.100:61616
#spring.activemq.broker-url = tcp://activemq-net:61616
spring.activemq.user = admin
spring.activemq.password = admin
# 在考虑结束之前等待的时间
spring.activemq.close-timeout = 15s
# 默认代理URL是否应该在内存中。如果指定了显式代理,则忽略此值。
spring.activemq.in-memory = false
# 是否在回滚消息之前停止消息传递。这意味着当启用此命令时,消息顺序不会被保留。
spring.activemq.non-blocking-redelivery = false
# 等待消息发送响应的时间。设置为0等待永远。
spring.activemq.send-timeout = 0
spring.activemq.queue-name = aa:pay:mock
spring.activemq.response-queue-name = aa:pay:mock:result
# 表示使用Topic模式还是queue模式,默认使用topic模式
spring.activemq.toTopic = true
spring.pool.enabled = true
spring.pool.max-connections = 10
spring.pool.idle-timeout = 30000
#默认情况下activemq提供的是queue模式,若要使用topic模式需要配置下面配置
spring.jms.pub-sub-domain = true
# 是否信任所有包
#spring.activemq.packages.trust-all=
# 要信任的特定包的逗号分隔列表(当不信任所有包时)
#spring.activemq.packages.trusted=
# 当连接请求和池满时是否阻塞。设置false会抛“JMSException异常”。
#spring.activemq.pool.block-if-full=true
# 如果池仍然满,则在抛出异常前阻塞时间。
#spring.activemq.pool.block-if-full-timeout=-1ms
# 是否在启动时创建连接。可以在启动时用于加热池。
#spring.activemq.pool.create-connection-on-startup=true
# 是否用Pooledconnectionfactory代替普通的ConnectionFactory。
#spring.activemq.pool.enabled=false
# 连接过期超时。
#spring.activemq.pool.expiry-timeout=0ms
# 连接空闲超时
#spring.activemq.pool.idle-timeout=30s
# 连接池最大连接数
#spring.activemq.pool.max-connections=1
# 每个连接的有效会话的最大数目。
#spring.activemq.pool.maximum-active-session-per-connection=500
# 当有"JMSException"时尝试重新连接
#spring.activemq.pool.reconnect-on-exception=true
# 在空闲连接清除线程之间运行的时间。当为负数时,没有空闲连接驱逐线程运行。
#spring.activemq.pool.time-between-expiration-check=-1ms
# 是否只使用一个MessageProducer
#spring.activemq.pool.use-anonymous-producers=true
--------------------------------------------------------
YCLOANS-PUBLIC:
license.licenseContext = <?xml version="1.0" encoding="UTF-8"?><license build-time="Mon May 06 11:39:46 CST 2019" validate-code="FC6107A40B8E7CF356B4EC5CC39A9CA6"><element name="license_code">0000011874</element><element name="product_code">0000001122</element><element name="product_name_zh-cn">宇信科技基于微服务框架统一开发平台</element><element name="product_name_en-us">YUSP</element><element name="version_major">1</element><element name="version_sub">0</element><element name="version_publish">1</element><element name="complie_date">2018-03-20</element><element name="license_type">内部试用许可证</element><element name="customer_name"/><element name="contract_code"/><element name="license_start_time">2019-05-06</element><element name="license_end_time">2119-06-01</element></license>
license.licenseModel = TRIAL
management.health.rabbit.enabled = false
management.health.ycloansmq.enabled = true
management.endpoints.web.base-path = /api/system/actuator
management.endpoint.health.show-details = always
management.endpoints.web.exposure.include = *
management.security.enabled = false
swagger.enabled = true
swagger.title = YUSP APP ycloans-starter Application API
swagger.description = YUSP APP ycloans-starter API documentation
swagger.version = 2.1.1.RELEASE
spring.liquibase.enabled = false
spring.liquibase.change-log = classpath:config/liquibase/master.xml
spring.cloud.inetutils.preferred-networks = 172.20.*
spring.jackson.serialization.INDENT_OUTPUT = true
spring.messages.cache-duration = 1
pagehelper.helperDialect = mysql
pagehelper.reasonable = true
mapper.mappers[0] = cn.com.yusys.yusp.commons.mapper.CommonMapper
----------------------------------------------------------------------
MYSQL:
######################################
## MYSQL数据库配置
######################################
spring.datasource.url = jdbc:mysql://10.162.1.102:3306/apolloconfigdb?useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username = apollo
spring.datasource.password = apollo
spring.datasource.hikari.minimum-idle = 20
spring.datasource.hikari.maximum-pool-size = 500
spring.datasource.hikari.data-source-properties.cachePrepStmts = true
spring.datasource.hikari.data-source-properties.prepStmtCacheSize = 250
spring.datasource.hikari.data-source-properties.prepStmtCacheSqlLimit = 2048
spring.datasource.hikari.data-source-properties.useServerPrepStmts = true
# 特别注意此处,否则存储mysql将无效
mybatis.mapperLocations = classpath*:mapper/**/*.xml
mybatis.configuration.map-underscore-to-camel-case = true
~~~

#### **Eureka配置:**

Eureka注册主要在本地(服务:pay/ agent/ nc*)进行配置,如下:
~~~shell
[root@mysql01 ycloans-pay-service]# pwd
/home/hxusr/ap/app/ycloans-pay-service
[root@mysql01 ycloans-pay-service]# ls
bootstrap.yml config-cache nohup.out out1130.log out.log robotcenter.sh ycloans_app.jar ycloans_app.jar.1 ycloans_app.jar4
[root@mysql01 ycloans-pay-service]# cat bootstrap.yml
spring:
application:
name: ycloans-pay-service #应用名 集群名
liquibase:
enabled: false
change-log: "classpath:config/liquibase/master.xml"
server:
port: 6002 #应用启动端口
app:
id: ycloans-pay-service # Apollo集群名称
apollo:
meta: http://10.162.1.76:9001
#meta: http://10.162.1.102:9081/
cluster: SIT #环境
cacheDir: ../apollo/ #apollo配置文件存放目录
bootstrap:
enabled: true
namespaces: application,EUREKA,YCLOANS-PUBLIC,ACTIVE_MQ
# 命名空间注意:namespace 和 namespaces。
# 日志相关
logging:
path: ../logs #日志文件路径
file: ${spring.application.name}_${server.port}.log #日志文件名称
level:
root: INFO
springfox.documentation.spring.web.readers.operation: OFF #springfox日志关闭输出
#actuator监控配置
management:
health:
rabbit:
enabled: false
# 停启 脚本: robotcenter.sh
# 日志 : out.log
-------------------------------------------------------------
[root@peer1-dev ~]# cd /home/ap/app/mock/order/
[root@peer1-dev order]# ls
bootstrap.yml logs out.log robotcenter.sh ycloans_app.jar
[root@peer1-dev order]# cat bootstrap.yml
spring:
application:
name: ycloans-common-reliable-message-mock-order #应用名称
liquibase:
enabled: false
change-log: "classpath:config/liquibase/master.xml"
server:
port: 18814 #应用启动端口
test:
apollo:
env: SIT
log:
level: INFO
app:
id: ycloans-common-reliable-message
apollo:
#meta: http://10.200.10.13:9001 # 湖北消金的配置
#meta: http://10.162.1.102:9081 # 北银消金的配置
meta: http://10.162.1.76:9001
cluster: ${test.apollo.env} #集群名称
cacheDir: ../apollo/ #apollo配置文件存放目录
bootstrap:
enabled: true
namespaces: application,YCLOANS-PUBLIC,EUREKA,UNDERTOW,LOAD_BALANCE,LEVEL_CACHE,MYSQL,ACTIVE_MQ
# 日志相关
logging:
path: ./logs #日志文件路径
file: ${spring.application.name}_${server.port}.log #日志文件名称
level:
root: ${test.log.level}
springfox.documentation.spring.web.readers.operation: OFF #springfox日志关闭输出
#actuator监控配置
management:
health:
rabbit:
enabled: false
~~~
### 2. 避坑指南
统一开发平台的配置会有影响,导致启动报错,原因未知,如果不用请删除

***
# Eureka安装
### 安装包位置:
G:\宇信\北银核算\项目文档\北银核算\包
eureka.zip
两台服务器互相注册:
### 配置hosts文件:
~~~shell
## 两台都要配:
[root@hexin2 eureka]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.162.1.100 peer2-dev
10.162.1.76 peer1-dev
~~~
### 配置76:
~~~shell
## 上传解压:
[root@peer1-dev ~]# cd eureka
eureka/ eureka.zip
[root@peer1-dev ~]# cd eureka
[root@peer1-dev eureka]# ls
application.yml ncloan-registry-server-eureka.log startup-peer4-dev.sh
ncloan-registry-server-eureka.jar startup-peer1-dev.sh
~~~
##### 配置application.yml:
~~~shell
[root@peer1-dev eureka]# cat application.yml
eureka:
client:
#是否要注册到其他Eureka Server实例
register-with-eureka: true
#是否要从其他Eureka Server实例获取数据
fetch-registry: true
service-url:
defaultZone: http://peer1-dev:8761/eureka/,http://peer2-dev:8762/eureka/
instance:
prefer-ip-address: true #将自己的ip地址注册到Eureka服务中
#服务过期时间配置,默认90s
lease-expiration-duration-in-seconds: 30
#租期更新时间间隔
lease-renewal-interval-in-seconds: 10
server:
#启用主动失效,并且每次主动失效检测间隔为3s
eviction-interval-timer-in-ms: 3000
# 关闭自我保护机制,保证不可用服务及时踢出
enable-self-preservation: false
spring:
application:
name: servers-eureka
logging:
level:
com.netflix.eureka: OFF
com.netflix.discovery: OFF
---
spring:
#指定profile=peer1_dev
profiles: peer1-dev
server:
port: 8761
eureka:
instance:
#指定当profile=peer1_dev时,主机名是peer1_dev
hostname: peer1-dev
---
spring:
#指定profile=peer2
profiles: peer2-dev
server:
port: 8762
eureka:
instance:
#指定当profile=peer2_dev时,主机名是peer2_dev
hostname: peer2-dev
~~~
##### 启动脚本:startup-peer1-dev.sh
~~~shell
[root@peer1-dev eureka]# vim startup-peer1-dev.sh
注意必须:jdk1.8
#!/bin/bash
nohup /usr/local/java1.8/bin/java -jar -Dfile.encoding=UTF-8 -Dapollo.bootstrap.enabled=false ncloan-registry-server-eureka.jar --spring.profiles.active=peer1-dev --spring.config.location=application.yml > ncloan-registry-server-eureka.log 2>& 1 &
~~~
### 配置100:
~~~shell
上传解压:
[root@hexin2 ~]# cd eureka
eureka/ eureka.zip
[root@hexin2 ~]# cd eureka
[root@hexin2 eureka]# ll
application.yml ncloan-registry-server-eureka.log startup-peer4-dev.sh
ncloan-registry-server-eureka.jar startup-peer2-dev.sh
~~~
##### 配置application.yml:
~~~shell
[root@hexin2 eureka]# cat application.yml
eureka:
client:
#是否要注册到其他Eureka Server实例
register-with-eureka: true
#是否要从其他Eureka Server实例获取数据
fetch-registry: true
service-url:
defaultZone: http://peer2-dev:8762/eureka/,http://peer1-dev:8761/eureka/
instance:
prefer-ip-address: true #将自己的ip地址注册到Eureka服务中
#服务过期时间配置,默认90s
lease-expiration-duration-in-seconds: 30
#租期更新时间间隔
lease-renewal-interval-in-seconds: 10
server:
#启用主动失效,并且每次主动失效检测间隔为3s
eviction-interval-timer-in-ms: 3000
# 关闭自我保护机制,保证不可用服务及时踢出
enable-self-preservation: false
spring:
application:
name: servers-eureka
logging:
level:
com.netflix.eureka: OFF
com.netflix.discovery: OFF
---
spring:
#指定profile=peer1_dev
profiles: peer1-dev
server:
port: 8761
eureka:
instance:
#指定当profile=peer1_dev时,主机名是peer1_dev
hostname: peer1-dev
---
spring:
#指定profile=peer2
profiles: peer2-dev
server:
port: 8762
eureka:
instance:
#指定当profile=peer2_dev时,主机名是peer2_dev
hostname: peer2-dev
~~~
##### 配置启动脚本:startup-peer2-dev.sh
~~~shell
[root@needyou eureka]# cat startup-peer2-dev.sh
注意必须:jdk1.8
#!/bin/bash
nohup java -jar -Dfile.encoding=UTF-8 -Dapollo.bootstrap.enabled=false ncloan-registry-server-eureka.jar --spring.profiles.active=peer2-dev --spring.config.location=application.yml > ncloan-registry-server-eureka.log 2>& 1 &
~~~
***
# 时间同步:
ntpdate time1.aliyun.com 需要外网环境!
ntpdate 10.162.2.100 搭建内网时间服务器
10.162.2.100是唯一能连外网的服务器。作为内网的时间服务器。
主节点(时间服务器)10.162.2.100
~~~shell
# 查看是否安装 ntp 服务
[root@waiwang ~]# rpm -qa ntp
ntp-4.2.2p1-15.el5
# 如果有、查看服务配置文件
[root@waiwang ~]# rpm -qc ntp
/etc/ntp.conf
/etc/ntp/keys
/etc/ntp/step-tickers
/etc/rc.d/init.d/ntpd
/etc/sysconfig/ntpd
# 没有则安装:
[root@waiwang ~]# yum -y install ntp
# 配置
[root@waiwang ~]# more /etc/ntp.conf
# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
# Permit all access over the loopback interface. This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 127.0.0.1
restrict -6 ::1
# Hosts on local network are less restricted.
restrict 10.162.2.100 mask 255.255.0.0 nomodify notrap
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.rhel.pool.ntp.org
server 1.rhel.pool.ntp.org
server 2.rhel.pool.ntp.org
#broadcast 192.168.1.255 key 42 # broadcast server
#broadcastclient # broadcast client
#broadcast 224.0.1.1 key 42 # multicast server
#multicastclient 224.0.1.1 # multicast client
#manycastserver 239.255.254.254 # manycast server
#manycastclient 239.255.254.254 key 42 # manycast client
# Undisciplined Local Clock. This is a fake driver intended for backup
# and when no outside source of synchronized time is available.
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
# Drift file. Put this in a directory which the daemon can write to.
# No symbolic links allowed, either, since the daemon updates the file
# by creating a temporary in the same directory and then rename()'ing
# it to the file.
driftfile /var/lib/ntp/drift
# Key file containing the keys and key identifiers used when operating
# with symmetric key cryptography.
keys /etc/ntp/keys
# Specify the key identifiers which are trusted.
#trustedkey 4 8 42
# Specify the key identifier to use with the ntpdc utility.
#requestkey 8
# Specify the key identifier to use with the ntpq utility.
#controlkey 8
~~~
客户端:
~~~shell
[root@hx245 ~]# yum -y install ntpdate
[root@hx245 ~]# ntpdate 10.162.2.100
2 Dec 17:52:30 ntpdate[38066]: step time server 10.162.2.100 offset -26113.326900 sec
[root@hx245 ~]# date
Wed Dec 2 17:52:33 CST 2020
~~~