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 reactiveRedisTemplate(ReactiveRedisConnect log.warn("Initial bean: {}", ReactiveRedisTemplate.class.getSimpleName()); Jackson2JsonRedisSerializer valueSerializer = new Jackson2JsonRedisSerializer<>(Object.class); RedisSerializationContext serializationContext = RedisSerializationContext - .newSerializationContext(RedisSerializationContext.SerializationPair.fromSerializer(RedisSerializer.string())) + .newSerializationContext( + RedisSerializationContext.SerializationPair.fromSerializer(RedisSerializer.string())) .value(valueSerializer) .hashValue(valueSerializer) .build(); diff --git a/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/sftp/SftpClientConfiguration.java b/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/sftp/SftpClientConfiguration.java new file mode 100644 index 00000000..4ea591bd --- /dev/null +++ b/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/sftp/SftpClientConfiguration.java @@ -0,0 +1,55 @@ +package com.jmsoftware.maf.springbootstarter.configuration.sftp; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.core.io.Resource; +import org.springframework.stereotype.Component; + +/** + *

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; +} diff --git a/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/sftp/SftpHelper.java b/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/sftp/SftpHelper.java new file mode 100644 index 00000000..c7c68c3f --- /dev/null +++ b/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/sftp/SftpHelper.java @@ -0,0 +1,85 @@ +package com.jmsoftware.maf.springbootstarter.configuration.sftp; + +import org.springframework.integration.file.support.FileExistsMode; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +/** + * Description: SftpHelper, change description here. + * + * @author 钟俊(zhongjun), email: zhongjun@toguide.cn, date: 1/14/2021 2:49 PM + **/ +@Validated +public interface SftpHelper { + /** + * List all files under the full path + * + * @param fullPath directory full path + * @return file names + */ + List listFiles(@NotBlank String fullPath); + + /** + * Check whether file exists according to file path + * + * @param fileFullPath file's full path + * @return true - file exists; false - file not exists + */ + boolean exist(@NotBlank String fileFullPath); + + /** + * Get file size + * + * @param fileFullPath file's full path + * @return file size (size unit: byte). Null if the file does not exist or path refers to a directory + * @throws IllegalArgumentException when file does not exist + */ + Long getFileSize(@NotBlank String fileFullPath) throws IllegalArgumentException; + + /** + * Upload single file + * + * @param sftpUploadFile encapsulated object + * @return file's full path if successful, else null + */ + String upload(@Valid SftpUploadFile sftpUploadFile); + + /** + * Upload file + * + * @param multipartFile multipart file + * @param subDirectory SFTP server's sub directory (if sub directory doesn't exist, will be auto created). Not + * empty and it looks like this: "/some/sub/directory/" + * @param fileExistsMode This enumeration indicates what action shall be taken in case the destination file + * already exists. In default, it should be set as: FileExistsMode.REPLACE + * @param deleteSource true - delete source file; false - not delete source file + * @return file's full path if successful, else null + * @throws IOException IO exception + */ + String upload(@NotNull MultipartFile multipartFile, @NotBlank String subDirectory, + @NotNull FileExistsMode fileExistsMode, boolean deleteSource) throws IOException; + + /** + * Read file from SFTP server + * + * @param fileFullPath file's full path + * @return file's stream + * @throws IllegalArgumentException when file does not exist + */ + InputStream read(@NotBlank String fileFullPath) throws IllegalArgumentException; + + /** + * Delete file according to file path + * + * @param fileFullPath file's full path + * @return true - file deleted; false - file not deleted + */ + boolean delete(@NotBlank String fileFullPath); +} diff --git a/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/sftp/SftpHelperImpl.java b/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/sftp/SftpHelperImpl.java new file mode 100644 index 00000000..41cbe229 --- /dev/null +++ b/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/sftp/SftpHelperImpl.java @@ -0,0 +1,131 @@ +package com.jmsoftware.maf.springbootstarter.configuration.sftp; + +import com.jcraft.jsch.ChannelSftp; +import com.jmsoftware.maf.springbootstarter.util.FileUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import lombok.val; +import org.springframework.integration.file.support.FileExistsMode; +import org.springframework.integration.sftp.session.SftpRemoteFileTemplate; +import org.springframework.integration.support.MessageBuilder; +import org.springframework.messaging.Message; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.Arrays; +import java.util.List; + +/** + * Description: SftpHelperImpl, change description here. + * + * @author 钟俊(zhongjun), email: zhongjun@toguide.cn, date: 1/14/2021 2:50 PM + **/ +@Slf4j +@RequiredArgsConstructor +public class SftpHelperImpl implements SftpHelper { + private final SftpRemoteFileTemplate sftpRemoteFileTemplate; + + @Override + public List listFiles(@NotBlank String fullPath) { + log.info("Listing files, full path: {}", fullPath); + return sftpRemoteFileTemplate.execute(session -> { + String[] strings = new String[0]; + try { + strings = session.listNames(fullPath); + } catch (IOException e) { + log.error("Exception occurred when listing files. Exception message: {}", e.getMessage(), e); + } + return Arrays.asList(strings); + }); + } + + @Override + public boolean exist(@NotBlank String fileFullPath) { + log.info("Checking whether file exists in SFTP server, file full path: {}", fileFullPath); + return sftpRemoteFileTemplate.execute(session -> session.exists(fileFullPath)); + } + + @Override + public Long getFileSize(@NotBlank String fileFullPath) throws IllegalArgumentException { + if (!exist(fileFullPath)) { + throw new IllegalArgumentException( + "Cannot get file size from SFTP server. Caused by: file does not exist, full path: " + fileFullPath); + } + String[] splits = fileFullPath.split("/"); + String fileName = splits[splits.length - 1]; + String listPath = fileFullPath.substring(0, fileFullPath.lastIndexOf(fileName) - 1); + log.info("Retrieve file size from SFTP server, full path: {}", fileFullPath); + final Long[] fileSize = new Long[1]; + sftpRemoteFileTemplate.execute(session -> { + ChannelSftp.LsEntry[] lsEntries = session.list(listPath); + for (ChannelSftp.LsEntry lsEntry : lsEntries) { + if (lsEntry.getFilename().equals(fileName)) { + fileSize[0] = lsEntry.getAttrs().getSize(); + } + } + return null; + }); + return fileSize[0]; + } + + @Override + public String upload(@Valid SftpUploadFile sftpUploadFile) { + log.info("Uploading single file to SFTP server. SftpUploadFile: {}", sftpUploadFile); + Message message = MessageBuilder.withPayload(sftpUploadFile.getFileToBeUploaded()).build(); + return sftpRemoteFileTemplate.send(message, sftpUploadFile.getSubDirectory(), + sftpUploadFile.getFileExistsMode()); + } + + @Override + public String upload(@NotNull MultipartFile multipartFile, @NotBlank String subDirectory, + @NotNull FileExistsMode fileExistsMode, boolean deleteSource) throws IOException { + log.info("Uploading single multipart file to SFTP server. File name: {}", multipartFile.getOriginalFilename()); + File file = FileUtil.convertFrom(multipartFile); + SftpUploadFile sftpUploadFile = SftpUploadFile.builder() + .fileToBeUploaded(file) + .subDirectory(subDirectory) + .fileExistsMode(fileExistsMode) + .build(); + String fileFullPath = this.upload(sftpUploadFile); + if (deleteSource) { + val deleted = file.delete(); + log.debug("File deleted: {} {}", deleted, file); + } + return fileFullPath; + } + + @Override + public InputStream read(@NotBlank String fileFullPath) throws IllegalArgumentException { + log.info("Read file from SFTP server, file full path: {}", fileFullPath); + return sftpRemoteFileTemplate.execute(session -> { + boolean existFile = session.exists(fileFullPath); + if (existFile) { + return session.readRaw(fileFullPath); + } + log.error("Cannot read file from SFTP 'server. Caused by : file does not exist, full path: {}", + fileFullPath); + throw new IllegalArgumentException( + "Cannot read file from SFTP 'server. Caused by : file does not exist, full path: " + fileFullPath); + }); + } + + @Override + public boolean delete(@NotBlank String fileFullPath) { + log.warn("Deleting SFTP server's file by file full path: {}", fileFullPath); + return sftpRemoteFileTemplate.execute(session -> { + boolean existFile = session.exists(fileFullPath); + if (existFile) { + return session.remove(fileFullPath); + } else { + log.error("Cannot delete SFTP server's file. Caused by: file does not exist, full path: {} ", + fileFullPath); + return false; + } + }); + } +} diff --git a/auth-center/src/main/java/com/jmsoftware/maf/authcenter/universal/domain/SftpSubDirectory.java b/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/sftp/SftpSubDirectory.java similarity index 84% rename from auth-center/src/main/java/com/jmsoftware/maf/authcenter/universal/domain/SftpSubDirectory.java rename to spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/sftp/SftpSubDirectory.java index 99b231a1..4e2b26f7 100644 --- a/auth-center/src/main/java/com/jmsoftware/maf/authcenter/universal/domain/SftpSubDirectory.java +++ b/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/sftp/SftpSubDirectory.java @@ -1,4 +1,4 @@ -package com.jmsoftware.maf.authcenter.universal.domain; +package com.jmsoftware.maf.springbootstarter.configuration.sftp; import lombok.Getter; @@ -6,6 +6,8 @@ *

SftpSubDirectory

*

Reminder: if you want to add more custom sub directories in the future, please add en enum item in this class

* + * TODO: think of another better way to configure the directory + * * @author Johnny Miller (锺俊), email: johnnysviva@outlook.com * @date 2019-07-04 23:10 **/ diff --git a/auth-center/src/main/java/com/jmsoftware/maf/authcenter/universal/configuration/SftpSubDirectoryRunner.java b/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/sftp/SftpSubDirectoryRunner.java similarity index 79% rename from auth-center/src/main/java/com/jmsoftware/maf/authcenter/universal/configuration/SftpSubDirectoryRunner.java rename to spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/sftp/SftpSubDirectoryRunner.java index 757ebae4..4cec5c10 100644 --- a/auth-center/src/main/java/com/jmsoftware/maf/authcenter/universal/configuration/SftpSubDirectoryRunner.java +++ b/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/sftp/SftpSubDirectoryRunner.java @@ -1,6 +1,5 @@ -package com.jmsoftware.maf.authcenter.universal.configuration; +package com.jmsoftware.maf.springbootstarter.configuration.sftp; -import com.jmsoftware.maf.authcenter.universal.domain.SftpSubDirectory; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import lombok.val; @@ -11,7 +10,7 @@ /** *

SftpSubDirectoryRunner

- *

After dependency injection finished, we must inti the SFTP server's sub directory for out business. If you want + *

After dependency injection finished, we must inti the SFTP server's sub-directory for out business. If you want * to customize initialization configuration, config SftpSubDirectory.

* * @author Johnny Miller (锺俊), email: johnnysviva@outlook.com @@ -38,19 +37,19 @@ public void run(ApplicationArguments args) { return null; }); - log.info("Staring to initial SFTP server sub directory."); + log.info("Staring to initial SFTP server sub-directory."); sftpRemoteFileTemplate.execute(session -> { for (val sftpSubDirectory : SftpSubDirectory.values()) { val fullPath = sftpClientConfiguration.getDirectory() + sftpSubDirectory.getSubDirectory(); if (!session.exists(fullPath)) { - log.info("SFTP server sub directory does not exist. Creating sub directory: {}", fullPath); + log.info("SFTP server sub-directory does not exist. Creating sub-directory: {}", fullPath); session.mkdir(fullPath); } else { - log.info("SFTP server sub directory exists. Path: {}", fullPath); + log.info("SFTP server sub-directory exists. Path: {}", fullPath); } } return null; }); - log.info("Initialing SFTP server sub directory is done."); + log.warn("Initialing SFTP server sub-directory is done."); } } diff --git a/auth-center/src/main/java/com/jmsoftware/maf/authcenter/universal/domain/SftpUploadFile.java b/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/sftp/SftpUploadFile.java similarity index 93% rename from auth-center/src/main/java/com/jmsoftware/maf/authcenter/universal/domain/SftpUploadFile.java rename to spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/sftp/SftpUploadFile.java index 6bc9072a..2d27963c 100644 --- a/auth-center/src/main/java/com/jmsoftware/maf/authcenter/universal/domain/SftpUploadFile.java +++ b/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/sftp/SftpUploadFile.java @@ -1,4 +1,4 @@ -package com.jmsoftware.maf.authcenter.universal.domain; +package com.jmsoftware.maf.springbootstarter.configuration.sftp; import lombok.Builder; import lombok.Data;