From c1fe4914b0049fe3110822d6524bb59c1240c4b1 Mon Sep 17 00:00:00 2001 From: Kris <2893855659@qq.com> Date: Fri, 6 Jun 2025 10:29:08 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90feat=E3=80=91=E5=AF=B9=E6=8E=A5SFBulk?= =?UTF-8?q?=EF=BC=8C=E5=A4=A7=E6=89=B9=E9=87=8FCreate=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E5=A2=9E=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- logs/data-dump-error.log | 325 ---------------- logs/data-dump.2025-02-11.0.log.gz | Bin 5006 -> 0 bytes logs/data-dump.2025-02-13.0.log.gz | Bin 5160 -> 0 bytes logs/data-dump.log | 348 ------------------ pom.xml | 23 +- .../datadump/config/SalesforceConnect.java | 44 ++- .../config/SalesforceTargetConnect.java | 46 ++- .../datadump/controller/JobController.java | 30 ++ .../com/celnet/datadump/job/DataDumpJob.java | 25 ++ .../celnet/datadump/mapper/CustomMapper.java | 11 + .../datadump/service/DataImportService.java | 1 + .../service/impl/DataImportServiceImpl.java | 338 ++++++++++++++++- .../service/impl/FileManagerServiceImpl.java | 4 +- .../service/impl/FileServiceImpl.java | 4 +- .../com/celnet/datadump/util/BulkUtil.java | 209 +++++++++++ .../datadump/util/CsvConverterUtil.java | 330 +++++++++++++++++ .../com/celnet/datadump/util/DataUtil.java | 4 +- .../com/celnet/datadump/util/MD5Util.java | 5 +- src/main/resources/application-prod.yml | 4 +- src/main/resources/mapper/CustomMapper.xml | 12 + .../celnet/datadump/DataDumpConnetTests.java | 4 +- 21 files changed, 1082 insertions(+), 685 deletions(-) delete mode 100644 logs/data-dump-error.log delete mode 100644 logs/data-dump.2025-02-11.0.log.gz delete mode 100644 logs/data-dump.2025-02-13.0.log.gz delete mode 100644 logs/data-dump.log create mode 100644 src/main/java/com/celnet/datadump/util/BulkUtil.java create mode 100644 src/main/java/com/celnet/datadump/util/CsvConverterUtil.java diff --git a/logs/data-dump-error.log b/logs/data-dump-error.log deleted file mode 100644 index 7e0988d..0000000 --- a/logs/data-dump-error.log +++ /dev/null @@ -1,325 +0,0 @@ -[data-dump] 2025-05-09 16:32:52.727 ERROR 28500 [main] com.zaxxer.hikari.pool.HikariPool[594] HikariPool-1 - Exception during pool initialization. - -com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. - at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) - at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) - at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828) - at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:448) - at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) - at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) - at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) - at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364) - at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) - at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:476) - at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:115) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) - at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) - at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) - at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80) - at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67) - at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:337) - at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:86) - at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:62) - at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325) - at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) - at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109) - at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81) - at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62) - at jdk.proxy2/jdk.proxy2.$Proxy97.query(Unknown Source) - at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151) - at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145) - at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427) - at jdk.proxy2/jdk.proxy2.$Proxy74.selectList(Unknown Source) - at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224) - at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:166) - at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:77) - at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) - at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) - at jdk.proxy2/jdk.proxy2.$Proxy75.list(Unknown Source) - at com.celnet.datadump.config.SalesforceExecutor.init(SalesforceExecutor.java:36) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389) - at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333) - at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:440) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) - at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) - at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1389) - at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1309) - at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:656) - at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:639) - at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) - at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) - at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) - at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1389) - at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1309) - at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:656) - at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:639) - at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) - at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) - at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:953) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) - at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:448) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:339) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:1365) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354) - at com.celnet.datadump.DataDumpApplication.main(DataDumpApplication.java:13) -Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. - at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) - at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) - at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) - at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) - at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61) - at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) - at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151) - at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167) - at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) - at com.mysql.cj.NativeSession.connect(NativeSession.java:120) - at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:948) - at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:818) - ... 93 common frames omitted -Caused by: java.net.ConnectException: Connection refused: no further information - at java.base/sun.nio.ch.Net.pollConnect(Native Method) - at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) - at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:547) - at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:602) - at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) - at java.base/java.net.Socket.connect(Socket.java:633) - at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) - at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) - ... 96 common frames omitted - -[data-dump] 2025-05-09 16:32:52.752 ERROR 28500 [main] org.springframework.boot.SpringApplication[865] Application run failed - -org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'fileManagerController': Unsatisfied dependency expressed through field 'fileManagerService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'fileManagerServiceImpl': Unsatisfied dependency expressed through field 'salesforceExecutor'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'salesforceExecutor': Invocation of init method failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: -### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. -### The error may exist in file [D:\data-dump\target\classes\mapper\CustomMapper.xml] -### The error may involve com.celnet.datadump.mapper.CustomMapper.list -### The error occurred while executing a query -### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. - at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:659) - at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:639) - at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) - at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) - at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:953) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) - at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:448) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:339) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:1365) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354) - at com.celnet.datadump.DataDumpApplication.main(DataDumpApplication.java:13) -Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'fileManagerServiceImpl': Unsatisfied dependency expressed through field 'salesforceExecutor'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'salesforceExecutor': Invocation of init method failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: -### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. -### The error may exist in file [D:\data-dump\target\classes\mapper\CustomMapper.xml] -### The error may involve com.celnet.datadump.mapper.CustomMapper.list -### The error occurred while executing a query -### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. - at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:659) - at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:639) - at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) - at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) - at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) - at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1389) - at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1309) - at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:656) - ... 20 common frames omitted -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'salesforceExecutor': Invocation of init method failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: -### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. -### The error may exist in file [D:\data-dump\target\classes\mapper\CustomMapper.xml] -### The error may involve com.celnet.datadump.mapper.CustomMapper.list -### The error occurred while executing a query -### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. - at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:160) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:440) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) - at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) - at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1389) - at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1309) - at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:656) - ... 34 common frames omitted -Caused by: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: -### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. -### The error may exist in file [D:\data-dump\target\classes\mapper\CustomMapper.xml] -### The error may involve com.celnet.datadump.mapper.CustomMapper.list -### The error occurred while executing a query -### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. - at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:96) - at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441) - at jdk.proxy2/jdk.proxy2.$Proxy74.selectList(Unknown Source) - at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224) - at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:166) - at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:77) - at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) - at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) - at jdk.proxy2/jdk.proxy2.$Proxy75.list(Unknown Source) - at com.celnet.datadump.config.SalesforceExecutor.init(SalesforceExecutor.java:36) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389) - at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333) - at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157) - ... 46 common frames omitted -Caused by: org.apache.ibatis.exceptions.PersistenceException: -### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. -### The error may exist in file [D:\data-dump\target\classes\mapper\CustomMapper.xml] -### The error may involve com.celnet.datadump.mapper.CustomMapper.list -### The error occurred while executing a query -### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. - at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30) - at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:153) - at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145) - at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427) - ... 61 common frames omitted -Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. - at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:83) - at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80) - at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67) - at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:337) - at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:86) - at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:62) - at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325) - at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) - at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109) - at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81) - at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62) - at jdk.proxy2/jdk.proxy2.$Proxy97.query(Unknown Source) - at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151) - ... 68 common frames omitted -Caused by: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. - at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) - at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) - at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828) - at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:448) - at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) - at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) - at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) - at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364) - at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) - at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:476) - at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:115) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) - at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) - at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) - ... 80 common frames omitted -Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. - at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) - at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) - at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) - at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) - at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61) - at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) - at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151) - at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167) - at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) - at com.mysql.cj.NativeSession.connect(NativeSession.java:120) - at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:948) - at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:818) - ... 93 common frames omitted -Caused by: java.net.ConnectException: Connection refused: no further information - at java.base/sun.nio.ch.Net.pollConnect(Native Method) - at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) - at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:547) - at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:602) - at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) - at java.base/java.net.Socket.connect(Socket.java:633) - at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) - at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) - ... 96 common frames omitted - diff --git a/logs/data-dump.2025-02-11.0.log.gz b/logs/data-dump.2025-02-11.0.log.gz deleted file mode 100644 index d39d1170747f811f0a235f15d6255838e88cf89f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5006 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 X&^M<1KF>$tJW}l*i0hjqIobaJN0^&i diff --git a/logs/data-dump.2025-02-13.0.log.gz b/logs/data-dump.2025-02-13.0.log.gz deleted file mode 100644 index cb32fb7f28cc9da96dfa9db20514e1b8fa69296b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5160 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 Wgpg|SA0RdF(YDEMJo(hn9{eA~w*++n diff --git a/logs/data-dump.log b/logs/data-dump.log deleted file mode 100644 index a054462..0000000 --- a/logs/data-dump.log +++ /dev/null @@ -1,348 +0,0 @@ -[data-dump] 2025-05-09 16:32:50.246 INFO 28500 [main] com.celnet.datadump.DataDumpApplication[55] Starting DataDumpApplication using Java 17.0.11 on DESKTOP-368IV5S with PID 28500 (D:\data-dump\target\classes started by Kris in D:\data-dump) -[data-dump] 2025-05-09 16:32:50.253 INFO 28500 [main] com.celnet.datadump.DataDumpApplication[681] The following 1 profile is active: "prod" -[data-dump] 2025-05-09 16:32:51.188 INFO 28500 [main] org.springframework.boot.web.embedded.tomcat.TomcatWebServer[108] Tomcat initialized with port(s): 8888 (http) -[data-dump] 2025-05-09 16:32:51.194 INFO 28500 [main] org.apache.coyote.http11.Http11NioProtocol[173] Initializing ProtocolHandler ["http-nio-8888"] -[data-dump] 2025-05-09 16:32:51.194 INFO 28500 [main] org.apache.catalina.core.StandardService[173] Starting service [Tomcat] -[data-dump] 2025-05-09 16:32:51.195 INFO 28500 [main] org.apache.catalina.core.StandardEngine[173] Starting Servlet engine: [Apache Tomcat/9.0.60] -[data-dump] 2025-05-09 16:32:51.271 INFO 28500 [main] org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/][173] Initializing Spring embedded WebApplicationContext -[data-dump] 2025-05-09 16:32:51.272 INFO 28500 [main] org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext[290] Root WebApplicationContext: initialization completed in 887 ms -[data-dump] 2025-05-09 16:32:51.674 INFO 28500 [main] com.zaxxer.hikari.HikariDataSource[110] HikariPool-1 - Starting... -[data-dump] 2025-05-09 16:32:52.727 ERROR 28500 [main] com.zaxxer.hikari.pool.HikariPool[594] HikariPool-1 - Exception during pool initialization. - -com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. - at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) - at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) - at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828) - at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:448) - at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) - at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) - at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) - at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364) - at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) - at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:476) - at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:115) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) - at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) - at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) - at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80) - at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67) - at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:337) - at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:86) - at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:62) - at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325) - at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) - at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109) - at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81) - at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62) - at jdk.proxy2/jdk.proxy2.$Proxy97.query(Unknown Source) - at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151) - at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145) - at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427) - at jdk.proxy2/jdk.proxy2.$Proxy74.selectList(Unknown Source) - at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224) - at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:166) - at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:77) - at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) - at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) - at jdk.proxy2/jdk.proxy2.$Proxy75.list(Unknown Source) - at com.celnet.datadump.config.SalesforceExecutor.init(SalesforceExecutor.java:36) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389) - at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333) - at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:440) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) - at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) - at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1389) - at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1309) - at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:656) - at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:639) - at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) - at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) - at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) - at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1389) - at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1309) - at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:656) - at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:639) - at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) - at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) - at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:953) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) - at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:448) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:339) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:1365) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354) - at com.celnet.datadump.DataDumpApplication.main(DataDumpApplication.java:13) -Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. - at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) - at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) - at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) - at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) - at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61) - at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) - at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151) - at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167) - at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) - at com.mysql.cj.NativeSession.connect(NativeSession.java:120) - at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:948) - at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:818) - ... 93 common frames omitted -Caused by: java.net.ConnectException: Connection refused: no further information - at java.base/sun.nio.ch.Net.pollConnect(Native Method) - at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) - at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:547) - at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:602) - at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) - at java.base/java.net.Socket.connect(Socket.java:633) - at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) - at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) - ... 96 common frames omitted - -[data-dump] 2025-05-09 16:32:52.732 WARN 28500 [main] org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext[591] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'fileManagerController': Unsatisfied dependency expressed through field 'fileManagerService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'fileManagerServiceImpl': Unsatisfied dependency expressed through field 'salesforceExecutor'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'salesforceExecutor': Invocation of init method failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: -### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. -### The error may exist in file [D:\data-dump\target\classes\mapper\CustomMapper.xml] -### The error may involve com.celnet.datadump.mapper.CustomMapper.list -### The error occurred while executing a query -### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. -[data-dump] 2025-05-09 16:32:52.734 INFO 28500 [main] org.apache.catalina.core.StandardService[173] Stopping service [Tomcat] -[data-dump] 2025-05-09 16:32:52.743 INFO 28500 [main] org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener[136] - -Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. -[data-dump] 2025-05-09 16:32:52.752 ERROR 28500 [main] org.springframework.boot.SpringApplication[865] Application run failed - -org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'fileManagerController': Unsatisfied dependency expressed through field 'fileManagerService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'fileManagerServiceImpl': Unsatisfied dependency expressed through field 'salesforceExecutor'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'salesforceExecutor': Invocation of init method failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: -### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. -### The error may exist in file [D:\data-dump\target\classes\mapper\CustomMapper.xml] -### The error may involve com.celnet.datadump.mapper.CustomMapper.list -### The error occurred while executing a query -### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. - at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:659) - at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:639) - at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) - at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) - at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:953) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) - at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:448) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:339) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:1365) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354) - at com.celnet.datadump.DataDumpApplication.main(DataDumpApplication.java:13) -Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'fileManagerServiceImpl': Unsatisfied dependency expressed through field 'salesforceExecutor'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'salesforceExecutor': Invocation of init method failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: -### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. -### The error may exist in file [D:\data-dump\target\classes\mapper\CustomMapper.xml] -### The error may involve com.celnet.datadump.mapper.CustomMapper.list -### The error occurred while executing a query -### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. - at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:659) - at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:639) - at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) - at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) - at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) - at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1389) - at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1309) - at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:656) - ... 20 common frames omitted -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'salesforceExecutor': Invocation of init method failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: -### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. -### The error may exist in file [D:\data-dump\target\classes\mapper\CustomMapper.xml] -### The error may involve com.celnet.datadump.mapper.CustomMapper.list -### The error occurred while executing a query -### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. - at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:160) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:440) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) - at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) - at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1389) - at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1309) - at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:656) - ... 34 common frames omitted -Caused by: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: -### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. -### The error may exist in file [D:\data-dump\target\classes\mapper\CustomMapper.xml] -### The error may involve com.celnet.datadump.mapper.CustomMapper.list -### The error occurred while executing a query -### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. - at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:96) - at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441) - at jdk.proxy2/jdk.proxy2.$Proxy74.selectList(Unknown Source) - at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224) - at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:166) - at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:77) - at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) - at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) - at jdk.proxy2/jdk.proxy2.$Proxy75.list(Unknown Source) - at com.celnet.datadump.config.SalesforceExecutor.init(SalesforceExecutor.java:36) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389) - at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333) - at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157) - ... 46 common frames omitted -Caused by: org.apache.ibatis.exceptions.PersistenceException: -### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. -### The error may exist in file [D:\data-dump\target\classes\mapper\CustomMapper.xml] -### The error may involve com.celnet.datadump.mapper.CustomMapper.list -### The error occurred while executing a query -### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. - at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30) - at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:153) - at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145) - at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427) - ... 61 common frames omitted -Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. - at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:83) - at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80) - at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67) - at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:337) - at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:86) - at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:62) - at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325) - at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) - at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109) - at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81) - at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62) - at jdk.proxy2/jdk.proxy2.$Proxy97.query(Unknown Source) - at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151) - ... 68 common frames omitted -Caused by: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. - at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) - at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) - at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828) - at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:448) - at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) - at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) - at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) - at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364) - at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) - at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:476) - at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:115) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) - at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) - at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) - ... 80 common frames omitted -Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure - -The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. - at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) - at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) - at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) - at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) - at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61) - at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) - at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151) - at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167) - at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) - at com.mysql.cj.NativeSession.connect(NativeSession.java:120) - at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:948) - at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:818) - ... 93 common frames omitted -Caused by: java.net.ConnectException: Connection refused: no further information - at java.base/sun.nio.ch.Net.pollConnect(Native Method) - at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) - at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:547) - at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:602) - at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) - at java.base/java.net.Socket.connect(Socket.java:633) - at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) - at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) - ... 96 common frames omitted - diff --git a/pom.xml b/pom.xml index f6adb63..7c2c26d 100644 --- a/pom.xml +++ b/pom.xml @@ -61,7 +61,28 @@ ${fastjson.version} + + + cn.hutool + hutool-all + 5.8.5 + + + com.opencsv + opencsv + 5.8 + + + org.apache.commons + commons-csv + 1.10.0 + + + io.github.ljwlgl + common-util + 2.1.0 + com.baomidou @@ -217,7 +238,7 @@ org.springframework.boot spring-boot-maven-plugin - + org.apache.maven.pluginsmaven-compiler-plugin88 diff --git a/src/main/java/com/celnet/datadump/config/SalesforceConnect.java b/src/main/java/com/celnet/datadump/config/SalesforceConnect.java index 1f1cd52..b271339 100644 --- a/src/main/java/com/celnet/datadump/config/SalesforceConnect.java +++ b/src/main/java/com/celnet/datadump/config/SalesforceConnect.java @@ -2,7 +2,9 @@ package com.celnet.datadump.config; import com.alibaba.fastjson.JSONArray; import com.celnet.datadump.mapper.CustomMapper; +import com.celnet.datadump.util.BulkUtil; import com.google.common.collect.Lists; +import com.sforce.async.BulkConnection; import com.sforce.soap.partner.PartnerConnection; import com.sforce.ws.ConnectionException; import com.sforce.ws.ConnectorConfig; @@ -61,7 +63,47 @@ public class SalesforceConnect { config.setReadTimeout(60 * 60 * 1000); return new PartnerConnection(config); } catch (ConnectionException e) { - e.printStackTrace(); + log.error("exception message", e); + return null; + } + } + + /** + * 创建Bulk连接 + * @author kris + */ + public BulkConnection createBulkConnect() { + try { + List> poll = customerMapper.list("code,value","org_config",null); + //遍历poll,找出code值为SOURCE_ORG_URL,SOURCE_ORG_USERNAME,SOURCE_ORG_PASSWORD的value值 + Map map = new HashMap<>(); + for (Map map1 : poll) { + if ("SOURCE_ORG_URL".equals(map1.get("code"))) { + map.put("url", (String) map1.get("value")); + } + if ("SOURCE_ORG_USERNAME".equals(map1.get("code"))) { + map.put("username", (String) map1.get("value")); + } + if ("SOURCE_ORG_PASSWORD".equals(map1.get("code"))) { + map.put("password", String.valueOf(map1.get("value"))); + } + } +// +// String username = map.get("username"); +// ConnectorConfig config = new ConnectorConfig(); +// config.setUsername(username); +// config.setPassword(map.get("password")); +// String url = map.get("url"); +// config.setAuthEndpoint(url); +// config.setServiceEndpoint(url); +// config.setConnectionTimeout(60 * 60 * 1000); +// config.setReadTimeout(60 * 60 * 1000); +// PartnerConnection connection = new PartnerConnection(config); +// config.setRestEndpoint(url); +// config.setSessionId(connection.getSessionHeader().getSessionId()); + return BulkUtil.getBulkConnection(map.get("username"),map.get("password"),map.get("url")); + } catch (Exception e) { + log.error("exception message", e); return null; } } diff --git a/src/main/java/com/celnet/datadump/config/SalesforceTargetConnect.java b/src/main/java/com/celnet/datadump/config/SalesforceTargetConnect.java index 0498e3e..6ebf955 100644 --- a/src/main/java/com/celnet/datadump/config/SalesforceTargetConnect.java +++ b/src/main/java/com/celnet/datadump/config/SalesforceTargetConnect.java @@ -1,7 +1,9 @@ package com.celnet.datadump.config; import com.celnet.datadump.mapper.CustomMapper; +import com.celnet.datadump.util.BulkUtil; import com.google.common.collect.Lists; +import com.sforce.async.BulkConnection; import com.sforce.soap.partner.PartnerConnection; import com.sforce.ws.ConnectionException; import com.sforce.ws.ConnectorConfig; @@ -56,8 +58,50 @@ public class SalesforceTargetConnect { String orgId = connection.getUserInfo().getOrganizationId(); return connection; } catch (ConnectionException e) { - e.printStackTrace(); + log.error("exception message", e); return null; } } + + /** + * 创建Bulk连接 + * @author kris + */ + public BulkConnection createBulkConnect() { + try { + List> poll = customerMapper.list("code,value","org_config",null); + //遍历poll,找出code值为TARGET_ORG_URL,TARGET_ORG_USERNAME,TARGET_ORG_PASSWORD的value值 + Map map = new HashMap<>(); + for (Map map1 : poll) { + if ("TARGET_ORG_URL".equals(map1.get("code"))) { + map.put("url", (String) map1.get("value")); + } + if ("TARGET_ORG_USERNAME".equals(map1.get("code"))) { + map.put("username", (String) map1.get("value")); + } + if ("TARGET_ORG_PASSWORD".equals(map1.get("code"))) { + map.put("password", (String) map1.get("value")); + } + } + + +// String username = ; +// ConnectorConfig config = new ConnectorConfig(); +// config.setUsername(username); +// config.setPassword(); +// String url = ; +// config.setAuthEndpoint(url); +// config.setServiceEndpoint(url); +// config.setConnectionTimeout(60 * 60 * 1000); +// config.setReadTimeout(60 * 60 * 1000); +// PartnerConnection connection = new PartnerConnection(config); +// config.setRestEndpoint(url); +// config.setSessionId(connection.getSessionHeader().getSessionId()); + return BulkUtil.getBulkConnection(map.get("username"),map.get("password"),map.get("url")); + } catch (Exception e) { + log.error("exception message", e); + return null; + } + } + } diff --git a/src/main/java/com/celnet/datadump/controller/JobController.java b/src/main/java/com/celnet/datadump/controller/JobController.java index a32ba33..9b2faf4 100644 --- a/src/main/java/com/celnet/datadump/controller/JobController.java +++ b/src/main/java/com/celnet/datadump/controller/JobController.java @@ -1,11 +1,13 @@ package com.celnet.datadump.controller; +import com.alibaba.fastjson.JSON; import com.celnet.datadump.entity.DataObject; import com.celnet.datadump.global.Result; import com.celnet.datadump.param.*; import com.celnet.datadump.service.*; import com.celnet.datadump.util.DataUtil; import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -37,6 +39,8 @@ public class JobController { private CommonService commonService; @Autowired private DataCheckDeletedService dataCheckDeletedService; + @Autowired + private DataImportService dataImportService; @PostMapping("/fileTransform") @ApiOperation("附件解析") @@ -185,4 +189,30 @@ public class JobController { return Result.fail(returnT.getMsg()); } } + + /** + * bulk批量大数据生成newSFID + * @param paramStr + * @author kris + * @return + * @throws Exception + */ + @PostMapping("/dataImportBatchJob") + @ApiOperation("大数据生成newSFID") + public ReturnT dataImportBatchJob(String paramStr) throws Exception { + log.info("dataImportBatchJob execute start .................."); + SalesforceParam param = new SalesforceParam(); + try { + if (StringUtils.isNotBlank(paramStr)) { + param = JSON.parseObject(paramStr, SalesforceParam.class); + } + } catch (Throwable throwable) { + return new ReturnT<>(500, "参数解析失败!"); + } + param.setType(1); + // 参数转换 + param.setBeginCreateDate(param.getBeginDate()); + param.setEndCreateDate(param.getEndDate()); + return dataImportService.immigrationBatch(param); + } } diff --git a/src/main/java/com/celnet/datadump/job/DataDumpJob.java b/src/main/java/com/celnet/datadump/job/DataDumpJob.java index f27cdb4..3e17114 100644 --- a/src/main/java/com/celnet/datadump/job/DataDumpJob.java +++ b/src/main/java/com/celnet/datadump/job/DataDumpJob.java @@ -122,6 +122,31 @@ public class DataDumpJob { return dataImportService.immigration(param); } + /** + * bulk批量大数据生成newSFID + * @param paramStr + * @author kris + * @return + * @throws Exception + */ + @XxlJob("dataImportBatchJob") + public ReturnT dataImportBatchJob(String paramStr) throws Exception { + log.info("dataImportBatchJob execute start .................."); + SalesforceParam param = new SalesforceParam(); + try { + if (StringUtils.isNotBlank(paramStr)) { + param = JSON.parseObject(paramStr, SalesforceParam.class); + } + } catch (Throwable throwable) { + return new ReturnT<>(500, "参数解析失败!"); + } + param.setType(1); + // 参数转换 + param.setBeginCreateDate(param.getBeginDate()); + param.setEndCreateDate(param.getEndDate()); + return dataImportService.immigrationBatch(param); + } + /** * 更新目标org数据 diff --git a/src/main/java/com/celnet/datadump/mapper/CustomMapper.java b/src/main/java/com/celnet/datadump/mapper/CustomMapper.java index b702dcd..de93003 100644 --- a/src/main/java/com/celnet/datadump/mapper/CustomMapper.java +++ b/src/main/java/com/celnet/datadump/mapper/CustomMapper.java @@ -1,6 +1,7 @@ package com.celnet.datadump.mapper; import com.celnet.datadump.param.SalesforceParam; +import cn.hutool.json.JSONObject; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -102,6 +103,16 @@ public interface CustomMapper { */ public List> list(@Param("select") String select, @Param("api") String api, @Param("sql") String sql); + /** + * 通用表数据获取,返回JosnObject + * + * @param api 参数 + * @param select 参数 + * @param sql 参数 + * @return list + */ + public List listJsonObject(@Param("select") String select, @Param("api") String api, @Param("sql") String sql); + /** * 通用表数据获取 * diff --git a/src/main/java/com/celnet/datadump/service/DataImportService.java b/src/main/java/com/celnet/datadump/service/DataImportService.java index 2772ff3..34785fc 100644 --- a/src/main/java/com/celnet/datadump/service/DataImportService.java +++ b/src/main/java/com/celnet/datadump/service/DataImportService.java @@ -14,6 +14,7 @@ public interface DataImportService { ReturnT immigration(SalesforceParam param) throws Exception; + ReturnT immigrationBatch(SalesforceParam param) throws Exception; ReturnT immigrationUpdate(SalesforceParam param) throws Exception; } diff --git a/src/main/java/com/celnet/datadump/service/impl/DataImportServiceImpl.java b/src/main/java/com/celnet/datadump/service/impl/DataImportServiceImpl.java index a79c367..e316bec 100644 --- a/src/main/java/com/celnet/datadump/service/impl/DataImportServiceImpl.java +++ b/src/main/java/com/celnet/datadump/service/impl/DataImportServiceImpl.java @@ -1,8 +1,9 @@ package com.celnet.datadump.service.impl; +import cn.hutool.core.lang.UUID; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; +import cn.hutool.json.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.celnet.datadump.config.SalesforceExecutor; @@ -15,9 +16,12 @@ import com.celnet.datadump.param.DataDumpParam; import com.celnet.datadump.param.DataDumpSpecialParam; import com.celnet.datadump.param.SalesforceParam; import com.celnet.datadump.service.*; +import com.celnet.datadump.util.BulkUtil; +import com.celnet.datadump.util.CsvConverterUtil; import com.celnet.datadump.util.DataUtil; import com.celnet.datadump.util.EmailUtil; import com.google.common.collect.Lists; +import com.sforce.async.*; import com.sforce.soap.partner.PartnerConnection; import com.sforce.soap.partner.SaveResult; import com.sforce.soap.partner.sobject.SObject; @@ -30,7 +34,14 @@ import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.time.DateUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.batch.BatchProperties; import org.springframework.stereotype.Service; + +import javax.swing.text.Utilities; +import java.io.ByteArrayInputStream; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @@ -98,6 +109,25 @@ public class DataImportServiceImpl implements DataImportService { } } + @Override + public ReturnT immigrationBatch(SalesforceParam param) throws Exception { + List> futures = Lists.newArrayList(); + try { + if (StringUtils.isNotBlank(param.getApi())) { + // 手动任务 + ReturnT result = manualImmigrationBatch(param, futures); + if (result != null) { + return result; + } + } + return ReturnT.SUCCESS; + } catch (Exception exception) { + salesforceExecutor.remove(futures.toArray(new Future[]{})); + log.error("immigration error", exception); + throw exception; + } + } + @Override public ReturnT manualImmigration(SalesforceParam param, List> futures) throws Exception { List apis; @@ -178,6 +208,86 @@ public class DataImportServiceImpl implements DataImportService { return null; } + public ReturnT manualImmigrationBatch(SalesforceParam param, List> futures) throws Exception { + List apis; + apis = DataUtil.toIdList(param.getApi()); + String join = StringUtils.join(apis, ","); + log.info("immigration apis: {}", join); + XxlJobLogger.log("immigration apis: {}", join); + + TimeUnit.MILLISECONDS.sleep(1); + + // 全量的时候 检测是否有自动任务锁住的表 + boolean isFull = CollectionUtils.isEmpty(param.getIds()); + if (isFull) { + QueryWrapper qw = new QueryWrapper<>(); + qw.eq("data_lock", 1).in("name", apis); + List list = dataObjectService.list(qw); + if (CollectionUtils.isNotEmpty(list)) { + String apiNames = list.stream().map(DataObject::getName).collect(Collectors.joining()); + return new ReturnT<>(500, "api:" + apiNames + " is locked"); + } + } + + BulkConnection bulkConnection = salesforceTargetConnect.createBulkConnect(); + for (String api : apis) { + DataObject update = new DataObject(); + TimeUnit.MILLISECONDS.sleep(1); + try { + List salesforceParams = null; + + update.setName(api); + update.setDataLock(1); + dataObjectService.updateById(update); + + QueryWrapper dbQw = new QueryWrapper<>(); + dbQw.eq("name", api); + List list = dataBatchService.list(dbQw); + AtomicInteger batch = new AtomicInteger(1); + + if (CollectionUtils.isNotEmpty(list)) { + salesforceParams = list.stream().map(t -> { + SalesforceParam salesforceParam = param.clone(); + salesforceParam.setApi(t.getName()); + salesforceParam.setBeginCreateDate(t.getSyncStartDate()); + salesforceParam.setEndCreateDate(t.getSyncEndDate()); + salesforceParam.setBatch(batch.getAndIncrement()); + return salesforceParam; + }).collect(Collectors.toList()); + } + + // 手动任务优先执行 + for (SalesforceParam salesforceParam : salesforceParams) { + Future future = salesforceExecutor.execute(() -> { + try { + manualCreatedNewIdBatch(salesforceParam, bulkConnection); + } catch (Throwable throwable) { + log.error("salesforceExecutor error", throwable); + throw new RuntimeException(throwable); + } + }, salesforceParam.getBatch(), 1); + futures.add(future); + } + // 等待当前所有线程执行完成 + salesforceExecutor.waitForFutures(futures.toArray(new Future[]{})); + update.setDataWork(0); + } catch (InterruptedException e) { + throw e; + } catch (Throwable e) { + log.error("manualImmigration error", e); + throw new RuntimeException(e); + } finally { + if (isFull) { + update.setName(api); + update.setDataLock(0); + dataObjectService.updateById(update); + } + } + } + return null; + } + + @Override public void autoImmigration(SalesforceParam param, List> futures) throws Exception { QueryWrapper qw = new QueryWrapper<>(); @@ -420,6 +530,232 @@ public class DataImportServiceImpl implements DataImportService { dataBatchService.update(updateQw2); } + private void manualCreatedNewIdBatch(SalesforceParam param, BulkConnection bulkConnection) throws Exception { + String api = param.getApi(); + QueryWrapper dbQw = new QueryWrapper<>(); + dbQw.eq("api", api); + List list = dataFieldService.list(dbQw); + TimeUnit.MILLISECONDS.sleep(1); + + Date beginDate = param.getBeginCreateDate(); + Date endDate = param.getEndCreateDate(); + String beginDateStr = DateUtil.format(beginDate, "yyyy-MM-dd HH:mm:ss"); + String endDateStr = DateUtil.format(endDate, "yyyy-MM-dd HH:mm:ss"); + + //表内数据总量 + Integer count = customMapper.countBySQL(api, "where new_id is null and CreatedDate >= '" + beginDateStr + "' and CreatedDate < '" + endDateStr + "'"); + log.error("总Insert数据 count:{};-开始时间:{};-结束时间:{};-api:{};", count, beginDateStr, endDateStr, api); + if (count == 0) { + return; + } + + //批量插入2000一次 + int page = count%200 == 0 ? count/200 : (count/200) + 1; + for (int i = 0; i < page; i++) { + + List data = customMapper.listJsonObject("*", api, "new_id is null and CreatedDate >= '" + beginDateStr + "' and CreatedDate < '" + endDateStr + "' limit 200"); + int size = data.size(); + + log.info("执行api:{}, 执行page:{}, 执行size:{}", api, i+1, size); + List insertList = new ArrayList<>(); + + for (int j = 1; j <= size; j++) { + JSONObject account = new JSONObject(); + //找出sf对象必填字段,并且给默认值 + for (Map map : data) { + //给对象赋值 + for (DataField dataField : list) { + String field = dataField.getField(); + String reference_to = dataField.getReferenceTo(); + + if (!DataUtil.isUpdate(field) || (dataField.getIsCreateable() != null && !dataField.getIsCreateable())) { + continue; + } else if (StringUtils.isNotBlank(reference_to) && !"data_picklist".equals(reference_to)) { + if (!"null".equals(map.get(field)) && null != map.get(field) && !"OwnerId".equals(field) + || !"Owner_Type".equals(field)) { + //判断reference_to内是否包含User字符串 + if (reference_to.contains("User")) { + reference_to = "User"; + } + Map m = customMapper.getById("new_id", reference_to, String.valueOf(map.get(field))); + if (m != null && !m.isEmpty()) { + account.put(field, m.get("new_id")); + } + } + } else { + if (map.get(field) != null && StringUtils.isNotBlank(dataField.getSfType())) { + account.put(field, DataUtil.localDataToSfData(dataField.getSfType(), String.valueOf(map.get(field)))); + }else { + account.put(field, map.get(field)); + } + } + } + account.put("old_owner_id__c", map.get("OwnerId")); + account.put("old_sfdc_id__c", map.get("Id")); + } + + insertList.add(account); + if (i*200+j == count){ + break; + } + } + + try { + + //写入csv文件 + String fullPath = CsvConverterUtil.writeToCsv(insertList, UUID.randomUUID().toString()); + +// FileInputStream inputStream = new FileInputStream(fullPath); + + JobInfo salesforceInsertJob = createSalesforceJob(bulkConnection, api, OperationEnum.insert); + + List batchInfos = BulkUtil.createBatchesFromCSVFile(bulkConnection, salesforceInsertJob, fullPath); + + BulkUtil.closeJob(bulkConnection, salesforceInsertJob.getId()); + + BulkUtil.awaitCompletion(bulkConnection, salesforceInsertJob, batchInfos); + + checkResults(bulkConnection, salesforceInsertJob, batchInfos); + + +// BatchInfo insertBatch = bulkConnection.createJob(salesforceInsertJob,jsonString); + +// BatchInfo insertBatch = bulkConnection.createBatchFromStream(salesforceInsertJob,inputStream); +// +// closeJob(bulkConnection, insertBatch.getJobId()); + +// // 轮询直到批次完成 +// while (true) { +// BatchInfo batchInfo = bulkConnection.getBatchInfo(insertBatch.getJobId(), insertBatch.getId()); +// BatchStateEnum state = batchInfo.getState(); +// if (state == BatchStateEnum.Completed) { +// InputStream batchResultStream = bulkConnection.getBatchResultStream(insertBatch.getJobId(), insertBatch.getId()); +// List idColumns = CsvConverterUtil.extractIdColumn(batchResultStream); +// int index = 0; +// for (String id : idColumns) { +// List> maps = new ArrayList<>(); +// Map m = new HashMap<>(); +// m.put("key", "new_id"); +// m.put("value", id); +// maps.add(m); +// customMapper.updateById(api, maps, ids[index]); +// } +// break; +// } else if (state == BatchStateEnum.Failed) { +// throw new RuntimeException("Batch failed: " + batchInfo.getStateMessage()); +// } +// TimeUnit.SECONDS.sleep(10); //10秒检查一次 +// } +// +// String soql = "SELECT Id FROM "+ api +" WHERE CreatedDate >= '" + beginDate + "' AND CreatedDate <= '" + endDate + "'"; +// +// JobInfo salesforceQueryJob = createSalesforceJob(bulkConnection, api, OperationEnum.query); +// +// ByteArrayInputStream queryStream = new ByteArrayInputStream(soql.getBytes()); +// +// BatchInfo queryBatch = bulkConnection.createBatchFromStream(salesforceQueryJob, queryStream); +// +// while (true) { +// BatchInfo info = bulkConnection.getBatchInfo(queryBatch.getJobId(), queryBatch.getId()); +// if (info.getState() == BatchStateEnum.Completed) { +// InputStream batchResultStream = bulkConnection.getBatchResultStream(queryBatch.getJobId(), queryBatch.getId()); +// List idColumns = CsvConverterUtil.extractIdColumn(batchResultStream); +// Integer sfNum = idColumns.size(); +// +// UpdateWrapper updateQw = new UpdateWrapper<>(); +// updateQw.eq("name", api) +// .eq("sync_start_date", beginDate) +// .eq("sync_end_date", DateUtils.addSeconds(endDate, -1)) +// .set("target_sf_num", sfNum); +// dataBatchHistoryService.update(updateQw); +// +// UpdateWrapper updateQw2 = new UpdateWrapper<>(); +// updateQw2.eq("name", api) +// .eq("sync_start_date", beginDate) +// .eq("sync_end_date", endDate) +// .set("sf_add_num", sfNum); +// dataBatchService.update(updateQw2); +// +// break; +// }else if (info.getState() == BatchStateEnum.Failed) { +// throw new Exception("Query failed: " + info.getStateMessage()); +// } +// TimeUnit.SECONDS.sleep(10); //10秒检查一次 +// } + } catch (Exception e) { + log.error("manualCreatedNewId error api:{}", api, e); + throw e; + } + } + + } + + /** + * Gets the results of the operation and checks for errors. + */ + private void checkResults(BulkConnection connection, JobInfo job, + List batchInfoList) + throws AsyncApiException, IOException { + // batchInfoList was populated when batches were created and submitted + for (BatchInfo b : batchInfoList) { + CSVReader rdr = + new CSVReader(connection.getBatchResultStream(job.getId(), b.getId())); + List resultHeader = rdr.nextRecord(); + int resultCols = resultHeader.size(); + + List row; + while ((row = rdr.nextRecord()) != null) { + Map resultInfo = new HashMap(); + for (int i = 0; i < resultCols; i++) { + resultInfo.put(resultHeader.get(i), row.get(i)); + } + boolean success = Boolean.valueOf(resultInfo.get("Success")); + boolean created = Boolean.valueOf(resultInfo.get("Created")); + String id = resultInfo.get("Id"); + String error = resultInfo.get("Error"); + if (success && created) { + System.out.println("Created row with id " + id); + } else if (!success) { + System.out.println("Failed with error: " + error); + } + } + } + } + + /** + * 更新任务状态为完成 + * @param connection + * @param jobId + * @throws AsyncApiException + */ + private void closeJob(BulkConnection connection, String jobId) + throws AsyncApiException { + JobInfo job = new JobInfo(); + job.setId(jobId); + job.setState(JobStateEnum.Closed); + connection.updateJob(job); + } + + /** + * 创建任务 + * @param bulkConn + * @param objectName + * @param operation + * @return + * @throws AsyncApiException + */ + private static JobInfo createSalesforceJob(BulkConnection bulkConn, String objectName, OperationEnum operation) + throws AsyncApiException { + + JobInfo job = new JobInfo(); + job.setObject(objectName); + job.setOperation(operation); + job.setContentType(ContentType.CSV); // 使用 CSV 格式 + return bulkConn.createJob(job); + } + + + private void autoCreatedNewId(SalesforceParam param, PartnerConnection partnerConnection) throws Exception { String api = param.getApi(); QueryWrapper dbQw = new QueryWrapper<>(); diff --git a/src/main/java/com/celnet/datadump/service/impl/FileManagerServiceImpl.java b/src/main/java/com/celnet/datadump/service/impl/FileManagerServiceImpl.java index 8da5b0b..a0b44c9 100644 --- a/src/main/java/com/celnet/datadump/service/impl/FileManagerServiceImpl.java +++ b/src/main/java/com/celnet/datadump/service/impl/FileManagerServiceImpl.java @@ -211,7 +211,7 @@ public class FileManagerServiceImpl implements FileManagerService { maps.add(paramMap); } } catch (Exception e) { - e.printStackTrace(); + log.error("exception message", e); } Map paramMap = Maps.newHashMap(); paramMap.put("key", "is_dump"); @@ -326,7 +326,7 @@ public class FileManagerServiceImpl implements FileManagerService { try { response.close(); } catch (IOException e) { - e.printStackTrace(); + log.error("exception message", e); throw new RuntimeException("文件转换base64失败"); } } diff --git a/src/main/java/com/celnet/datadump/service/impl/FileServiceImpl.java b/src/main/java/com/celnet/datadump/service/impl/FileServiceImpl.java index 237ac2d..c1ab3ec 100644 --- a/src/main/java/com/celnet/datadump/service/impl/FileServiceImpl.java +++ b/src/main/java/com/celnet/datadump/service/impl/FileServiceImpl.java @@ -552,7 +552,7 @@ public class FileServiceImpl implements FileService { try { response.close(); } catch (IOException e) { - e.printStackTrace(); + log.error("exception message", e); } } try { @@ -704,7 +704,7 @@ public class FileServiceImpl implements FileService { try { response.close(); } catch (IOException e) { - e.printStackTrace(); + log.error("exception message", e); } } try { diff --git a/src/main/java/com/celnet/datadump/util/BulkUtil.java b/src/main/java/com/celnet/datadump/util/BulkUtil.java new file mode 100644 index 0000000..cf56f35 --- /dev/null +++ b/src/main/java/com/celnet/datadump/util/BulkUtil.java @@ -0,0 +1,209 @@ +package com.celnet.datadump.util; + +import com.sforce.async.*; +import com.sforce.soap.partner.PartnerConnection; +import com.sforce.ws.ConnectionException; +import com.sforce.ws.ConnectorConfig; + +import java.io.*; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class BulkUtil { + + public static void closeJob(BulkConnection connection, String jobId) + throws AsyncApiException { + JobInfo job = new JobInfo(); + job.setId(jobId); + job.setState(JobStateEnum.Closed); + connection.updateJob(job); + } + + + /** + * Wait for a job to complete by polling the Bulk API. + * + * @param connection + * BulkConnection used to check results. + * @param job + * The job awaiting completion. + * @param batchInfoList + * List of batches for this job. + * @throws AsyncApiException + */ + public static void awaitCompletion(BulkConnection connection, JobInfo job, + List batchInfoList) + throws AsyncApiException { + long sleepTime = 0L; + Set incomplete = new HashSet(); + for (BatchInfo bi : batchInfoList) { + incomplete.add(bi.getId()); + } + while (!incomplete.isEmpty()) { + try { + Thread.sleep(sleepTime); + } catch (InterruptedException e) {} + System.out.println("Awaiting results..." + incomplete.size()); + sleepTime = 10000L; + BatchInfo[] statusList = + connection.getBatchInfoList(job.getId()).getBatchInfo(); + for (BatchInfo b : statusList) { + if (b.getState() == BatchStateEnum.Completed + || b.getState() == BatchStateEnum.Failed) { + if (incomplete.remove(b.getId())) { + System.out.println("BATCH STATUS:\n" + b); + } + } + } + } + } + + /** + * Create a new job using the Bulk API. + * + * @param sobjectType + * The object type being loaded, such as "Account" + * @param connection + * BulkConnection used to create the new job. + * @return The JobInfo for the new job. + * @throws AsyncApiException + */ + public static JobInfo createJob(String sobjectType, BulkConnection connection) + throws AsyncApiException { + JobInfo job = new JobInfo(); + job.setObject(sobjectType); + job.setOperation(OperationEnum.insert); + job.setContentType(ContentType.CSV); + job = connection.createJob(job); + System.out.println(job); + return job; + } + + /** + * Create the BulkConnection used to call Bulk API operations. + */ + public static BulkConnection getBulkConnection(String userName, String password,String url) + throws ConnectionException, AsyncApiException { + ConnectorConfig partnerConfig = new ConnectorConfig(); + partnerConfig.setUsername(userName); + partnerConfig.setPassword(password); + partnerConfig.setAuthEndpoint(url); + // Creating the connection automatically handles login and stores + // the session in partnerConfig + new PartnerConnection(partnerConfig); + // When PartnerConnection is instantiated, a login is implicitly + // executed and, if successful, + // a valid session is stored in the ConnectorConfig instance. + // Use this key to initialize a BulkConnection: + ConnectorConfig config = new ConnectorConfig(); + config.setSessionId(partnerConfig.getSessionId()); + // The endpoint for the Bulk API service is the same as for the normal + // SOAP uri until the /Soap/ part. From here it's '/async/versionNumber' + String soapEndpoint = partnerConfig.getServiceEndpoint(); + String apiVersion = "56.0"; + String restEndpoint = soapEndpoint.substring(0, soapEndpoint.indexOf("Soap/")) + + "async/" + apiVersion; + config.setRestEndpoint(restEndpoint); + // This should only be false when doing debugging. + config.setCompression(true); + // Set this to true to see HTTP requests and responses on stdout + config.setTraceMessage(false); + BulkConnection connection = new BulkConnection(config); + return connection; + } + + /** + * Create and upload batches using a CSV file. + * The file into the appropriate size batch files. + * + * @param connection + * Connection to use for creating batches + * @param jobInfo + * Job associated with new batches + * @param csvFileName + * The source file for batch data + */ + public static List createBatchesFromCSVFile(BulkConnection connection, + JobInfo jobInfo, String csvFileName) + throws IOException, AsyncApiException { + List batchInfos = new ArrayList(); + BufferedReader rdr = new BufferedReader( + new InputStreamReader(new FileInputStream(csvFileName)) + ); + // read the CSV header row + byte[] headerBytes = (rdr.readLine() + "\n").getBytes("UTF-8"); + int headerBytesLength = headerBytes.length; + File tmpFile = File.createTempFile("bulkAPIInsert", ".csv"); + + // Split the CSV file into multiple batches + try { + FileOutputStream tmpOut = new FileOutputStream(tmpFile); + int maxBytesPerBatch = 10000000; // 10 million bytes per batch + int maxRowsPerBatch = 10000; // 10 thousand rows per batch + int currentBytes = 0; + int currentLines = 0; + String nextLine; + while ((nextLine = rdr.readLine()) != null) { + byte[] bytes = (nextLine + "\n").getBytes("UTF-8"); + // Create a new batch when our batch size limit is reached + if (currentBytes + bytes.length > maxBytesPerBatch + || currentLines > maxRowsPerBatch) { + createBatch(tmpOut, tmpFile, batchInfos, connection, jobInfo); + currentBytes = 0; + currentLines = 0; + } + if (currentBytes == 0) { + tmpOut = new FileOutputStream(tmpFile); + tmpOut.write(headerBytes); + currentBytes = headerBytesLength; + currentLines = 1; + } + tmpOut.write(bytes); + currentBytes += bytes.length; + currentLines++; + } + // Finished processing all rows + // Create a final batch for any remaining data + if (currentLines > 1) { + createBatch(tmpOut, tmpFile, batchInfos, connection, jobInfo); + } + } finally { + tmpFile.delete(); + } + return batchInfos; + } + + /** + * Create a batch by uploading the contents of the file. + * This closes the output stream. + * + * @param tmpOut + * The output stream used to write the CSV data for a single batch. + * @param tmpFile + * The file associated with the above stream. + * @param batchInfos + * The batch info for the newly created batch is added to this list. + * @param connection + * The BulkConnection used to create the new batch. + * @param jobInfo + * The JobInfo associated with the new batch. + */ + public static void createBatch(FileOutputStream tmpOut, File tmpFile, + List batchInfos, BulkConnection connection, JobInfo jobInfo) + throws IOException, AsyncApiException { + tmpOut.flush(); + tmpOut.close(); + FileInputStream tmpInputStream = new FileInputStream(tmpFile); + try { + BatchInfo batchInfo = + connection.createBatchFromStream(jobInfo, tmpInputStream); + System.out.println(batchInfo); + batchInfos.add(batchInfo); + + } finally { + tmpInputStream.close(); + } + } +} diff --git a/src/main/java/com/celnet/datadump/util/CsvConverterUtil.java b/src/main/java/com/celnet/datadump/util/CsvConverterUtil.java new file mode 100644 index 0000000..de85b86 --- /dev/null +++ b/src/main/java/com/celnet/datadump/util/CsvConverterUtil.java @@ -0,0 +1,330 @@ +package com.celnet.datadump.util; + +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.IoUtil; + +import cn.hutool.core.text.csv.CsvUtil; +import cn.hutool.core.text.csv.CsvWriteConfig; +import cn.hutool.core.text.csv.CsvWriter; +import cn.hutool.core.util.CharsetUtil; +import cn.hutool.json.JSONObject; +import com.opencsv.CSVReader; +import com.opencsv.exceptions.CsvException; +import org.apache.commons.csv.CSVFormat; +import org.apache.commons.csv.CSVPrinter; + +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.util.*; + +/** + * csv格式转换工具类 + */ +public class CsvConverterUtil { + + /** + * 将JSONObject(代表一行)或JSONArray(代表多行)写入CSV文件 + * @param jsonList JSON数据 + */ + public static String writeToCsv(List jsonList, String fileName) { + + // 1. 创建目标目录(不存在则创建) + File targetDir = FileUtil.mkdir("data-dump/dataFile"); + + // 2. 构建完整文件路径 + String fullPath = targetDir.getAbsolutePath() + File.separator + fileName + ".csv"; + + CsvWriter csvWriter = CsvUtil.getWriter(fullPath, CharsetUtil.CHARSET_GBK, false); + + String[] header = jsonList.get(0).keySet().toArray(new String[0]); + + // 2. 写入表头(必须使用 String[]) + csvWriter.writeHeaderLine(header); + + // 遍历数据列表 + for (JSONObject jsonObject : jsonList) { + // 按表头顺序获取值 + String[] row = new String[header.length]; + for (int i = 0; i < header.length; i++) { + // 将每个值转换为字符串(如果为null则转为空字符串) + Object value = jsonObject.get(header[i]); + row[i] = value == null ? "" : value.toString(); + } + csvWriter.writeLine(row); + } + + // 关闭writer(在try-with-resources中可省略,但这里我们显式关闭) + csvWriter.close(); + + return fullPath; + } + + + public static String exportToCsv(List> data, String fileName) throws IOException { + // 1. 创建目标目录(不存在则创建) + File targetDir = FileUtil.mkdir("data-dump/dataFile"); + + // 2. 构建完整文件路径 + String fullPath = targetDir.getAbsolutePath() + File.separator + fileName + ".csv"; + + CsvWriter csvWriter = CsvUtil.getWriter(fullPath, CharsetUtil.CHARSET_UTF_8, false); + + // 1. 提取表头(保持顺序) + Set headers = new LinkedHashSet<>(); + for (Map map : data) { + headers.addAll(map.keySet()); + } + String[] headerArray = headers.toArray(new String[0]); + + // 2. 写入表头(必须使用 String[]) + csvWriter.writeLine(headerArray); + + // 3. 写入数据行(需要将 Object 转换为 String) + for (Map map : data) { + // 按表头顺序构建行数据 + String[] row = new String[headerArray.length]; + for (int i = 0; i < headerArray.length; i++) { + Object value = map.get(headerArray[i]); + // 处理空值和特殊字符 + row[i] = convertToCsvValue(value); + } + csvWriter.writeLine(row); // 使用 String[] 参数 + } + + return fullPath; + } + + + + /** + * @Description: convert list> to csv + * @Param: list>,pathName + * @return: + */ + public static String saveOpenToDataDump(List> list,String fileName) throws IOException { + + // 1. 创建目标目录(不存在则创建) + File targetDir = FileUtil.mkdir("data-dump/dataFile"); + + // 2. 构建完整文件路径 + String fullPath = targetDir.getAbsolutePath() + File.separator + fileName + ".csv"; + + List headerList = new ArrayList<>(); + for (String s : list.get(0).keySet()) { + headerList.add(s); + } + String[] csvHeader = headerList.toArray(new String[headerList.size()]); + + FileWriter out = new FileWriter(fullPath); + + try (CSVPrinter printer = new CSVPrinter(out, CSVFormat.DEFAULT + .withHeader(csvHeader))) { + for(Map map:list) { + List valueList = new ArrayList<>(); + for(String s:headerList) + valueList.add(String.valueOf(map.get(s))); + String[] csvValue = valueList.toArray(new String[valueList.size()]); + printer.printRecord(csvValue); + } + } + + out.close(); + + return fullPath; + } + + + + /** + * 保存 CSV 文件到 data-dump/dataFile 目录 + * @param data 数据集合 + * @param fileName 文件名(无需后缀,自动添加.csv) + * @return 完整的文件路径 + */ + public static String saveToDataDump(List> data, String fileName) { + // 1. 创建目标目录(不存在则创建) + File targetDir = FileUtil.mkdir("data-dump/dataFile"); + + // 2. 构建完整文件路径 + String fullPath = targetDir.getAbsolutePath() + File.separator + fileName + ".csv"; + + // 3. 写入CSV文件 + try (CsvWriter csvWriter = new CsvWriter( + new File(fullPath), + CharsetUtil.CHARSET_UTF_8, // UTF-8编码 + false, // 非追加模式 + new CsvWriteConfig().setFieldSeparator(',') // 逗号分隔符 + )) { + // 1. 提取表头(保持顺序) + Set headers = new LinkedHashSet<>(); + for (Map map : data) { + headers.addAll(map.keySet()); + } + String[] headerArray = headers.toArray(new String[0]); + + // 2. 写入表头(必须使用 String[]) + csvWriter.writeLine(headerArray); + + // 3. 写入数据行(需要将 Object 转换为 String) + for (Map map : data) { + // 按表头顺序构建行数据 + String[] row = new String[headerArray.length]; + for (int i = 0; i < headerArray.length; i++) { + Object value = map.get(headerArray[i]); + // 处理空值和特殊字符 + row[i] = convertToCsvValue(value); + } + csvWriter.writeLine(row); // 使用 String[] 参数 + } + // 4. 释放资源并返回结果 + IoUtil.close(csvWriter); + } + return fullPath; + } + + public static InputStream convertListToCsv(List> data) { + if (data == null || data.isEmpty()) { + return null; + } + + // 使用 StringWriter 作为缓冲区 + StringWriter stringWriter = new StringWriter(); + CsvWriter csvWriter = CsvUtil.getWriter(stringWriter, CsvWriteConfig.defaultConfig()); + + // 1. 提取表头(保持顺序) + Set headers = new LinkedHashSet<>(); + for (Map map : data) { + headers.addAll(map.keySet()); + } + String[] headerArray = headers.toArray(new String[0]); + + // 2. 写入表头(必须使用 String[]) + csvWriter.writeLine(headerArray); + + // 3. 写入数据行(需要将 Object 转换为 String) + for (Map map : data) { + // 按表头顺序构建行数据 + String[] row = new String[headerArray.length]; + for (int i = 0; i < headerArray.length; i++) { + Object value = map.get(headerArray[i]); + // 处理空值和特殊字符 + row[i] = convertToCsvValue(value); + } + csvWriter.writeLine(row); // 使用 String[] 参数 + } + + // 4. 释放资源并返回结果 + IoUtil.close(csvWriter); + return new ByteArrayInputStream(csvWriter.toString().getBytes(StandardCharsets.UTF_8)); + } + + // 处理特殊值和空值 + private static String convertToCsvValue(Object value) { + if (value == null) { + return ""; + } + // Hutool 会自动处理逗号、引号等特殊字符 + return value.toString(); + } + + public static List extractIdColumn(InputStream inputStream) throws IOException, CsvException { + + List idList = new ArrayList<>(); + + try (CSVReader reader = new CSVReader(new InputStreamReader(inputStream))) { + // 读取CSV表头 + String[] headers = reader.readNext(); + int idIndex = -1; + + // 查找id列的索引位置 + for (int i = 0; i < headers.length; i++) { + if ("id".equalsIgnoreCase(headers[i].trim())) { + idIndex = i; + break; + } + } + + if (idIndex == -1) { + throw new IllegalArgumentException("CSV文件中未找到id列"); + } + + // 逐行读取数据 + String[] nextRecord; + while ((nextRecord = reader.readNext()) != null) { + if (idIndex < nextRecord.length) { + if (!"Id".equals(nextRecord[idIndex])){ + idList.add(nextRecord[idIndex]); + } + } + } + } + return idList; + } + + public static InputStream convertToCsvStream(List> data) throws IOException { + if (data == null || data.isEmpty()) { + return new ByteArrayInputStream(new byte[0]); + } + + // 获取所有列头(保持顺序) + Set headers = new LinkedHashSet<>(); + for (Map map : data) { + headers.addAll(map.keySet()); + } + List headerList = new ArrayList<>(headers); + + try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + Writer writer = new OutputStreamWriter(outputStream, StandardCharsets.UTF_8)) { + + // 写入CSV头 + writeCsvLine(writer, headerList); + + // 写入数据行 + for (Map row : data) { + List values = new ArrayList<>(); + for (String header : headerList) { + Object value = row.get(header); + values.add(value != null ? escapeCsv(value.toString()) : ""); + } + writeCsvLine(writer, values); + } + + writer.flush(); + return new ByteArrayInputStream(outputStream.toByteArray()); + } + } + + private static void writeCsvLine(Writer writer, List values) throws IOException { + if (values.isEmpty()) { + writer.write("\n"); + return; + } + + for (int i = 0; i < values.size(); i++) { + writer.write(values.get(i)); + if (i < values.size() - 1) { + writer.write(','); + } + } + writer.write('\n'); + } + + private static String escapeCsv(String value) { + if (value == null) { + return ""; + } + + // 检查是否需要转义(包含特殊字符) + boolean needsEscape = value.contains(",") + || value.contains("\"") + || value.contains("\n") + || value.contains("\r"); + + if (!needsEscape) { + return value; + } + + // 转义双引号并包裹整个字段 + return "\"" + value.replace("\"", "\"\"") + "\""; + } +} diff --git a/src/main/java/com/celnet/datadump/util/DataUtil.java b/src/main/java/com/celnet/datadump/util/DataUtil.java index 9160d42..f679e13 100644 --- a/src/main/java/com/celnet/datadump/util/DataUtil.java +++ b/src/main/java/com/celnet/datadump/util/DataUtil.java @@ -14,6 +14,7 @@ import com.sforce.soap.partner.Field; import com.sforce.soap.partner.sobject.SObject; import com.sforce.ws.bind.XmlObject; import com.sforce.ws.types.Time; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.map.CaseInsensitiveMap; import org.apache.commons.lang3.BooleanUtils; @@ -37,6 +38,7 @@ import java.util.*; * @description 数据处理工具 * @date 2022/11/16 */ +@Slf4j @Component public class DataUtil { @@ -407,7 +409,7 @@ public class DataUtil { try { return sdf.parse(data+"T08:00:00Z"); } catch (ParseException e) { - e.printStackTrace(); + log.error("exception message", e); } case "datetime": try { diff --git a/src/main/java/com/celnet/datadump/util/MD5Util.java b/src/main/java/com/celnet/datadump/util/MD5Util.java index b04be34..f985acb 100644 --- a/src/main/java/com/celnet/datadump/util/MD5Util.java +++ b/src/main/java/com/celnet/datadump/util/MD5Util.java @@ -1,5 +1,7 @@ package com.celnet.datadump.util; +import lombok.extern.slf4j.Slf4j; + import javax.crypto.Cipher; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; @@ -10,6 +12,7 @@ import java.security.NoSuchAlgorithmException; import java.security.spec.AlgorithmParameterSpec; import java.util.Base64; +@Slf4j public class MD5Util { /** 向量(同时拥有向量和密匙才能解密),此向量必须是8byte,多少都报错 */ @@ -58,7 +61,7 @@ public class MD5Util { System.out.println("解密后的字符:" + mt.decode(mt.encode(value))); System.out.println("字符串的MD5值:"+ getMD5Value(value)); } catch (Exception e) { - e.printStackTrace(); + log.error("exception message", e); } } diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 56d4b56..b5ec1f4 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -4,7 +4,9 @@ spring: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/cook?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true username: root - password: celnet@2025.bln +# password: celnet@2025.bln + password: root + mail: host: smtp.mxhichina.com port: 465 diff --git a/src/main/resources/mapper/CustomMapper.xml b/src/main/resources/mapper/CustomMapper.xml index afc2850..9190f1a 100644 --- a/src/main/resources/mapper/CustomMapper.xml +++ b/src/main/resources/mapper/CustomMapper.xml @@ -135,6 +135,18 @@ + +