From 689f536c08021e7551020aff1ad4eede7a90d9f5 Mon Sep 17 00:00:00 2001 From: xezzon Date: Thu, 12 Sep 2024 22:17:05 +0800 Subject: [PATCH 1/5] =?UTF-8?q?Delombok:=20=E9=81=BF=E5=85=8D=20maven-java?= =?UTF-8?q?doc-plugin=20=E6=97=A0=E6=B3=95=E8=AF=86=E5=88=AB=20onMethod=5F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/github/xezzon/geom/dict/DictRpcHandler.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/geom-spring-boot-starter/src/main/java/io/github/xezzon/geom/dict/DictRpcHandler.java b/geom-spring-boot-starter/src/main/java/io/github/xezzon/geom/dict/DictRpcHandler.java index 4eb30334..86c0cd3e 100644 --- a/geom-spring-boot-starter/src/main/java/io/github/xezzon/geom/dict/DictRpcHandler.java +++ b/geom-spring-boot-starter/src/main/java/io/github/xezzon/geom/dict/DictRpcHandler.java @@ -5,7 +5,6 @@ import io.github.xezzon.geom.dict.DictGrpc.DictStub; import io.grpc.stub.StreamObserver; import java.util.concurrent.CountDownLatch; -import lombok.Getter; import lombok.extern.slf4j.Slf4j; import net.devh.boot.grpc.client.inject.GrpcClient; import org.jetbrains.annotations.TestOnly; @@ -19,12 +18,16 @@ public class DictRpcHandler implements DictImporter, RpcTrait { @TestOnly - @Getter(onMethod_ = {@TestOnly}) private final CountDownLatch countDownLatch = new CountDownLatch(1); @GrpcClient("dict") private DictStub dictStub; + @TestOnly + public CountDownLatch getCountDownLatch() { + return this.countDownLatch; + } + @Override public void importDict(DictImportReqList reqList) { dictStub.importDict(reqList, new StreamObserver<>() { From 0c5a33e4cd88957a069a800353517bb77aa2a7f4 Mon Sep 17 00:00:00 2001 From: xezzon Date: Thu, 12 Sep 2024 22:53:56 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E9=83=A8=E7=BD=B2?= =?UTF-8?q?=E6=96=B9=E5=BC=8F=EF=BC=8C=E9=81=BF=E5=85=8D=E6=8E=A8=E9=80=81?= =?UTF-8?q?=E6=97=B6=E6=8A=A5=E9=94=99SCM=E3=80=81developers=E3=80=81depen?= =?UTF-8?q?dency.version=E6=9C=AA=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 之前的部署方式是 mvn deploy -pl,但是未包含根模块,所以继承不到对应信息。 现在更新为通过 maven-deploy-plugin 跳过不发布为 jar 包的模块。缺陷是不发布的模块仍然会被执行,延长发布时间。 --- .github/workflows/release.yml | 2 +- geom-service/pom.xml | 7 +++++++ pom.xml | 5 +++++ report-aggregate/pom.xml | 7 +++++++ 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d78b9f28..c944a2ef 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -28,7 +28,7 @@ jobs: - name: Set Version run: mvn -B versions:set -DnewVersion=$GITHUB_REF_NAME - name: Publish Java package - run: mvn -B deploy -pl geom-proto,geom-spring-boot-starter -P release -DskipTests=true + run: mvn -B deploy -P release -DskipTests=true env: MAVEN_USERNAME: ${{ vars.MAVEN_USERNAME }} MAVEN_CENTRAL_TOKEN: ${{ secrets.MAVEN_CENTRAL_TOKEN }} diff --git a/geom-service/pom.xml b/geom-service/pom.xml index 864dccaa..9997dbac 100644 --- a/geom-service/pom.xml +++ b/geom-service/pom.xml @@ -224,6 +224,13 @@ + + org.apache.maven.plugins + maven-deploy-plugin + + true + + diff --git a/pom.xml b/pom.xml index 317c2c73..f9b091f6 100644 --- a/pom.xml +++ b/pom.xml @@ -115,6 +115,11 @@ jacoco-maven-plugin ${jacoco.version} + + org.apache.maven.plugins + maven-deploy-plugin + 3.1.2 + diff --git a/report-aggregate/pom.xml b/report-aggregate/pom.xml index 4ff8b1c9..cbfb9a32 100644 --- a/report-aggregate/pom.xml +++ b/report-aggregate/pom.xml @@ -46,6 +46,13 @@ + + org.apache.maven.plugins + maven-deploy-plugin + + true + + From 4e0228ce386bf2d66fb65e89ec6d087bfb088c36 Mon Sep 17 00:00:00 2001 From: xezzon Date: Fri, 13 Sep 2024 00:16:41 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E8=A1=A5=E5=85=85=20BaseDAO=20=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- geom-spring-boot-starter/pom.xml | 18 +++++ .../xezzon/geom/common/jpa/BaseDAO.java | 5 +- .../github/xezzon/geom/TestApplication.java | 3 + .../xezzon/geom/common/jpa/BaseDAOTest.java | 75 +++++++++++++++++++ .../xezzon/geom/common/jpa/TestEntity.java | 30 ++++++++ .../xezzon/geom/common/jpa/TestEntityDAO.java | 33 ++++++++ .../geom/common/jpa/TestEntityRepository.java | 15 ++++ 7 files changed, 177 insertions(+), 2 deletions(-) create mode 100644 geom-spring-boot-starter/src/test/java/io/github/xezzon/geom/common/jpa/BaseDAOTest.java create mode 100644 geom-spring-boot-starter/src/test/java/io/github/xezzon/geom/common/jpa/TestEntity.java create mode 100644 geom-spring-boot-starter/src/test/java/io/github/xezzon/geom/common/jpa/TestEntityDAO.java create mode 100644 geom-spring-boot-starter/src/test/java/io/github/xezzon/geom/common/jpa/TestEntityRepository.java diff --git a/geom-spring-boot-starter/pom.xml b/geom-spring-boot-starter/pom.xml index 1f785f8e..12c3db57 100644 --- a/geom-spring-boot-starter/pom.xml +++ b/geom-spring-boot-starter/pom.xml @@ -90,5 +90,23 @@ h2 test + + org.mapstruct + mapstruct-processor + ${mapstruct.version} + compile + + + org.hibernate.orm + hibernate-jpamodelgen + test + + + com.querydsl + querydsl-apt + ${querydsl.version} + jakarta + test + diff --git a/geom-spring-boot-starter/src/main/java/io/github/xezzon/geom/common/jpa/BaseDAO.java b/geom-spring-boot-starter/src/main/java/io/github/xezzon/geom/common/jpa/BaseDAO.java index be086594..a8dc2245 100644 --- a/geom-spring-boot-starter/src/main/java/io/github/xezzon/geom/common/jpa/BaseDAO.java +++ b/geom-spring-boot-starter/src/main/java/io/github/xezzon/geom/common/jpa/BaseDAO.java @@ -57,14 +57,15 @@ public M get() { } public T partialUpdate(T target) { - T entity = this.get().getReferenceById(target.getId()); + T entity = this.get().findById(target.getId()) + .orElseThrow(); this.getCopier().copy(target, entity); this.get().save(entity); return entity; } public Page findAll(ODataQueryOption odata) { - return this.findAll(odata, BaseSpecs.TRUE(), Sort.unsorted()); + return this.findAll(odata, null, null); } protected Page findAll( diff --git a/geom-spring-boot-starter/src/test/java/io/github/xezzon/geom/TestApplication.java b/geom-spring-boot-starter/src/test/java/io/github/xezzon/geom/TestApplication.java index 4ff718d4..eaa3754e 100644 --- a/geom-spring-boot-starter/src/test/java/io/github/xezzon/geom/TestApplication.java +++ b/geom-spring-boot-starter/src/test/java/io/github/xezzon/geom/TestApplication.java @@ -1,14 +1,17 @@ package io.github.xezzon.geom; +import io.github.xezzon.geom.common.trait.ExcludeDbTrait; import io.github.xezzon.geom.dict.EnableDictScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Import; /** * @author xezzon */ @SpringBootApplication @EnableDictScan() +@Import(ExcludeDbTrait.class) public class TestApplication { public static void main(String[] args) { diff --git a/geom-spring-boot-starter/src/test/java/io/github/xezzon/geom/common/jpa/BaseDAOTest.java b/geom-spring-boot-starter/src/test/java/io/github/xezzon/geom/common/jpa/BaseDAOTest.java new file mode 100644 index 00000000..17d11ea1 --- /dev/null +++ b/geom-spring-boot-starter/src/test/java/io/github/xezzon/geom/common/jpa/BaseDAOTest.java @@ -0,0 +1,75 @@ +package io.github.xezzon.geom.common.jpa; + +import cn.hutool.core.util.RandomUtil; +import io.github.xezzon.geom.common.odata.ODataQueryOption; +import io.github.xezzon.geom.common.odata.ODataRequestParam; +import jakarta.annotation.Resource; +import java.util.Optional; +import java.util.UUID; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.domain.Page; + +/** + * @author xezzon + */ +@SpringBootTest +class BaseDAOTest { + + @Resource + private TestEntityDAO testEntityDAO; + @Resource + private TestEntityRepository repository; + + + @Test + void partialUpdate() { + TestEntity testEntity = new TestEntity(); + testEntity.setField1(RandomUtil.randomString(8)); + testEntity.setField2(RandomUtil.randomString(8)); + repository.save(testEntity); + TestEntity testEntity1 = new TestEntity(); + testEntity1.setId(testEntity.getId()); + testEntity1.setField1(RandomUtil.randomString(8)); + testEntityDAO.partialUpdate(testEntity1); + + Optional result = repository.findById(testEntity.getId()); + Assertions.assertTrue(result.isPresent()); + Assertions.assertEquals(testEntity1.getField1(), result.get().getField1()); + Assertions.assertEquals(testEntity.getField2(), result.get().getField2()); + } + + @Test + void findAll() { + final int loopTime = 16; + for (int i = 0; i < loopTime; i++) { + TestEntity testEntity = new TestEntity(); + if (RandomUtil.randomBoolean()) { + testEntity.setId(UUID.randomUUID().toString()); + } + testEntity.setField1(RandomUtil.randomString(8)); + testEntity.setField2(RandomUtil.randomString(8)); + repository.save(testEntity); + } + final int pageNum = 2; + final int pageSize = 2; + ODataRequestParam param = new ODataRequestParam(pageSize, pageSize * pageNum); + ODataQueryOption odata = param.into(); + Page page = testEntityDAO.findAll(odata); + Assertions.assertEquals(loopTime, page.getTotalElements()); + Assertions.assertEquals(pageSize, page.getContent().size()); + Assertions.assertEquals(pageSize, page.getSize()); + Assertions.assertEquals(pageNum, page.getNumber()); + + ODataQueryOption odata1 = ODataQueryOption.builder() + .top(pageSize) + .skip(pageNum * pageSize) + .build(); + Page page1 = testEntityDAO.findAll(odata1, BaseSpecs.FALSE(), null); + Assertions.assertEquals(0, page1.getTotalElements()); + Assertions.assertEquals(0, page1.getContent().size()); + Assertions.assertEquals(pageSize, page1.getSize()); + Assertions.assertEquals(pageNum, page1.getNumber()); + } +} diff --git a/geom-spring-boot-starter/src/test/java/io/github/xezzon/geom/common/jpa/TestEntity.java b/geom-spring-boot-starter/src/test/java/io/github/xezzon/geom/common/jpa/TestEntity.java new file mode 100644 index 00000000..eedbf5a2 --- /dev/null +++ b/geom-spring-boot-starter/src/test/java/io/github/xezzon/geom/common/jpa/TestEntity.java @@ -0,0 +1,30 @@ +package io.github.xezzon.geom.common.jpa; + +import io.github.xezzon.geom.common.constant.DatabaseConstant; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +/** + * @author xezzon + */ +@Getter +@Setter +@ToString +@Entity +@Table(name = "test_entity") +public class TestEntity implements IEntity { + + @Id + @Column(name = "id", nullable = false, updatable = false, length = DatabaseConstant.ID_LENGTH) + @IdGenerator + private String id; + @Column(name = "field1") + private String field1; + @Column(name = "field2") + private String field2; +} diff --git a/geom-spring-boot-starter/src/test/java/io/github/xezzon/geom/common/jpa/TestEntityDAO.java b/geom-spring-boot-starter/src/test/java/io/github/xezzon/geom/common/jpa/TestEntityDAO.java new file mode 100644 index 00000000..9500d5a0 --- /dev/null +++ b/geom-spring-boot-starter/src/test/java/io/github/xezzon/geom/common/jpa/TestEntityDAO.java @@ -0,0 +1,33 @@ +package io.github.xezzon.geom.common.jpa; + +import com.querydsl.core.types.dsl.EntityPathBase; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; +import org.springframework.stereotype.Repository; + +/** + * @author xezzon + */ +@Repository +public class TestEntityDAO extends BaseDAO { + + protected TestEntityDAO(TestEntityRepository repository) { + super(repository); + } + + @Override + public ICopier getCopier() { + return Copier.INSTANCE; + } + + @Override + protected EntityPathBase getQuery() { + return QTestEntity.testEntity; + } + + @Mapper + interface Copier extends ICopier { + + Copier INSTANCE = Mappers.getMapper(Copier.class); + } +} diff --git a/geom-spring-boot-starter/src/test/java/io/github/xezzon/geom/common/jpa/TestEntityRepository.java b/geom-spring-boot-starter/src/test/java/io/github/xezzon/geom/common/jpa/TestEntityRepository.java new file mode 100644 index 00000000..537591b1 --- /dev/null +++ b/geom-spring-boot-starter/src/test/java/io/github/xezzon/geom/common/jpa/TestEntityRepository.java @@ -0,0 +1,15 @@ +package io.github.xezzon.geom.common.jpa; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.stereotype.Repository; + +/** + * @author xezzon + */ +@Repository +public interface TestEntityRepository extends + JpaRepository, + JpaSpecificationExecutor { + +} From 562d9f09abcc340cee089b7937893a6a4b25133f Mon Sep 17 00:00:00 2001 From: xezzon Date: Fri, 13 Sep 2024 00:22:11 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E8=A1=A5=E5=85=85=20ResourceUtil=20?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../geom/common/util/ResourceUtilTest.java | 23 +++++++++++++++++++ .../src/test/resources/test.txt | 1 + 2 files changed, 24 insertions(+) create mode 100644 geom-spring-boot-starter/src/test/java/io/github/xezzon/geom/common/util/ResourceUtilTest.java create mode 100644 geom-spring-boot-starter/src/test/resources/test.txt diff --git a/geom-spring-boot-starter/src/test/java/io/github/xezzon/geom/common/util/ResourceUtilTest.java b/geom-spring-boot-starter/src/test/java/io/github/xezzon/geom/common/util/ResourceUtilTest.java new file mode 100644 index 00000000..2001b179 --- /dev/null +++ b/geom-spring-boot-starter/src/test/java/io/github/xezzon/geom/common/util/ResourceUtilTest.java @@ -0,0 +1,23 @@ +package io.github.xezzon.geom.common.util; + +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +/** + * @author xezzon + */ +class ResourceUtilTest { + + @Test + void getResourceFromClasspath() throws IOException { + Path resource = ResourceUtil.getResourceFromClasspath("test.txt"); + byte[] bytes = Files.readAllBytes(resource); + String string = new String(bytes); + Assertions.assertEquals("hello\n", string); + } +} diff --git a/geom-spring-boot-starter/src/test/resources/test.txt b/geom-spring-boot-starter/src/test/resources/test.txt new file mode 100644 index 00000000..ce013625 --- /dev/null +++ b/geom-spring-boot-starter/src/test/resources/test.txt @@ -0,0 +1 @@ +hello From 2a4c17e62c5e465ef4fbbeda1549f9371a8dc207 Mon Sep 17 00:00:00 2001 From: xezzon Date: Fri, 13 Sep 2024 00:38:26 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E8=A1=A5=E5=85=85=20RedisTemplateFactory?= =?UTF-8?q?=20=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../redis/RedisTemplateFactoryTest.java | 31 +++++++++++++++++++ .../src/test/resources/application.yml | 1 + 2 files changed, 32 insertions(+) create mode 100644 geom-spring-boot-starter/src/test/java/io/github/xezzon/geom/common/redis/RedisTemplateFactoryTest.java create mode 100644 geom-spring-boot-starter/src/test/resources/application.yml diff --git a/geom-spring-boot-starter/src/test/java/io/github/xezzon/geom/common/redis/RedisTemplateFactoryTest.java b/geom-spring-boot-starter/src/test/java/io/github/xezzon/geom/common/redis/RedisTemplateFactoryTest.java new file mode 100644 index 00000000..f5ab5377 --- /dev/null +++ b/geom-spring-boot-starter/src/test/java/io/github/xezzon/geom/common/redis/RedisTemplateFactoryTest.java @@ -0,0 +1,31 @@ +package io.github.xezzon.geom.common.redis; + +import static org.junit.jupiter.api.Assertions.*; + +import io.github.xezzon.geom.common.jpa.TestEntity; +import jakarta.annotation.Resource; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.redis.core.RedisTemplate; + +/** + * @author xezzon + */ +@SpringBootTest +class RedisTemplateFactoryTest { + + @Resource + private RedisTemplateFactory factory; + + @Test + void of() { + RedisTemplate redisTemplate = factory.of(TestEntity.class); + assertNotNull(redisTemplate); + } + + @Test + void genericRedisTemplate() { + RedisTemplate redisTemplate = factory.genericRedisTemplate(); + assertNotNull(redisTemplate); + } +} diff --git a/geom-spring-boot-starter/src/test/resources/application.yml b/geom-spring-boot-starter/src/test/resources/application.yml new file mode 100644 index 00000000..d4a1e589 --- /dev/null +++ b/geom-spring-boot-starter/src/test/resources/application.yml @@ -0,0 +1 @@ +REDIS_URL: localhost:6379