diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a654702..dbb1a95 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -7,4 +7,4 @@ on: jobs: build: - uses: valitydev/java-workflow/.github/workflows/maven-service-build.yml@v1 + uses: valitydev/java-workflow/.github/workflows/maven-service-build.yml@v3 diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index cfeee39..bcc177c 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -8,7 +8,7 @@ on: jobs: deploy: - uses: valitydev/java-workflow/.github/workflows/maven-service-deploy.yml@v1 + uses: valitydev/java-workflow/.github/workflows/maven-service-deploy.yml@v3 secrets: github-token: ${{ secrets.GITHUB_TOKEN }} mm-webhook-url: ${{ secrets.MATTERMOST_WEBHOOK_URL }} diff --git a/pom.xml b/pom.xml index 192249c..9a640dc 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ dev.vality service-parent-pom - 1.0.19 + 3.1.1 binbase @@ -29,8 +29,8 @@ postgres postgres binbase - 1.568-9362c08 - 1.4.3 + 1.655-5ca4f4a + 3.1.1 @@ -52,7 +52,7 @@ dev.vality cds-proto - 1.66-01353ce + 1.70-5227377 @@ -78,6 +78,10 @@ org.flywaydb flyway-core + + org.flywaydb + flyway-database-postgresql + com.zaxxer HikariCP @@ -95,25 +99,20 @@ 17.0.0 - javax.xml.bind - jaxb-api - 2.3.0 + jakarta.xml.bind + jakarta.xml.bind-api + 3.0.1 org.glassfish.jaxb jaxb-runtime - 2.3.0 + 3.0.2 runtime - - javax.activation - javax.activation-api - 1.2.0 - commons-io commons-io - 1.3.2 + 2.11.0 com.google.guava @@ -150,9 +149,9 @@ test - javax.xml.ws - jaxws-api - 2.3.0 + jakarta.xml.ws + jakarta.xml.ws-api + 3.0.0 test diff --git a/src/main/java/dev/vality/binbase/batch/BinBaseXmlData.java b/src/main/java/dev/vality/binbase/batch/BinBaseXmlData.java index 1577aa5..febcdca 100644 --- a/src/main/java/dev/vality/binbase/batch/BinBaseXmlData.java +++ b/src/main/java/dev/vality/binbase/batch/BinBaseXmlData.java @@ -4,7 +4,7 @@ import lombok.Data; import lombok.NoArgsConstructor; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlRootElement; @Data @NoArgsConstructor diff --git a/src/main/java/dev/vality/binbase/batch/listener/DefaultChunkListener.java b/src/main/java/dev/vality/binbase/batch/listener/DefaultChunkListener.java index 1eed799..dc991f9 100644 --- a/src/main/java/dev/vality/binbase/batch/listener/DefaultChunkListener.java +++ b/src/main/java/dev/vality/binbase/batch/listener/DefaultChunkListener.java @@ -16,7 +16,7 @@ public void beforeChunk(ChunkContext context) { @Override public void afterChunk(ChunkContext context) { - int readCount = context.getStepContext().getStepExecution().getReadCount(); + long readCount = context.getStepContext().getStepExecution().getReadCount(); if (readCount > 0 && readCount % loggingInterval == 0) { log.info("{} rows processed", readCount); } diff --git a/src/main/java/dev/vality/binbase/batch/writer/BinRangeWriter.java b/src/main/java/dev/vality/binbase/batch/writer/BinRangeWriter.java index 52d839e..795d030 100644 --- a/src/main/java/dev/vality/binbase/batch/writer/BinRangeWriter.java +++ b/src/main/java/dev/vality/binbase/batch/writer/BinRangeWriter.java @@ -4,10 +4,10 @@ import dev.vality.binbase.domain.BinData; import dev.vality.binbase.service.BinbaseService; import lombok.RequiredArgsConstructor; +import org.springframework.batch.item.Chunk; import org.springframework.batch.item.ItemWriter; import org.springframework.stereotype.Component; -import java.util.List; import java.util.Map; @Component @@ -17,7 +17,7 @@ public class BinRangeWriter implements ItemWriter private final BinbaseService binbaseService; @Override - public void write(List>> binDataRanges) throws Exception { + public void write(Chunk>> binDataRanges) throws Exception { binDataRanges.forEach(binDataRange -> binbaseService.saveRange(binDataRange.getKey(), binDataRange.getValue())); } diff --git a/src/main/java/dev/vality/binbase/config/BatchConfig.java b/src/main/java/dev/vality/binbase/config/BatchConfig.java index 08e07c2..c49b3d5 100644 --- a/src/main/java/dev/vality/binbase/config/BatchConfig.java +++ b/src/main/java/dev/vality/binbase/config/BatchConfig.java @@ -15,10 +15,10 @@ import lombok.RequiredArgsConstructor; import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; -import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; -import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; -import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; import org.springframework.batch.core.configuration.annotation.StepScope; +import org.springframework.batch.core.job.builder.JobBuilder; +import org.springframework.batch.core.repository.JobRepository; +import org.springframework.batch.core.step.builder.StepBuilder; import org.springframework.batch.item.file.FlatFileItemReader; import org.springframework.batch.item.file.MultiResourceItemReader; import org.springframework.batch.item.file.builder.MultiResourceItemReaderBuilder; @@ -29,17 +29,15 @@ import org.springframework.batch.item.support.builder.ClassifierCompositeItemProcessorBuilder; import org.springframework.batch.item.xml.StaxEventItemReader; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.Resource; import org.springframework.oxm.jaxb.Jaxb2Marshaller; +import org.springframework.transaction.PlatformTransactionManager; import java.util.Map; @Configuration -@EnableBatchProcessing -@EnableAutoConfiguration @RequiredArgsConstructor public class BatchConfig { @@ -49,8 +47,8 @@ public class BatchConfig { "isonumber", "url", "phone", "bin_length", "affiliation", "mark" }; - private final JobBuilderFactory jobBuilderFactory; - private final StepBuilderFactory stepBuilderFactory; + private final JobRepository jobRepository; + private final PlatformTransactionManager transactionManager; private final BinbaseService binbaseService; @Value("${batch.strict_mode}") @@ -115,9 +113,8 @@ public FlatFileItemReader buildBinBasePsbCsvReader() { @Bean public Job binBaseJob(Step step) { - return jobBuilderFactory.get("binBaseJob") - .flow(step) - .end() + return new JobBuilder("binBaseJob", jobRepository) + .start(step) .build(); } @@ -128,10 +125,11 @@ public ClassifierCompositeItemProcessor compositeProcessor() { .build(); } + @Bean - public Step step(MultiResourceItemReader multiResourceItemReader) { - return stepBuilderFactory.get("binBaseStep") - .>>chunk(1000) + public Step step(MultiResourceItemReader multiResourceItemReader) { + return new StepBuilder("binBaseStep", jobRepository) + .>>chunk(1000, transactionManager) .reader(multiResourceItemReader) .processor(compositeProcessor()) .writer(new BinRangeWriter(binbaseService)) diff --git a/src/main/java/dev/vality/binbase/endpoint/BinbaseServlet.java b/src/main/java/dev/vality/binbase/endpoint/BinbaseServlet.java index 911fb22..725a87d 100644 --- a/src/main/java/dev/vality/binbase/endpoint/BinbaseServlet.java +++ b/src/main/java/dev/vality/binbase/endpoint/BinbaseServlet.java @@ -4,8 +4,8 @@ import dev.vality.woody.thrift.impl.http.THServiceBuilder; import org.springframework.beans.factory.annotation.Autowired; -import javax.servlet.*; -import javax.servlet.annotation.WebServlet; +import jakarta.servlet.*; +import jakarta.servlet.annotation.WebServlet; import java.io.IOException; @WebServlet("/v1/binbase") diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 907e0d2..11005bb 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,16 +1,16 @@ server: - port: '@server.port@' + port: ${server.port} spring: application: - name: '@name@' - description: '@description@' + name: ${name} + description: ${description} datasource: type: com.zaxxer.hikari.HikariDataSource driver-class-name: org.postgresql.Driver - url: '@db.url@' - username: '@db.user@' - password: '@db.password@' + url: ${db.url} + username: ${db.user} + password: ${db.password} batch: jdbc: initialize-schema: always @@ -22,11 +22,8 @@ batch: management: server: - port: '@management.port@' + port: ${management.port} metrics: - export: - prometheus: - enabled: false tags: application: wb-list-manager endpoint: @@ -40,6 +37,10 @@ management: web: exposure: include: health,info,prometheus + prometheus: + metrics: + export: + enabled: false client: cds: diff --git a/src/test/java/dev/vality/binbase/batch/BatchUploadTest.java b/src/test/java/dev/vality/binbase/batch/BatchUploadTest.java index ea6d868..3335839 100644 --- a/src/test/java/dev/vality/binbase/batch/BatchUploadTest.java +++ b/src/test/java/dev/vality/binbase/batch/BatchUploadTest.java @@ -2,7 +2,12 @@ import dev.vality.binbase.config.PostgresqlTest; import dev.vality.binbase.domain.CountryCode; -import dev.vality.damsel.binbase.*; +import dev.vality.damsel.binbase.BinNotFound; +import dev.vality.damsel.binbase.BinbaseSrv; +import dev.vality.damsel.binbase.CardType; +import dev.vality.damsel.binbase.Last; +import dev.vality.damsel.binbase.Reference; +import dev.vality.damsel.binbase.ResponseData; import dev.vality.woody.thrift.impl.http.THSpawnClientBuilder; import org.apache.thrift.TException; import org.junit.jupiter.api.BeforeEach; @@ -14,7 +19,10 @@ import java.net.URI; import java.net.URISyntaxException; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; diff --git a/src/test/java/dev/vality/binbase/config/PostgresqlTest.java b/src/test/java/dev/vality/binbase/config/PostgresqlTest.java index f01a49e..14904a6 100644 --- a/src/test/java/dev/vality/binbase/config/PostgresqlTest.java +++ b/src/test/java/dev/vality/binbase/config/PostgresqlTest.java @@ -9,6 +9,6 @@ @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) -@PostgresqlTestcontainerSingleton +@PostgresqlTestcontainerSingleton(truncateTables = false) public @interface PostgresqlTest { }