diff --git a/auth-center/pom.xml b/auth-center/pom.xml
index 7b889b12..1b4d5a2e 100644
--- a/auth-center/pom.xml
+++ b/auth-center/pom.xml
@@ -78,11 +78,6 @@
spring-boot-starter
-
- org.springframework.integration
- spring-integration-sftp
-
-
diff --git a/auth-center/src/main/java/com/jmsoftware/maf/authcenter/universal/configuration/SftpClientConfiguration.java b/auth-center/src/main/java/com/jmsoftware/maf/authcenter/universal/configuration/SftpClientConfiguration.java
deleted file mode 100644
index 103897fd..00000000
--- a/auth-center/src/main/java/com/jmsoftware/maf/authcenter/universal/configuration/SftpClientConfiguration.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package com.jmsoftware.maf.authcenter.universal.configuration;
-
-import com.jcraft.jsch.ChannelSftp;
-import lombok.Data;
-import lombok.val;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.core.io.Resource;
-import org.springframework.expression.common.LiteralExpression;
-import org.springframework.integration.annotation.ServiceActivator;
-import org.springframework.integration.file.remote.session.CachingSessionFactory;
-import org.springframework.integration.file.remote.session.SessionFactory;
-import org.springframework.integration.sftp.outbound.SftpMessageHandler;
-import org.springframework.integration.sftp.session.DefaultSftpSessionFactory;
-import org.springframework.integration.sftp.session.SftpRemoteFileTemplate;
-import org.springframework.messaging.MessageHandler;
-import org.springframework.stereotype.Component;
-
-import java.io.File;
-
-/**
- *
SftpClientConfiguration
- * SFTP client configuration
- *
- * @author Johnny Miller (锺俊), email: johnnysviva@outlook.com
- * @date 2019-07-04 18:18
- **/
-@Data
-@Component
-@ConfigurationProperties(prefix = "sftp.client.configuration")
-public class SftpClientConfiguration {
- /**
- * SFTP server IP
- */
- private String host;
- /**
- * SFTP server port
- */
- private Integer port;
- /**
- * Login user
- */
- private String user;
- /**
- * Login password
- */
- private String password;
- /**
- * Remote directory
- */
- private String directory;
- /**
- * Private key
- */
- private Resource privateKey;
- /**
- * Private key pass phrase
- */
- private String privateKeyPassPhrase;
- /**
- * The maximum cache size of session. Default: 10
- */
- private Integer sessionCacheSize = 10;
- /**
- * The session wait timeout (time unit: MILLISECONDS). Default: 10 * 1000L (10 seconds)
- */
- private Long sessionWaitTimeout = 10 * 1000L;
-
- @Bean
- public SessionFactory sftpSessionFactory() {
- val factory = new DefaultSftpSessionFactory(true);
- factory.setHost(host);
- factory.setPort(port);
- factory.setUser(user);
- if (privateKey != null) {
- factory.setPrivateKey(privateKey);
- factory.setPrivateKeyPassphrase(privateKeyPassPhrase);
- } else {
- factory.setPassword(password);
- }
- factory.setAllowUnknownKeys(true);
- // We return a caching session factory, so that we don't have to reconnect to SFTP server for each time
- val cachingSessionFactory = new CachingSessionFactory<>(factory, sessionCacheSize);
- cachingSessionFactory.setSessionWaitTimeout(sessionWaitTimeout);
- return cachingSessionFactory;
- }
-
- @Bean
- @ServiceActivator(inputChannel = "toSftpChannel")
- @SuppressWarnings("UnresolvedMessageChannel")
- public MessageHandler handler(SessionFactory sftpSessionFactory) {
- val handler = new SftpMessageHandler(sftpSessionFactory);
- handler.setRemoteDirectoryExpression(new LiteralExpression(directory));
- handler.setFileNameGenerator(message -> {
- if (message.getPayload() instanceof File) {
- return ((File) message.getPayload()).getName();
- } else {
- throw new IllegalArgumentException("File expected as payload.");
- }
- });
- return handler;
- }
-
- @Bean
- public SftpRemoteFileTemplate template(SessionFactory sftpSessionFactory) {
- return new SftpRemoteFileTemplate(sftpSessionFactory);
- }
-}
diff --git a/auth-center/src/main/java/com/jmsoftware/maf/authcenter/universal/configuration/SftpUploadGateway.java b/auth-center/src/main/java/com/jmsoftware/maf/authcenter/universal/configuration/SftpUploadGateway.java
deleted file mode 100644
index a1da0a76..00000000
--- a/auth-center/src/main/java/com/jmsoftware/maf/authcenter/universal/configuration/SftpUploadGateway.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.jmsoftware.maf.authcenter.universal.configuration;
-
-import org.springframework.integration.annotation.Gateway;
-import org.springframework.integration.annotation.MessagingGateway;
-import org.springframework.stereotype.Component;
-
-import java.io.File;
-
-/**
- * SftpUploadGateway
- * Change description here
- *
- * @author Johnny Miller (锺俊), email: johnnysviva@outlook.com
- * @date 2019-07-04 21:03
- **/
-@Component
-@MessagingGateway
-public interface SftpUploadGateway {
- /**
- * Upload file
- *
- * @param file file
- */
- @Gateway(requestChannel = "toSftpChannel")
- @SuppressWarnings("UnresolvedMessageChannel")
- void upload(File file);
-}
diff --git a/auth-center/src/main/java/com/jmsoftware/maf/authcenter/universal/domain/ApiStatus.java b/auth-center/src/main/java/com/jmsoftware/maf/authcenter/universal/domain/ApiStatus.java
deleted file mode 100644
index b978d303..00000000
--- a/auth-center/src/main/java/com/jmsoftware/maf/authcenter/universal/domain/ApiStatus.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.jmsoftware.maf.authcenter.universal.domain;
-
-import lombok.Getter;
-
-/**
- * Description: ApiStatus, change description here.
- *
- * @author Johnny Miller (锺俊), email: johnnysviva@outlook.com
- * @date 2019-04-07 23:32
- **/
-@Getter
-public enum ApiStatus {
- /**
- * Idled API (not stored in db).
- */
- IDLED(0),
- /**
- * API in used (stored in db).
- */
- IN_USE(1);
-
- private final Integer status;
-
- ApiStatus(Integer status) {
- this.status = status;
- }
-
- /**
- * Get ApiStatus by status.
- *
- * @param status status code
- * @return ApiStatus enum
- */
- public static ApiStatus getByStatus(Integer status) {
- ApiStatus[] apiStatuses = ApiStatus.values();
- for (ApiStatus apiStatus : apiStatuses) {
- if (apiStatus.status.equals(status)) {
- return apiStatus;
- }
- }
- return null;
- }
-}
diff --git a/auth-center/src/main/resources/application-development-docker.yml b/auth-center/src/main/resources/application-development-docker.yml
index 0c9eb84e..c3ba09d5 100644
--- a/auth-center/src/main/resources/application-development-docker.yml
+++ b/auth-center/src/main/resources/application-development-docker.yml
@@ -24,11 +24,6 @@ sftp:
port: 22
user: johnny
password: atmoz@sftp
- directory: upload
- private-key:
- private-key-pass-phrase:
- session-cache-size: 20
- session-wait-timeout: 15000
maf:
configuration:
diff --git a/auth-center/src/main/resources/application-development-local.yml b/auth-center/src/main/resources/application-development-local.yml
index dcb955cf..773823b7 100644
--- a/auth-center/src/main/resources/application-development-local.yml
+++ b/auth-center/src/main/resources/application-development-local.yml
@@ -29,11 +29,6 @@ sftp:
port: 23
user: johnny
password: atmoz@sftp
- directory: upload
- private-key:
- private-key-pass-phrase:
- session-cache-size: 20
- session-wait-timeout: 15000
maf:
configuration:
diff --git a/auth-center/src/main/resources/application-production.yml b/auth-center/src/main/resources/application-production.yml
index 8a48643f..0cf91db8 100644
--- a/auth-center/src/main/resources/application-production.yml
+++ b/auth-center/src/main/resources/application-production.yml
@@ -24,11 +24,6 @@ sftp:
port: 22
user: johnny
password: atmoz@sftp
- directory: upload
- private-key:
- private-key-pass-phrase:
- session-cache-size: 20
- session-wait-timeout: 15000
maf:
configuration:
diff --git a/auth-center/src/main/resources/application-stage.yml b/auth-center/src/main/resources/application-stage.yml
index 815f52f4..0d45b54b 100644
--- a/auth-center/src/main/resources/application-stage.yml
+++ b/auth-center/src/main/resources/application-stage.yml
@@ -24,11 +24,6 @@ sftp:
port: 22
user: johnny
password: atmoz@sftp
- directory: upload
- private-key:
- private-key-pass-phrase:
- session-cache-size: 20
- session-wait-timeout: 15000
maf:
configuration:
diff --git a/auth-center/src/main/resources/application-test.yml b/auth-center/src/main/resources/application-test.yml
index abbbda15..11022a61 100644
--- a/auth-center/src/main/resources/application-test.yml
+++ b/auth-center/src/main/resources/application-test.yml
@@ -24,11 +24,6 @@ sftp:
port: 22
user: johnny
password: atmoz@sftp
- directory: upload
- private-key:
- private-key-pass-phrase:
- session-cache-size: 20
- session-wait-timeout: 15000
maf:
configuration:
diff --git a/auth-center/src/main/resources/application.yml b/auth-center/src/main/resources/application.yml
index 9110a68a..2d3a99a7 100644
--- a/auth-center/src/main/resources/application.yml
+++ b/auth-center/src/main/resources/application.yml
@@ -134,3 +134,12 @@ jwt:
# an hour
ttl: 3600000
ttl-for-remember-me: 604800000
+
+sftp:
+ client:
+ configuration:
+ directory: upload
+ private-key:
+ private-key-pass-phrase:
+ session-cache-size: 20
+ session-wait-timeout: 15000
diff --git a/exercise-mis/src/main/resources/application-development-docker.yml b/exercise-mis/src/main/resources/application-development-docker.yml
index 95a2f02f..c3ba09d5 100644
--- a/exercise-mis/src/main/resources/application-development-docker.yml
+++ b/exercise-mis/src/main/resources/application-development-docker.yml
@@ -17,6 +17,14 @@ spring:
port: 6379
password: 123456
+sftp:
+ client:
+ configuration:
+ host: maf.atmoz-sftp.dev
+ port: 22
+ user: johnny
+ password: atmoz@sftp
+
maf:
configuration:
swagger-disabled: false
diff --git a/exercise-mis/src/main/resources/application-development-local.yml b/exercise-mis/src/main/resources/application-development-local.yml
index d476f591..e17f4bbd 100644
--- a/exercise-mis/src/main/resources/application-development-local.yml
+++ b/exercise-mis/src/main/resources/application-development-local.yml
@@ -17,6 +17,14 @@ spring:
port: 6379
password: 123456
+sftp:
+ client:
+ configuration:
+ host: localhost
+ port: 23
+ user: johnny
+ password: atmoz@sftp
+
maf:
configuration:
swagger-disabled: false
diff --git a/exercise-mis/src/main/resources/application-production.yml b/exercise-mis/src/main/resources/application-production.yml
index f0f513d5..0cf91db8 100644
--- a/exercise-mis/src/main/resources/application-production.yml
+++ b/exercise-mis/src/main/resources/application-production.yml
@@ -17,6 +17,14 @@ spring:
port: 6379
password: 123456
+sftp:
+ client:
+ configuration:
+ host: maf.atmoz-sftp.production
+ port: 22
+ user: johnny
+ password: atmoz@sftp
+
maf:
configuration:
swagger-disabled: true
diff --git a/exercise-mis/src/main/resources/application-stage.yml b/exercise-mis/src/main/resources/application-stage.yml
index b1f65326..b4a5c098 100644
--- a/exercise-mis/src/main/resources/application-stage.yml
+++ b/exercise-mis/src/main/resources/application-stage.yml
@@ -17,6 +17,14 @@ spring:
port: 6379
password: 123456
+sftp:
+ client:
+ configuration:
+ host: maf.atmoz-sftp.production
+ port: 22
+ user: johnny
+ password: atmoz@sftp
+
maf:
configuration:
swagger-disabled: true
diff --git a/exercise-mis/src/main/resources/application-test.yml b/exercise-mis/src/main/resources/application-test.yml
index d1145bc4..da462907 100644
--- a/exercise-mis/src/main/resources/application-test.yml
+++ b/exercise-mis/src/main/resources/application-test.yml
@@ -17,6 +17,14 @@ spring:
port: 6379
password: 123456
+sftp:
+ client:
+ configuration:
+ host: maf.atmoz-sftp.production
+ port: 22
+ user: johnny
+ password: atmoz@sftp
+
maf:
configuration:
swagger-disabled: true
diff --git a/exercise-mis/src/main/resources/application.yml b/exercise-mis/src/main/resources/application.yml
index d95da3fd..788fe780 100644
--- a/exercise-mis/src/main/resources/application.yml
+++ b/exercise-mis/src/main/resources/application.yml
@@ -124,3 +124,12 @@ maf:
- "/webjars/**"
- "/doc.html"
included-package-for-http-api-scan: ${project.property.base-package}
+
+sftp:
+ client:
+ configuration:
+ directory: upload
+ private-key:
+ private-key-pass-phrase:
+ session-cache-size: 20
+ session-wait-timeout: 15000
diff --git a/muscle-mis/src/main/resources/application-development-docker.yml b/muscle-mis/src/main/resources/application-development-docker.yml
index 95a2f02f..c3ba09d5 100644
--- a/muscle-mis/src/main/resources/application-development-docker.yml
+++ b/muscle-mis/src/main/resources/application-development-docker.yml
@@ -17,6 +17,14 @@ spring:
port: 6379
password: 123456
+sftp:
+ client:
+ configuration:
+ host: maf.atmoz-sftp.dev
+ port: 22
+ user: johnny
+ password: atmoz@sftp
+
maf:
configuration:
swagger-disabled: false
diff --git a/muscle-mis/src/main/resources/application-development-local.yml b/muscle-mis/src/main/resources/application-development-local.yml
index e7b2fb48..0d6f96f1 100644
--- a/muscle-mis/src/main/resources/application-development-local.yml
+++ b/muscle-mis/src/main/resources/application-development-local.yml
@@ -21,6 +21,14 @@ logging:
level:
com.jcraft.jsch: INFO
+sftp:
+ client:
+ configuration:
+ host: localhost
+ port: 23
+ user: johnny
+ password: atmoz@sftp
+
maf:
configuration:
swagger-disabled: false
diff --git a/muscle-mis/src/main/resources/application-production.yml b/muscle-mis/src/main/resources/application-production.yml
index f0f513d5..0cf91db8 100644
--- a/muscle-mis/src/main/resources/application-production.yml
+++ b/muscle-mis/src/main/resources/application-production.yml
@@ -17,6 +17,14 @@ spring:
port: 6379
password: 123456
+sftp:
+ client:
+ configuration:
+ host: maf.atmoz-sftp.production
+ port: 22
+ user: johnny
+ password: atmoz@sftp
+
maf:
configuration:
swagger-disabled: true
diff --git a/muscle-mis/src/main/resources/application-stage.yml b/muscle-mis/src/main/resources/application-stage.yml
index b1f65326..0d45b54b 100644
--- a/muscle-mis/src/main/resources/application-stage.yml
+++ b/muscle-mis/src/main/resources/application-stage.yml
@@ -17,6 +17,14 @@ spring:
port: 6379
password: 123456
+sftp:
+ client:
+ configuration:
+ host: maf.atmoz-sftp.stage
+ port: 22
+ user: johnny
+ password: atmoz@sftp
+
maf:
configuration:
swagger-disabled: true
diff --git a/muscle-mis/src/main/resources/application-test.yml b/muscle-mis/src/main/resources/application-test.yml
index d1145bc4..11022a61 100644
--- a/muscle-mis/src/main/resources/application-test.yml
+++ b/muscle-mis/src/main/resources/application-test.yml
@@ -17,6 +17,14 @@ spring:
port: 6379
password: 123456
+sftp:
+ client:
+ configuration:
+ host: maf.atmoz-sftp.test
+ port: 22
+ user: johnny
+ password: atmoz@sftp
+
maf:
configuration:
swagger-disabled: true
diff --git a/muscle-mis/src/main/resources/application.yml b/muscle-mis/src/main/resources/application.yml
index 06b2e7eb..f261c332 100644
--- a/muscle-mis/src/main/resources/application.yml
+++ b/muscle-mis/src/main/resources/application.yml
@@ -112,3 +112,12 @@ maf:
- "/webjars/**"
- "/doc.html"
included-package-for-http-api-scan: ${project.property.base-package}
+
+sftp:
+ client:
+ configuration:
+ directory: upload
+ private-key:
+ private-key-pass-phrase:
+ session-cache-size: 20
+ session-wait-timeout: 15000
diff --git a/service-registry/src/main/resources/application-development-docker.yml b/service-registry/src/main/resources/application-development-docker.yml
index eb3eafa9..f47475b1 100644
--- a/service-registry/src/main/resources/application-development-docker.yml
+++ b/service-registry/src/main/resources/application-development-docker.yml
@@ -14,3 +14,11 @@ eureka:
client:
service-url:
defaultZone: http://${spring.cloud.client.ip-address}:${server.port}/eureka/
+
+sftp:
+ client:
+ configuration:
+ host: maf.atmoz-sftp.dev
+ port: 22
+ user: johnny
+ password: atmoz@sftp
diff --git a/service-registry/src/main/resources/application-development-local.yml b/service-registry/src/main/resources/application-development-local.yml
index f19e1478..22aa3811 100644
--- a/service-registry/src/main/resources/application-development-local.yml
+++ b/service-registry/src/main/resources/application-development-local.yml
@@ -14,3 +14,11 @@ eureka:
client:
service-url:
defaultZone: http://localhost:${server.port}/eureka/
+
+sftp:
+ client:
+ configuration:
+ host: localhost
+ port: 23
+ user: johnny
+ password: atmoz@sftp
diff --git a/service-registry/src/main/resources/application-production.yml b/service-registry/src/main/resources/application-production.yml
index 66612260..9157cf95 100644
--- a/service-registry/src/main/resources/application-production.yml
+++ b/service-registry/src/main/resources/application-production.yml
@@ -14,3 +14,11 @@ eureka:
client:
service-url:
defaultZone: http://${spring.cloud.client.ip-address}:${server.port}/eureka/
+
+sftp:
+ client:
+ configuration:
+ host: maf.atmoz-sftp.production
+ port: 22
+ user: johnny
+ password: atmoz@sftp
diff --git a/service-registry/src/main/resources/application-stage.yml b/service-registry/src/main/resources/application-stage.yml
index 7806aec9..f5ab9c5a 100644
--- a/service-registry/src/main/resources/application-stage.yml
+++ b/service-registry/src/main/resources/application-stage.yml
@@ -14,3 +14,11 @@ eureka:
client:
service-url:
defaultZone: http://${spring.cloud.client.ip-address}:${server.port}/eureka/
+
+sftp:
+ client:
+ configuration:
+ host: maf.atmoz-sftp.stage
+ port: 22
+ user: johnny
+ password: atmoz@sftp
diff --git a/service-registry/src/main/resources/application-test.yml b/service-registry/src/main/resources/application-test.yml
index ba78232b..ae77ade0 100644
--- a/service-registry/src/main/resources/application-test.yml
+++ b/service-registry/src/main/resources/application-test.yml
@@ -14,3 +14,11 @@ eureka:
client:
service-url:
defaultZone: http://${spring.cloud.client.ip-address}:${server.port}/eureka/
+
+sftp:
+ client:
+ configuration:
+ host: maf.atmoz-sftp.test
+ port: 22
+ user: johnny
+ password: atmoz@sftp
diff --git a/service-registry/src/main/resources/application.yml b/service-registry/src/main/resources/application.yml
index e1f71914..9071d9fe 100644
--- a/service-registry/src/main/resources/application.yml
+++ b/service-registry/src/main/resources/application.yml
@@ -74,3 +74,12 @@ maf:
- "/actuator/**"
included-package-for-http-api-scan: ${project.property.base-package}
swagger-disabled: true
+
+sftp:
+ client:
+ configuration:
+ directory: upload
+ private-key:
+ private-key-pass-phrase:
+ session-cache-size: 20
+ session-wait-timeout: 15000
diff --git a/spring-boot-admin/src/main/resources/application-development-docker.yml b/spring-boot-admin/src/main/resources/application-development-docker.yml
index 2fc2f6f0..509f4aee 100644
--- a/spring-boot-admin/src/main/resources/application-development-docker.yml
+++ b/spring-boot-admin/src/main/resources/application-development-docker.yml
@@ -18,3 +18,11 @@ eureka:
maf:
configuration:
swagger-disabled: false
+
+sftp:
+ client:
+ configuration:
+ host: maf.atmoz-sftp.dev
+ port: 22
+ user: johnny
+ password: atmoz@sftp
diff --git a/spring-boot-admin/src/main/resources/application-development-local.yml b/spring-boot-admin/src/main/resources/application-development-local.yml
index b2a08909..6822c7b4 100644
--- a/spring-boot-admin/src/main/resources/application-development-local.yml
+++ b/spring-boot-admin/src/main/resources/application-development-local.yml
@@ -18,3 +18,11 @@ eureka:
maf:
configuration:
swagger-disabled: false
+
+sftp:
+ client:
+ configuration:
+ host: localhost
+ port: 23
+ user: johnny
+ password: atmoz@sftp
diff --git a/spring-boot-admin/src/main/resources/application-production.yml b/spring-boot-admin/src/main/resources/application-production.yml
index 33f89d0f..d2a4bd5f 100644
--- a/spring-boot-admin/src/main/resources/application-production.yml
+++ b/spring-boot-admin/src/main/resources/application-production.yml
@@ -18,3 +18,11 @@ eureka:
maf:
configuration:
swagger-disabled: true
+
+sftp:
+ client:
+ configuration:
+ host: maf.atmoz-sftp.production
+ port: 22
+ user: johnny
+ password: atmoz@sftp
diff --git a/spring-boot-admin/src/main/resources/application-stage.yml b/spring-boot-admin/src/main/resources/application-stage.yml
index 5d0284c8..7d0b5311 100644
--- a/spring-boot-admin/src/main/resources/application-stage.yml
+++ b/spring-boot-admin/src/main/resources/application-stage.yml
@@ -18,3 +18,11 @@ eureka:
maf:
configuration:
swagger-disabled: true
+
+sftp:
+ client:
+ configuration:
+ host: maf.atmoz-sftp.stage
+ port: 22
+ user: johnny
+ password: atmoz@sftp
diff --git a/spring-boot-admin/src/main/resources/application-test.yml b/spring-boot-admin/src/main/resources/application-test.yml
index cc43603b..2fa320e6 100644
--- a/spring-boot-admin/src/main/resources/application-test.yml
+++ b/spring-boot-admin/src/main/resources/application-test.yml
@@ -18,3 +18,11 @@ eureka:
maf:
configuration:
swagger-disabled: true
+
+sftp:
+ client:
+ configuration:
+ host: maf.atmoz-sftp.test
+ port: 22
+ user: johnny
+ password: atmoz@sftp
diff --git a/spring-boot-admin/src/main/resources/application.yml b/spring-boot-admin/src/main/resources/application.yml
index 82014216..56381afc 100644
--- a/spring-boot-admin/src/main/resources/application.yml
+++ b/spring-boot-admin/src/main/resources/application.yml
@@ -85,3 +85,11 @@ maf:
- "/doc.html"
included-package-for-http-api-scan: ${project.property.base-package}
+sftp:
+ client:
+ configuration:
+ directory: upload
+ private-key:
+ private-key-pass-phrase:
+ session-cache-size: 20
+ session-wait-timeout: 15000
diff --git a/spring-boot-starter/pom.xml b/spring-boot-starter/pom.xml
index 3d80b30f..0c20e6f4 100644
--- a/spring-boot-starter/pom.xml
+++ b/spring-boot-starter/pom.xml
@@ -61,6 +61,10 @@
spring-boot-autoconfigure-processor
true
+
+ org.springframework.integration
+ spring-integration-sftp
+
com.jmsoftware.maf
diff --git a/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/MafAutoConfiguration.java b/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/MafAutoConfiguration.java
index 434b97e4..0562fe6e 100644
--- a/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/MafAutoConfiguration.java
+++ b/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/MafAutoConfiguration.java
@@ -1,8 +1,17 @@
package com.jmsoftware.maf.springbootstarter.configuration;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.jcraft.jsch.ChannelSftp;
import com.jmsoftware.maf.springbootstarter.aspect.ExceptionControllerAdvice;
import com.jmsoftware.maf.springbootstarter.aspect.WebRequestLogAspect;
+import com.jmsoftware.maf.springbootstarter.configuration.database.DruidConfiguration;
+import com.jmsoftware.maf.springbootstarter.configuration.database.MyBatisPlusConfiguration;
+import com.jmsoftware.maf.springbootstarter.configuration.redis.RedisCachingConfiguration;
+import com.jmsoftware.maf.springbootstarter.configuration.redis.RedisConfiguration;
+import com.jmsoftware.maf.springbootstarter.configuration.sftp.SftpClientConfiguration;
+import com.jmsoftware.maf.springbootstarter.configuration.sftp.SftpHelper;
+import com.jmsoftware.maf.springbootstarter.configuration.sftp.SftpHelperImpl;
+import com.jmsoftware.maf.springbootstarter.configuration.sftp.SftpSubDirectoryRunner;
import com.jmsoftware.maf.springbootstarter.controller.CommonController;
import com.jmsoftware.maf.springbootstarter.controller.GlobalErrorController;
import com.jmsoftware.maf.springbootstarter.controller.HttpApiResourceRemoteApiController;
@@ -29,6 +38,15 @@
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.expression.common.LiteralExpression;
+import org.springframework.integration.annotation.IntegrationComponentScan;
+import org.springframework.integration.annotation.ServiceActivator;
+import org.springframework.integration.file.remote.session.CachingSessionFactory;
+import org.springframework.integration.file.remote.session.SessionFactory;
+import org.springframework.integration.sftp.outbound.SftpMessageHandler;
+import org.springframework.integration.sftp.session.DefaultSftpSessionFactory;
+import org.springframework.integration.sftp.session.SftpRemoteFileTemplate;
+import org.springframework.messaging.MessageHandler;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
import springfox.documentation.builders.PathSelectors;
@@ -37,6 +55,7 @@
import springfox.documentation.spring.web.plugins.Docket;
import javax.annotation.PostConstruct;
+import java.io.File;
import java.util.List;
/**
@@ -46,6 +65,7 @@
**/
@Slf4j
@Configuration
+@IntegrationComponentScan
@ConditionalOnWebApplication
@AutoConfigureOrder(Integer.MIN_VALUE)
@EnableConfigurationProperties(MafConfiguration.class)
@@ -137,14 +157,14 @@ public HttpApiResourceRemoteApiController httpApiResourceRemoteController(MafCon
}
@Bean
- @ConditionalOnProperty(value ="maf.configuration.swagger-disabled", havingValue = "false")
+ @ConditionalOnProperty(value = "maf.configuration.swagger-disabled", havingValue = "false")
public Swagger2Configuration swagger2Configuration(MafProjectProperty mafProjectProperty) {
log.warn("Initial bean: {}", Swagger2Configuration.class.getSimpleName());
return new Swagger2Configuration(mafProjectProperty);
}
@Bean
- @ConditionalOnProperty(value ="maf.configuration.swagger-disabled", havingValue = "false")
+ @ConditionalOnProperty(value = "maf.configuration.swagger-disabled", havingValue = "false")
public Docket docket(Swagger2Configuration swagger2Configuration, MafProjectProperty mafProjectProperty) {
log.warn("Initial bean: {}", Docket.class.getSimpleName());
return new Docket(DocumentationType.SWAGGER_2)
@@ -185,12 +205,6 @@ public MyBatisPlusConfiguration myBatisPlusConfiguration() {
return new MyBatisPlusConfiguration();
}
-// @Bean
-// RedisConnectionFactory redisConnectionFactory() {
-// log.warn("Initial bean: {}", LettuceConnectionConfiguration.class.getSimpleName());
-// return new LettuceConnectionConfiguration();
-// }
-
@Bean
public RedisCachingConfiguration redisCachingConfiguration(RedisConnectionFactory redisConnectionFactory) {
log.warn("Initial bean: {}", RedisCachingConfiguration.class.getSimpleName());
@@ -209,4 +223,71 @@ public RestTemplate restTemplate() {
log.warn("Initial bean: {}", RestTemplate.class.getSimpleName());
return new RestTemplate();
}
+
+ @Bean
+ public SftpClientConfiguration sftpClientConfiguration() {
+ log.warn("Initial bean: {}", SftpClientConfiguration.class.getSimpleName());
+ return new SftpClientConfiguration();
+ }
+
+ @Bean
+ public SessionFactory sftpSessionFactory(SftpClientConfiguration sftpClientConfiguration) {
+ val factory = new DefaultSftpSessionFactory(true);
+ factory.setHost(sftpClientConfiguration.getHost());
+ factory.setPort(sftpClientConfiguration.getPort());
+ factory.setUser(sftpClientConfiguration.getUser());
+ if (sftpClientConfiguration.getPrivateKey() != null) {
+ factory.setPrivateKey(sftpClientConfiguration.getPrivateKey());
+ factory.setPrivateKeyPassphrase(sftpClientConfiguration.getPrivateKeyPassPhrase());
+ } else {
+ factory.setPassword(sftpClientConfiguration.getPassword());
+ }
+ factory.setAllowUnknownKeys(true);
+ // We return a caching session factory, so that we don't have to reconnect to SFTP server for each time
+ val cachingSessionFactory = new CachingSessionFactory<>(factory, sftpClientConfiguration.getSessionCacheSize());
+ cachingSessionFactory.setSessionWaitTimeout(sftpClientConfiguration.getSessionWaitTimeout());
+ return cachingSessionFactory;
+ }
+
+ @Bean
+ @ServiceActivator(inputChannel = "toSftpChannel")
+ @SuppressWarnings("UnresolvedMessageChannel")
+ public MessageHandler messageHandler(SessionFactory sftpSessionFactory,
+ SftpClientConfiguration sftpClientConfiguration) {
+ val handler = new SftpMessageHandler(sftpSessionFactory);
+ handler.setRemoteDirectoryExpression(new LiteralExpression(sftpClientConfiguration.getDirectory()));
+ handler.setFileNameGenerator(message -> {
+ if (message.getPayload() instanceof File) {
+ return ((File) message.getPayload()).getName();
+ } else {
+ throw new IllegalArgumentException("File expected as payload.");
+ }
+ });
+ return handler;
+ }
+
+ @Bean
+ public SftpRemoteFileTemplate sftpRemoteFileTemplate(SessionFactory sftpSessionFactory,
+ SftpClientConfiguration sftpClientConfiguration) {
+ val sftpRemoteFileTemplate = new SftpRemoteFileTemplate(sftpSessionFactory);
+ sftpRemoteFileTemplate.setRemoteDirectoryExpression(
+ new LiteralExpression(sftpClientConfiguration.getDirectory()));
+ sftpRemoteFileTemplate.setAutoCreateDirectory(true);
+ // sftpRemoteFileTemplate.setBeanFactory(beanFactory);
+ sftpRemoteFileTemplate.afterPropertiesSet();
+ return sftpRemoteFileTemplate;
+ }
+
+ @Bean
+ public SftpSubDirectoryRunner sftpSubDirectoryRunner(SftpRemoteFileTemplate sftpRemoteFileTemplate,
+ SftpClientConfiguration sftpClientConfiguration) {
+ log.warn("Initial bean: {}", SftpSubDirectoryRunner.class.getSimpleName());
+ return new SftpSubDirectoryRunner(sftpRemoteFileTemplate, sftpClientConfiguration);
+ }
+
+ @Bean
+ public SftpHelper sftpHelper(SftpRemoteFileTemplate sftpRemoteFileTemplate) {
+ log.warn("Initial bean: {}", SftpHelper.class.getSimpleName());
+ return new SftpHelperImpl(sftpRemoteFileTemplate);
+ }
}
diff --git a/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/DruidConfiguration.java b/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/database/DruidConfiguration.java
similarity index 94%
rename from spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/DruidConfiguration.java
rename to spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/database/DruidConfiguration.java
index b330517a..872ad592 100644
--- a/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/DruidConfiguration.java
+++ b/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/database/DruidConfiguration.java
@@ -1,8 +1,9 @@
-package com.jmsoftware.maf.springbootstarter.configuration;
+package com.jmsoftware.maf.springbootstarter.configuration.database;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
+import com.jmsoftware.maf.springbootstarter.configuration.MafConfiguration;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import lombok.val;
diff --git a/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/MyBatisPlusConfiguration.java b/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/database/MyBatisPlusConfiguration.java
similarity index 98%
rename from spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/MyBatisPlusConfiguration.java
rename to spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/database/MyBatisPlusConfiguration.java
index 2760ab45..0187ea99 100644
--- a/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/MyBatisPlusConfiguration.java
+++ b/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/database/MyBatisPlusConfiguration.java
@@ -1,4 +1,4 @@
-package com.jmsoftware.maf.springbootstarter.configuration;
+package com.jmsoftware.maf.springbootstarter.configuration.database;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
diff --git a/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/RedisCachingConfiguration.java b/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/redis/RedisCachingConfiguration.java
similarity index 97%
rename from spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/RedisCachingConfiguration.java
rename to spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/redis/RedisCachingConfiguration.java
index 2e32ea7c..8fec9bdf 100644
--- a/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/RedisCachingConfiguration.java
+++ b/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/redis/RedisCachingConfiguration.java
@@ -1,4 +1,4 @@
-package com.jmsoftware.maf.springbootstarter.configuration;
+package com.jmsoftware.maf.springbootstarter.configuration.redis;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
diff --git a/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/RedisConfiguration.java b/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/redis/RedisConfiguration.java
similarity index 89%
rename from spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/RedisConfiguration.java
rename to spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/redis/RedisConfiguration.java
index 9a74623e..00f44c4e 100644
--- a/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/RedisConfiguration.java
+++ b/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/redis/RedisConfiguration.java
@@ -1,4 +1,4 @@
-package com.jmsoftware.maf.springbootstarter.configuration;
+package com.jmsoftware.maf.springbootstarter.configuration.redis;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.RequiredArgsConstructor;
@@ -14,6 +14,8 @@
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
+import javax.annotation.PostConstruct;
+
/**
* Description: RedisConfiguration, change description here.
*
@@ -25,6 +27,11 @@
public class RedisConfiguration {
private final ObjectMapper objectMapper;
+ @PostConstruct
+ private void postConstruct() {
+ log.warn("Initial bean: {}", RedisConfiguration.class.getSimpleName());
+ }
+
/**
* RedisTemplate uses JDK byte code serialization (byte[]), which is not that readable and friendly to
* human reading.
@@ -66,7 +73,8 @@ ReactiveRedisTemplate