Browse Source

Merge remote-tracking branch 'remotes/origin/devlop'

master
yang_shj 4 years ago
parent
commit
1ce40bf849
  1. 2
      .idea/.gitignore
  2. 18
      .idea/compiler.xml
  3. 10
      .idea/encodings.xml
  4. 15
      .idea/libraries/bcprov_ext_jdk15on_1_46.xml
  5. 19
      .idea/misc.xml
  6. 124
      .idea/uiDesigner.xml
  7. 6
      .idea/vcs.xml
  8. 105
      payment-base-app/pom.xml
  9. 2
      payment-base-app/src/main/java/com/base/springcloud/PaymentBaseApplication.java
  10. 22
      payment-base-app/src/main/java/com/base/springcloud/service/imp/MerchantServiceImp.java
  11. 37
      payment-base-app/src/main/java/com/base/springcloud/util/WxpayUtils.java
  12. 30
      payment-base-app/src/main/resources/application.yml
  13. 40
      payment-base-app/target/classes/application.yml
  14. 40
      payment-eureka-app/pom.xml
  15. 14
      payment-eureka-app/src/main/java/com/eureka/server/springclould/EurekaServerApplication.java
  16. 11
      payment-eureka-app/src/main/resources/application.yml
  17. 11
      payment-eureka-app/target/classes/application.yml
  18. BIN
      payment-eureka-app/target/classes/com/eureka/server/springclould/EurekaServerApplication.class
  19. 1
      pom.xml

2
.idea/.gitignore

@ -1,2 +0,0 @@
# Default ignored files
/workspace.xml

18
.idea/compiler.xml

@ -1,18 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="payment-eureka-app" />
<module name="payment-base-app" />
</profile>
</annotationProcessing>
<bytecodeTargetLevel>
<module name="payment-common-app" target="1.8" />
<module name="rbseurekaserverapp" target="1.8" />
</bytecodeTargetLevel>
</component>
</project>

10
.idea/encodings.xml

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/payment-base-app" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/payment-common-app" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/payment-eureka-app" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/payment-eureka-server-app" charset="UTF-8" />
</component>
</project>

15
.idea/libraries/bcprov_ext_jdk15on_1_46.xml

@ -1,15 +0,0 @@
<component name="libraryTable">
<library name="bcprov-ext-jdk15on-1.46">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../jar/bcprov-ext-jdk15on-1.46.jar!/" />
<root url="jar://$PROJECT_DIR$/../jar/commons-codec-1.3.jar!/" />
<root url="jar://$PROJECT_DIR$/../jar/commons-httpclient-3.0.1.jar!/" />
<root url="jar://$PROJECT_DIR$/../jar/commons-lang-2.3.jar!/" />
<root url="jar://$PROJECT_DIR$/../jar/commons-logging-1.1.jar!/" />
<root url="jar://$PROJECT_DIR$/../jar/hiiposm_engine_simple_2.0.0.34.jar!/" />
<root url="jar://$PROJECT_DIR$/../jar/securityAPI-client.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

19
.idea/misc.xml

@ -1,19 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
<option name="ignoredFiles">
<set>
<option value="$PROJECT_DIR$/payment-common-app/pom.xml" />
</set>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

124
.idea/uiDesigner.xml

@ -1,124 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>

6
.idea/vcs.xml

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

105
payment-base-app/pom.xml

@ -12,12 +12,6 @@
<artifactId>payment-base-app</artifactId>
<dependencies>
<!-- eureka client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
@ -157,5 +151,104 @@
</exclusions>
</dependency>
<!-- 和包支付使用 jar -->
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.3</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>bcprov-ext-jdk15on</groupId>
<artifactId>bcprov-ext-jdk15on</artifactId>
<version>1.4.6</version>
</dependency>
<dependency>
<groupId>hiiposm_engine_simple</groupId>
<artifactId>hiiposm_engine_simple</artifactId>
<version>2.3.4</version>
</dependency>
<dependency>
<groupId>securityAPI-client</groupId>
<artifactId>securityAPI-client</artifactId>
<version>1.0.0</version>
</dependency>
<!-- maven plugins -->
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.base.app</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<!--下面是为了使用 mvn package命令,如果不加则使用mvn assembly-->
<executions>
<execution>
<id>make-assemble</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>maven-public</id>
<name>maven-public</name>
<url>http://maven.hnrr.com.cn/repository/maven-public/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>maven-releases</name>
<url>http://maven.hnrr.com.cn/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<name>maven-snapshots</name>
<url>http://maven.hnrr.com.cn/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
</project>

2
payment-base-app/src/main/java/com/base/springcloud/PaymentBaseApplication.java

@ -4,12 +4,10 @@ import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.scheduling.annotation.EnableScheduling;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@SpringBootApplication
@EnableEurekaClient
@EnableSwagger2
@EnableScheduling
@EnableCaching

22
payment-base-app/src/main/java/com/base/springcloud/service/imp/MerchantServiceImp.java

@ -2,11 +2,20 @@ package com.base.springcloud.service.imp;
import com.base.springcloud.bo.MerchantConfigBO;
import com.base.springcloud.bo.OrderBO;
import com.base.springcloud.constant.PaymentConstant;
import com.base.springcloud.dao.MerchantConfigMapper;
import com.base.springcloud.entity.MerchantConfig;
import com.base.springcloud.entity.WxpayTradeVo;
import com.base.springcloud.service.MerchantService;
import com.base.springcloud.util.FtpUtil;
import com.base.springcloud.util.WxpayUtils;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.wechat.pay.contrib.apache.httpclient.WechatPayHttpClientBuilder;
import org.apache.commons.lang.StringUtils;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@ -134,7 +143,7 @@ public class MerchantServiceImp implements MerchantService {
File file = new File(FTP_BASEPATH + mchId + suffixName);
try {
certfile.transferTo(file);
return file.getPath() + mchId + suffixName;
return file.getPath();
} catch (IOException e) {
// TODO 抛出业务异常
}
@ -185,8 +194,8 @@ public class MerchantServiceImp implements MerchantService {
/*public static void main(String[] args) {
WxpayTradeVo wxpayTradeVo = new WxpayTradeVo();
wxpayTradeVo.setAppid("wxd678efh567hg6787");
wxpayTradeVo.setMchid("1230000109");
wxpayTradeVo.setAppid("wxa91984b310053c3d");
wxpayTradeVo.setMchid("1610494969");
wxpayTradeVo.setDescription("Image形象店-深圳腾大-QQ公仔");
wxpayTradeVo.setOut_trade_no("20220301095644");
wxpayTradeVo.setNotify_url("https://www.weixin.qq.com/wxpay/pay.php");
@ -194,6 +203,11 @@ public class MerchantServiceImp implements MerchantService {
wxTradeAmountVo.setTotal(1l);
wxTradeAmountVo.setCurrency("CNY");
wxpayTradeVo.setAmount(wxTradeAmountVo);
ObjectNode objectNode = WxpayUtils.getWxpay(wxpayTradeVo, PaymentConstant.NATIVE,"114233","1069818635","13587645303");
ObjectNode objectNode = WxpayUtils.getWxpay(wxpayTradeVo,
PaymentConstant.NATIVE,
"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");
System.out.println(objectNode);
}*/
}

37
payment-base-app/src/main/java/com/base/springcloud/util/WxpayUtils.java

@ -17,7 +17,9 @@ import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.util.EntityUtils;
import org.springframework.stereotype.Component;
import org.springframework.util.Base64Utils;
import sun.misc.BASE64Decoder;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
@ -30,6 +32,8 @@ import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.security.*;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
@ -41,6 +45,7 @@ import java.util.stream.Collectors;
*
* @author shuaifengjie.com
*/
@Component
@Slf4j
public class WxpayUtils {
@ -115,31 +120,25 @@ public class WxpayUtils {
public static String response(String data, String url, String mchid, String privateKey, String certificate, String serialNo) {
log.info("====>>> wxpay response, mchid: {}, serialNo: {}, url: {}, privateKey: {}, certificate: {}, data: {}",
mchid, serialNo, url, privateKey, certificate, data);
// ...
HttpPost httpPost = new HttpPost(url);
StringEntity reqEntity = new StringEntity(data, ContentType.create("application/json", "utf-8"));
// ...
httpPost.setEntity(reqEntity);
httpPost.addHeader("Accept", "application/json");
// ...
CloseableHttpResponse response = null;
// 返回
String body = null;
try {
// 商户私钥
PrivateKey merchantPrivateKey = PemUtil.loadPrivateKey(new ByteArrayInputStream(privateKey.getBytes("utf-8")));
// ...
response = getClient(mchid, serialNo, merchantPrivateKey, certificate).execute(httpPost);
log.info("====>>> wxpay response, result: {}", JSON.toJSONString(response));
// response = httpClient.execute(httpPost);
// assertTrue(response.getStatusLine().getStatusCode() != 401);
int statusCode = response.getStatusLine().getStatusCode();
HttpEntity entity = response.getEntity();
body = EntityUtils.toString(entity);
log.info("====>>> wxpay response, success: {}, body: {}", statusCode, body);
if (statusCode != 200) {
@SuppressWarnings("unchecked")
Map<String, String> errorMsg = StringHelper.json2map(body);
log.info("====>>> wxpay response, fail errorMsg: {}", errorMsg);
}
// 执行释放
EntityUtils.consume(entity);
@ -167,18 +166,20 @@ public class WxpayUtils {
* @return
* @throws UnsupportedEncodingException
*/
public static CloseableHttpClient getClient(String mchid, String serialNo, PrivateKey privateKey, String certificate) throws UnsupportedEncodingException {
// 使用自动更新的签名验证器,不需要传入证书
// AutoUpdateCertificatesVerifier verifier = new AutoUpdateCertificatesVerifier(
// new WechatPay2Credentials(mchId, new PrivateKeySigner(mchSerialNo, merchantPrivateKey)), apiV3Key.getBytes("utf-8"));
// builder
WechatPayHttpClientBuilder builder = WechatPayHttpClientBuilder.create().withMerchant(mchid, serialNo, privateKey);
// .withValidator(new WechatPay2Validator(verifier));
public static CloseableHttpClient getClient(String mchid, String serialNo, PrivateKey privateKey, String certificate) throws CertificateException, IOException {
//byte[] bytes = certificate.getBytes(StandardCharsets.UTF_8);
ByteArrayInputStream base = new ByteArrayInputStream(new BASE64Decoder().decodeBuffer(certificate));
List<X509Certificate> certs = new ArrayList<>();
certs.add(PemUtil.loadCertificate(new ByteArrayInputStream(certificate.getBytes("utf-8"))));
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
X509Certificate cert = null;
try {
cert = (X509Certificate) certificateFactory.generateCertificate(base);
}catch (CertificateException e){
throw e;
}
assert cert != null;
certs.add(cert);
WechatPayHttpClientBuilder builder = WechatPayHttpClientBuilder.create().withMerchant(mchid, serialNo, privateKey);
builder.withWechatpay(certs);
return builder.build();
}

30
payment-base-app/src/main/resources/application.yml

@ -1,20 +1,7 @@
server:
port: 8001 #服务端口
#eureka配置
eureka:
client:
#表示是否将自己注册进eureka 默认为true
register-with-eureka: true
#是否从EurekaServer中抓取已有的注册信息,默认为true,单点无所谓,集群必须设置true才能和ribbon使用负载均衡
fetch-registry: true
service-url:
#集群配置
defaultZone: http://eureka7002.com:7002/eureka
instance:
#服务名称修改
instance-id: PAYMENT-BASE
#访问路径可以显示ip地址
prefer-ip-address: true
port: 5080 #服务端口
servlet:
context-path: /rbs-pay
#spring相关配置
spring:
application:
@ -22,9 +9,9 @@ spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource #当前数据源操作类型
driver-class-name: org.gjt.mm.mysql.Driver #数据库驱动包
url: jdbc:mysql://106.14.81.251:3306/rbs_erp_test?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false
username: root
password: hnrr%%360
url: jdbc:mysql://rm-uf672osw4deemr4yt.mysql.rds.aliyuncs.com:3306/rbs_erp?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false
username: hnrr
password: hnrr@0b6759c29a8e
#rabbitmq 配置
#rabbitmq:
#host: localhost
@ -33,12 +20,13 @@ spring:
#password: pay123123
# redis 配置
redis:
database: 10
# 地址
host: 127.0.0.1
host: r-uf643kmbsoz7ledq2j.redis.rds.aliyuncs.com
# 端口,默认为6379
port: 6379
# 密码
password: 123456
password: rds@53798a0fa6ce
# 连接超时时间
timeout: 10s
lettuce:

40
payment-base-app/target/classes/application.yml

@ -1,20 +1,7 @@
server:
port: 8001 #服务端口
#eureka配置
eureka:
client:
#表示是否将自己注册进eureka 默认为true
register-with-eureka: true
#是否从EurekaServer中抓取已有的注册信息,默认为true,单点无所谓,集群必须设置true才能和ribbon使用负载均衡
fetch-registry: true
service-url:
#集群配置
defaultZone: http://eureka7002.com:7002/eureka
instance:
#服务名称修改
instance-id: PAYMENT-BASE
#访问路径可以显示ip地址
prefer-ip-address: true
port: 5080 #服务端口
servlet:
context-path: /rbs-pay
#spring相关配置
spring:
application:
@ -22,23 +9,24 @@ spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource #当前数据源操作类型
driver-class-name: org.gjt.mm.mysql.Driver #数据库驱动包
url: jdbc:mysql://106.14.81.251:3306/rbs_erp_test?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false
username: root
password: hnrr%%360
url: jdbc:mysql://rm-uf672osw4deemr4yt.mysql.rds.aliyuncs.com:3306/rbs_erp?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false
username: hnrr
password: hnrr@0b6759c29a8e
#rabbitmq 配置
rabbitmq:
host: localhost
port: 5672
username: rbs-payment
password: pay123123
#rabbitmq:
#host: localhost
#port: 5672
#username: rbs-payment
#password: pay123123
# redis 配置
redis:
database: 10
# 地址
host: 127.0.0.1
host: r-uf643kmbsoz7ledq2j.redis.rds.aliyuncs.com
# 端口,默认为6379
port: 6379
# 密码
password: 123456
password: rds@53798a0fa6ce
# 连接超时时间
timeout: 10s
lettuce:

40
payment-eureka-app/pom.xml

@ -1,40 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>rbsservice</artifactId>
<groupId>com.rbs.springcloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>payment-eureka-app</artifactId>
<dependencies>
<!-- eureka client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>

14
payment-eureka-app/src/main/java/com/eureka/server/springclould/EurekaServerApplication.java

@ -1,14 +0,0 @@
package com.eureka.server.springclould;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}

11
payment-eureka-app/src/main/resources/application.yml

@ -1,11 +0,0 @@
server:
port: 7002
eureka:
instance:
hostname: eureka7002.com #eureka服务端的实例名称
client:
register-with-eureka: false #false表示不向注册中心注册自己。
fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
service-url:
#设置与eureka server交互的地址和注册服务都需要依赖这个地址
defaultZone: http://eureka7002.com:7002/eureka/ #集群就是指向其他的eureka

11
payment-eureka-app/target/classes/application.yml

@ -1,11 +0,0 @@
server:
port: 7002
eureka:
instance:
hostname: eureka7002.com #eureka服务端的实例名称
client:
register-with-eureka: false #false表示不向注册中心注册自己。
fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
service-url:
#设置与eureka server交互的地址和注册服务都需要依赖这个地址
defaultZone: http://eureka7002.com:7002/eureka/ #集群就是指向其他的eureka

BIN
payment-eureka-app/target/classes/com/eureka/server/springclould/EurekaServerApplication.class

Binary file not shown.

1
pom.xml

@ -12,7 +12,6 @@
<version>1.0-SNAPSHOT</version>
<modules>
<module>payment-base-app</module>
<module>payment-eureka-app</module>
</modules>
<properties>

Loading…
Cancel
Save