diff --git a/.mvn/wrapper/MavenWrapperDownloader.java b/.mvn/wrapper/MavenWrapperDownloader.java deleted file mode 100644 index b901097..0000000 --- a/.mvn/wrapper/MavenWrapperDownloader.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 2007-present the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import java.net.*; -import java.io.*; -import java.nio.channels.*; -import java.util.Properties; - -public class MavenWrapperDownloader { - - private static final String WRAPPER_VERSION = "0.5.6"; - /** - * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. - */ - private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" - + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; - - /** - * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to - * use instead of the default one. - */ - private static final String MAVEN_WRAPPER_PROPERTIES_PATH = - ".mvn/wrapper/maven-wrapper.properties"; - - /** - * Path where the maven-wrapper.jar will be saved to. - */ - private static final String MAVEN_WRAPPER_JAR_PATH = - ".mvn/wrapper/maven-wrapper.jar"; - - /** - * Name of the property which should be used to override the default download url for the wrapper. - */ - private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; - - public static void main(String args[]) { - System.out.println("- Downloader started"); - File baseDirectory = new File(args[0]); - System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); - - // If the maven-wrapper.properties exists, read it and check if it contains a custom - // wrapperUrl parameter. - File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); - String url = DEFAULT_DOWNLOAD_URL; - if(mavenWrapperPropertyFile.exists()) { - FileInputStream mavenWrapperPropertyFileInputStream = null; - try { - mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); - Properties mavenWrapperProperties = new Properties(); - mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); - url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); - } catch (IOException e) { - System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); - } finally { - try { - if(mavenWrapperPropertyFileInputStream != null) { - mavenWrapperPropertyFileInputStream.close(); - } - } catch (IOException e) { - // Ignore ... - } - } - } - System.out.println("- Downloading from: " + url); - - File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); - if(!outputFile.getParentFile().exists()) { - if(!outputFile.getParentFile().mkdirs()) { - System.out.println( - "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); - } - } - System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); - try { - downloadFileFromURL(url, outputFile); - System.out.println("Done"); - System.exit(0); - } catch (Throwable e) { - System.out.println("- Error downloading"); - e.printStackTrace(); - System.exit(1); - } - } - - private static void downloadFileFromURL(String urlString, File destination) throws Exception { - if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { - String username = System.getenv("MVNW_USERNAME"); - char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); - Authenticator.setDefault(new Authenticator() { - @Override - protected PasswordAuthentication getPasswordAuthentication() { - return new PasswordAuthentication(username, password); - } - }); - } - URL website = new URL(urlString); - ReadableByteChannel rbc; - rbc = Channels.newChannel(website.openStream()); - FileOutputStream fos = new FileOutputStream(destination); - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); - fos.close(); - rbc.close(); - } - -} diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 2cc7d4a..0000000 Binary files a/.mvn/wrapper/maven-wrapper.jar and /dev/null differ diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties index d58dfb7..c0bcafe 100644 --- a/.mvn/wrapper/maven-wrapper.properties +++ b/.mvn/wrapper/maven-wrapper.properties @@ -1,19 +1,3 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -wrapperVersion=3.3.2 +wrapperVersion=3.3.4 distributionType=only-script -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.11/apache-maven-3.9.11-bin.zip diff --git a/README.md b/README.md index 38363cc..0091d6a 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ Persistence/Search: Test: - Unit/integration with JUnit 5, Mockito and Spring Test -- Tests with Spock Framework (Groovy 4, Spock 2) +- Tests with Spock Framework (Groovy 5, Spock 2.4) - e2e with Selenide, fixtures. default data generated using Spring - Load test with Gatling/Scala - Architecture tests using ArchUnit diff --git a/common/pom.xml b/common/pom.xml index 4d71608..aece4b8 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -64,33 +64,26 @@ provided - com.fasterxml.jackson.core + tools.jackson.core jackson-databind true provided - - - com.fasterxml.jackson.datatype - jackson-datatype-jsr310 - true - provided + 3.0.3 - - com.github.spotbugs - spotbugs-maven-plugin - - ../spot-bugs.filter-exclude.xml - - org.apache.maven.plugins - maven-checkstyle-plugin + maven-compiler-plugin - ../checkstyle.xml + + + org.projectlombok + lombok + + diff --git a/common/src/main/java/gt/common/test/TestUtil.java b/common/src/main/java/gt/common/test/TestUtil.java index a3d280f..d94d6c9 100644 --- a/common/src/main/java/gt/common/test/TestUtil.java +++ b/common/src/main/java/gt/common/test/TestUtil.java @@ -1,12 +1,8 @@ package gt.common.test; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import org.springframework.web.bind.annotation.GetMapping; import java.io.File; -import java.io.IOException; import java.net.URISyntaxException; import java.net.URL; @@ -26,23 +22,4 @@ public static File fileFromClassPath(String name) { throw new IllegalArgumentException(e); } } - - public static byte[] convertObjectToJsonBytes(Object object) - throws IOException { - ObjectMapper mapper = new ObjectMapper(); - mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); - - JavaTimeModule module = new JavaTimeModule(); - mapper.registerModule(module); - - return mapper.writeValueAsBytes(object); - } - - public static byte[] createByteArray(int size, String data) { - byte[] byteArray = new byte[size]; - for (int i = 0; i < size; i++) { - byteArray[i] = Byte.parseByte(data, 2); - } - return byteArray; - } } diff --git a/content-checker/content-checker-service-model/pom.xml b/content-checker/content-checker-service-model/pom.xml index dfb1442..b979760 100644 --- a/content-checker/content-checker-service-model/pom.xml +++ b/content-checker/content-checker-service-model/pom.xml @@ -30,10 +30,15 @@ - com.github.spotbugs - spotbugs-maven-plugin + org.apache.maven.plugins + maven-compiler-plugin - ../../spot-bugs.filter-exclude.xml + + + org.projectlombok + lombok + + diff --git a/content-checker/content-checker-service/pom.xml b/content-checker/content-checker-service/pom.xml index e9d5482..c8e9eb2 100644 --- a/content-checker/content-checker-service/pom.xml +++ b/content-checker/content-checker-service/pom.xml @@ -27,7 +27,7 @@ org.springframework.boot - spring-boot-starter-web + spring-boot-starter-webmvc org.springdoc @@ -35,18 +35,24 @@ + + org.springframework.boot + spring-boot-micrometer-tracing-brave + org.springframework.boot spring-boot-starter-actuator - io.micrometer - micrometer-tracing-bridge-brave + org.springframework.boot + spring-boot-starter-zipkin - io.zipkin.reporter2 - zipkin-reporter-brave + io.micrometer + micrometer-tracing-bridge-brave + + org.springframework.boot spring-boot-starter-artemis @@ -57,23 +63,17 @@ true provided - - org.springdoc - springdoc-openapi-starter-webmvc-ui - ${springdoc-openapi-ui.version} - true - org.springframework.boot - spring-boot-starter-test + spring-boot-starter-webmvc-test test - ${build.profile}-${artifactId}-${project.version} + ${artifactId}-${project.version} spring-boot:run @@ -85,6 +85,24 @@ true + + + org.projectlombok + lombok + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + + org.projectlombok + lombok + + diff --git a/content-checker/content-checker-service/src/main/java/gt/contentchecker/JMSConfig.java b/content-checker/content-checker-service/src/main/java/gt/contentchecker/JMSConfig.java index 947c89f..4c65ca6 100644 --- a/content-checker/content-checker-service/src/main/java/gt/contentchecker/JMSConfig.java +++ b/content-checker/content-checker-service/src/main/java/gt/contentchecker/JMSConfig.java @@ -1,13 +1,13 @@ package gt.contentchecker; import jakarta.jms.ConnectionFactory; -import org.springframework.boot.autoconfigure.jms.DefaultJmsListenerContainerFactoryConfigurer; +import org.springframework.boot.jms.autoconfigure.DefaultJmsListenerContainerFactoryConfigurer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jms.annotation.EnableJms; import org.springframework.jms.config.DefaultJmsListenerContainerFactory; import org.springframework.jms.config.JmsListenerContainerFactory; -import org.springframework.jms.support.converter.MappingJackson2MessageConverter; +import org.springframework.jms.support.converter.JacksonJsonMessageConverter; import org.springframework.jms.support.converter.MessageConverter; import org.springframework.jms.support.converter.MessageType; @@ -25,7 +25,7 @@ public JmsListenerContainerFactory myFactory(ConnectionFactory connectionFact @Bean public MessageConverter jacksonJmsMessageConverter() { - var converter = new MappingJackson2MessageConverter(); + var converter = new JacksonJsonMessageConverter(); converter.setTargetType(MessageType.TEXT); converter.setTypeIdPropertyName("_type"); return converter; diff --git a/content-checker/content-checker-service/src/main/resources/application-default.yml b/content-checker/content-checker-service/src/main/resources/application-default.yml deleted file mode 100644 index e69de29..0000000 diff --git a/content-checker/content-checker-service/src/main/resources/application.yml b/content-checker/content-checker-service/src/main/resources/application.yml index d507af1..bd54085 100644 --- a/content-checker/content-checker-service/src/main/resources/application.yml +++ b/content-checker/content-checker-service/src/main/resources/application.yml @@ -22,9 +22,11 @@ management: tracing: sampling: probability: 1.0 - zipkin: - tracing: - endpoint: http://${ZIPKIN_HOST:localhost}:${ZIPKIN_PORT:9411}/api/v2/spans health: jms: enabled: true + zipkin: + export: + tracing: + endpoint: http://${ZIPKIN_HOST:localhost}:${ZIPKIN_PORT:9411}/api/v2/spans + diff --git a/email/email-service-api/pom.xml b/email/email-service-api/pom.xml index 1c6a0e3..60eae7d 100644 --- a/email/email-service-api/pom.xml +++ b/email/email-service-api/pom.xml @@ -33,4 +33,21 @@ + + + + org.apache.maven.plugins + maven-compiler-plugin + + + + org.projectlombok + lombok + + + + + + + diff --git a/email/email-service/pom.xml b/email/email-service/pom.xml index 434f4a1..6be9dff 100755 --- a/email/email-service/pom.xml +++ b/email/email-service/pom.xml @@ -14,7 +14,7 @@ ${project.parent.version} - 2025.0.0 + 2025.1.0 @@ -29,7 +29,7 @@ org.springframework.boot - spring-boot-starter-web + spring-boot-starter-webmvc org.springframework.boot @@ -45,18 +45,24 @@ springdoc-openapi-starter-webmvc-ui + + org.springframework.boot + spring-boot-micrometer-tracing-brave + org.springframework.boot spring-boot-starter-actuator - io.micrometer - micrometer-tracing-bridge-brave + org.springframework.boot + spring-boot-starter-zipkin - io.zipkin.reporter2 - zipkin-reporter-brave + io.micrometer + micrometer-tracing-bridge-brave + + org.projectlombok @@ -69,7 +75,12 @@ org.springframework.boot - spring-boot-starter-test + spring-boot-starter-mail-test + test + + + org.springframework.boot + spring-boot-starter-webmvc-test test @@ -85,7 +96,7 @@ org.testcontainers - junit-jupiter + testcontainers-junit-jupiter @@ -104,7 +115,7 @@ - ${build.profile}-${artifactId}-${project.version} + ${artifactId}-${project.version} spring-boot:run @@ -115,17 +126,39 @@ true + + + org.projectlombok + lombok + + - org.springframework.cloud - spring-cloud-contract-maven-plugin - true + org.apache.maven.plugins + maven-compiler-plugin - gt.mail.BaseTestCloudContract - JUNIT5 + + + org.projectlombok + lombok + + + + + + + + + + + + + + + com.github.spotbugs spotbugs-maven-plugin diff --git a/email/email-service/src/main/resources/application.yml b/email/email-service/src/main/resources/application.yml index 73e718c..e7b3da1 100755 --- a/email/email-service/src/main/resources/application.yml +++ b/email/email-service/src/main/resources/application.yml @@ -6,15 +6,17 @@ spring: port: ${MAILHOG_PORT:1025} username: password: - + web: + error: + include-stacktrace: never + include-exception: true + include-binding-errors: always + include-message: always +logging: server: port: 8085 - error: - include-stacktrace: never - include-exception: true - include-binding-errors: always - include-message: always -logging: + + level: org.springframework.web: INFO ROOT: WARN @@ -25,7 +27,6 @@ management: sampling: probability: 1.0 zipkin: - tracing: - endpoint: http://${ZIPKIN_HOST:localhost}:${ZIPKIN_PORT:9411}/api/v2/spans - - + export: + tracing: + endpoint: http://${ZIPKIN_HOST:localhost}:${ZIPKIN_PORT:9411}/api/v2/spans diff --git a/email/email-service/src/test/java/gt/mail/web/rest/EmailResourceIT.java b/email/email-service/src/test/java/gt/mail/web/rest/EmailResourceIT.java index f2b74bf..ceda93c 100644 --- a/email/email-service/src/test/java/gt/mail/web/rest/EmailResourceIT.java +++ b/email/email-service/src/test/java/gt/mail/web/rest/EmailResourceIT.java @@ -2,8 +2,8 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc; import org.springframework.http.MediaType; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.web.servlet.MockMvc; diff --git a/email/email-service/src/test/java/gt/mail/web/rest/HelloResourceIT.java b/email/email-service/src/test/java/gt/mail/web/rest/HelloResourceIT.java index fd24e21..5f5bd28 100755 --- a/email/email-service/src/test/java/gt/mail/web/rest/HelloResourceIT.java +++ b/email/email-service/src/test/java/gt/mail/web/rest/HelloResourceIT.java @@ -2,8 +2,8 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; diff --git a/main-app/main-orm-jooq/pom.xml b/main-app/main-orm-jooq/pom.xml index c832db2..b75edbc 100644 --- a/main-app/main-orm-jooq/pom.xml +++ b/main-app/main-orm-jooq/pom.xml @@ -14,7 +14,7 @@ ${project.parent.version} - 6.5.7 + 7.0.0 @@ -101,7 +101,7 @@ hibernate.implicit_naming_strategy - org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy + org.springframework.boot.hibernate.SpringImplicitNamingStrategy diff --git a/main-app/main-orm/pom.xml b/main-app/main-orm/pom.xml index a3e8d30..3fd189d 100644 --- a/main-app/main-orm/pom.xml +++ b/main-app/main-orm/pom.xml @@ -14,7 +14,7 @@ yyyyMMddHHmmss - 6.2.15 + 7.0.2 @@ -50,21 +50,6 @@ spring-data-commons true - - com.querydsl - querydsl-apt - ${querydsl.version} - true - jakarta - - - com.querydsl - querydsl-jpa - ${querydsl.version} - jakarta - true - - jakarta.validation jakarta.validation-api @@ -126,23 +111,16 @@ - - com.github.spotbugs - spotbugs-maven-plugin - - ../../spot-bugs.filter-exclude.xml - - org.apache.maven.plugins - maven-checkstyle-plugin + maven-compiler-plugin - ../../checkstyle.xml - - - ${project.build.sourceDirectory} - - + + + org.projectlombok + lombok + + diff --git a/main-app/main-orm/src/main/java/gt/app/domain/AppUser.java b/main-app/main-orm/src/main/java/gt/app/domain/AppUser.java index 71762f5..42e489d 100644 --- a/main-app/main-orm/src/main/java/gt/app/domain/AppUser.java +++ b/main-app/main-orm/src/main/java/gt/app/domain/AppUser.java @@ -9,13 +9,18 @@ import org.hibernate.annotations.JdbcTypeCode; import org.hibernate.type.SqlTypes; +import java.io.Serial; +import java.io.Serializable; import java.util.UUID; @Entity @Getter @Setter @Table(name = "APP_USER") -public class AppUser { +public class AppUser implements Serializable { + + @Serial + private static final long serialVersionUID = -420530763778423332L; @Id @JdbcTypeCode(SqlTypes.BINARY) diff --git a/main-app/main-orm/src/main/java/gt/app/domain/Article.java b/main-app/main-orm/src/main/java/gt/app/domain/Article.java index a00fbfc..aa8bf43 100644 --- a/main-app/main-orm/src/main/java/gt/app/domain/Article.java +++ b/main-app/main-orm/src/main/java/gt/app/domain/Article.java @@ -6,6 +6,7 @@ import lombok.Getter; import lombok.Setter; +import java.io.Serial; import java.io.Serializable; import java.util.ArrayList; import java.util.HashSet; @@ -16,6 +17,8 @@ @Getter @Setter public class Article extends BaseAuditingEntity implements Serializable { + @Serial + private static final long serialVersionUID = -420530763778423324L; @NotEmpty private String title; diff --git a/main-app/main-orm/src/main/java/gt/app/domain/Comment.java b/main-app/main-orm/src/main/java/gt/app/domain/Comment.java index 1c3c49b..cc35f1c 100644 --- a/main-app/main-orm/src/main/java/gt/app/domain/Comment.java +++ b/main-app/main-orm/src/main/java/gt/app/domain/Comment.java @@ -6,11 +6,16 @@ import jakarta.persistence.JoinColumn; import lombok.Data; +import java.io.Serial; +import java.io.Serializable; import java.util.Objects; @Entity @Data -public class Comment extends BaseAuditingEntity { +public class Comment extends BaseAuditingEntity implements Serializable { + @Serial + private static final long serialVersionUID = -420530763778423311L; + private String content; @Enumerated(EnumType.STRING) diff --git a/main-app/main-orm/src/main/java/gt/app/domain/ReceivedFile.java b/main-app/main-orm/src/main/java/gt/app/domain/ReceivedFile.java index 24043b5..ac4729b 100644 --- a/main-app/main-orm/src/main/java/gt/app/domain/ReceivedFile.java +++ b/main-app/main-orm/src/main/java/gt/app/domain/ReceivedFile.java @@ -10,6 +10,8 @@ import org.hibernate.annotations.JdbcTypeCode; import org.hibernate.type.SqlTypes; +import java.io.Serial; +import java.io.Serializable; import java.time.Instant; import java.util.UUID; @@ -17,7 +19,10 @@ @Getter @Setter @NoArgsConstructor -public class ReceivedFile { +public class ReceivedFile implements Serializable { + + @Serial + private static final long serialVersionUID = -420530763778423322L; @Id @JdbcTypeCode(SqlTypes.CHAR) diff --git a/main-app/main-orm/src/main/resources/liquibase-jpa-diff.properties b/main-app/main-orm/src/main/resources/liquibase-jpa-diff.properties index ab39387..3bab61e 100644 --- a/main-app/main-orm/src/main/resources/liquibase-jpa-diff.properties +++ b/main-app/main-orm/src/main/resources/liquibase-jpa-diff.properties @@ -5,9 +5,9 @@ driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/seedapp?allowPublicKeyRetrieval=true username=root password=password -referenceUrl=hibernate:spring:gt.app.domain?dialect=org.hibernate.dialect.MySQLDialect&hibernate.physical_naming_strategy=gt.app.hibernate.PrefixedNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy +referenceUrl=hibernate:spring:gt.app.domain?dialect=org.hibernate.dialect.MySQLDialect&hibernate.physical_naming_strategy=gt.app.hibernate.PrefixedNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.hibernate.SpringImplicitNamingStrategy -#referenceUrl=hibernate:spring:gt.app.domain?dialect=${liquibase-plugin.hibernate-dialect}&hibernate.physical_naming_strategy=org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy +#referenceUrl=hibernate:spring:gt.app.domain?dialect=${liquibase-plugin.hibernate-dialect}&hibernate.physical_naming_strategy=org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.hibernate.SpringImplicitNamingStrategy ## the default naming strategies are configured here: org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties.Naming.applyNamingStrategies ## we have to map the same for liquibase so that it will generate the column/tables that's compatible with Spring-Data-JPA diff --git a/main-app/main-webapp/pom.xml b/main-app/main-webapp/pom.xml index 5741c64..9616830 100644 --- a/main-app/main-webapp/pom.xml +++ b/main-app/main-webapp/pom.xml @@ -63,8 +63,8 @@ spring-boot-starter-data-jpa - org.liquibase - liquibase-core + org.springframework.boot + spring-boot-starter-liquibase org.springframework.boot @@ -75,17 +75,21 @@ spring-cloud-starter-openfeign + + org.springframework.boot + spring-boot-micrometer-tracing-brave + org.springframework.boot spring-boot-starter-actuator - io.micrometer - micrometer-tracing-bridge-brave + org.springframework.boot + spring-boot-starter-zipkin - io.zipkin.reporter2 - zipkin-reporter-brave + io.micrometer + micrometer-tracing-bridge-brave io.github.openfeign @@ -98,7 +102,7 @@ org.springframework.boot - spring-boot-starter-web + spring-boot-starter-webmvc org.springframework.boot @@ -116,10 +120,6 @@ org.springframework.boot spring-boot-starter-websocket - - com.querydsl - querydsl-jpa - commons-io commons-io @@ -142,11 +142,11 @@ org.springframework.boot - spring-boot-starter-oauth2-client + spring-boot-starter-security-oauth2-client org.springframework.boot - spring-boot-starter-oauth2-resource-server + spring-boot-starter-security-oauth2-resource-server @@ -178,11 +178,6 @@ ${springdoc-openapi-ui.version} true - - org.springframework.boot - spring-boot-devtools - true - org.webjars @@ -208,13 +203,32 @@ org.springframework.boot - spring-boot-starter-test + spring-boot-starter-data-jpa-test + test + + + org.springframework.boot + spring-boot-starter-liquibase-test + test + + + org.springframework.boot + spring-boot-starter-security-test + test + + + org.springframework.boot + spring-boot-starter-thymeleaf-test + test + + + org.springframework.boot + spring-boot-starter-webmvc-test test org.springframework.cloud spring-cloud-starter-contract-stub-runner - test @@ -255,12 +269,12 @@ org.testcontainers - junit-jupiter + testcontainers-junit-jupiter test org.testcontainers - mysql + testcontainers-mysql true test @@ -268,9 +282,9 @@ io.hypersistence - hypersistence-utils-hibernate-63 + hypersistence-utils-hibernate-71 test - 3.8.3 + 3.13.3 com.github.gavlyukovskiy @@ -324,7 +338,7 @@ - ${build.profile}-${artifactId}-${project.version} + ${artifactId}-${project.version} spring-boot:run diff --git a/main-app/main-webapp/src/main/java/gt/app/DataCreator.java b/main-app/main-webapp/src/main/java/gt/app/DataCreator.java index d2c39de..ddbd59a 100644 --- a/main-app/main-webapp/src/main/java/gt/app/DataCreator.java +++ b/main-app/main-webapp/src/main/java/gt/app/DataCreator.java @@ -9,7 +9,6 @@ import gt.app.modules.user.UserService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Profile; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; @@ -19,7 +18,6 @@ import java.util.stream.Stream; @Component -@Profile({"local", "test"}) @RequiredArgsConstructor @Slf4j public class DataCreator { diff --git a/main-app/main-webapp/src/main/java/gt/app/config/JMSConfig.java b/main-app/main-webapp/src/main/java/gt/app/config/JMSConfig.java index a7a43b7..59ff19c 100644 --- a/main-app/main-webapp/src/main/java/gt/app/config/JMSConfig.java +++ b/main-app/main-webapp/src/main/java/gt/app/config/JMSConfig.java @@ -1,19 +1,20 @@ package gt.app.config; import jakarta.jms.ConnectionFactory; -import org.springframework.boot.autoconfigure.jms.DefaultJmsListenerContainerFactoryConfigurer; +import org.springframework.boot.jms.autoconfigure.DefaultJmsListenerContainerFactoryConfigurer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jms.annotation.EnableJms; import org.springframework.jms.config.DefaultJmsListenerContainerFactory; import org.springframework.jms.config.JmsListenerContainerFactory; -import org.springframework.jms.support.converter.MappingJackson2MessageConverter; +import org.springframework.jms.support.converter.JacksonJsonMessageConverter; import org.springframework.jms.support.converter.MessageConverter; import org.springframework.jms.support.converter.MessageType; + @Configuration @EnableJms -class JMSConfig { +public class JMSConfig { @Bean public JmsListenerContainerFactory myFactory(ConnectionFactory connectionFactory, @@ -25,7 +26,7 @@ public JmsListenerContainerFactory myFactory(ConnectionFactory connectionFact @Bean public MessageConverter jacksonJmsMessageConverter() { - var converter = new MappingJackson2MessageConverter(); + var converter = new JacksonJsonMessageConverter(); converter.setTargetType(MessageType.TEXT); converter.setTypeIdPropertyName("_type"); return converter; diff --git a/main-app/main-webapp/src/main/java/gt/app/config/metrics/RequestStatisticsConfiguration.java b/main-app/main-webapp/src/main/java/gt/app/config/metrics/RequestStatisticsConfiguration.java index 1fc66f6..3fab732 100644 --- a/main-app/main-webapp/src/main/java/gt/app/config/metrics/RequestStatisticsConfiguration.java +++ b/main-app/main-webapp/src/main/java/gt/app/config/metrics/RequestStatisticsConfiguration.java @@ -4,7 +4,7 @@ import gt.app.config.logging.WebRequestInterceptor; import lombok.extern.slf4j.Slf4j; import org.hibernate.cfg.AvailableSettings; -import org.springframework.boot.autoconfigure.orm.jpa.HibernatePropertiesCustomizer; +import org.springframework.boot.hibernate.autoconfigure.HibernatePropertiesCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; diff --git a/main-app/main-webapp/src/main/java/gt/app/modules/article/ArticleRepositoryCustom.java b/main-app/main-webapp/src/main/java/gt/app/modules/article/ArticleRepositoryCustom.java index 2ba5063..09c431c 100644 --- a/main-app/main-webapp/src/main/java/gt/app/modules/article/ArticleRepositoryCustom.java +++ b/main-app/main-webapp/src/main/java/gt/app/modules/article/ArticleRepositoryCustom.java @@ -1,13 +1,8 @@ package gt.app.modules.article; -import gt.app.domain.Article; import gt.app.domain.ArticleStatus; -import java.util.List; - interface ArticleRepositoryCustom { - List
findArticles(ArticleStatus status); - long countArticles(ArticleStatus status); } diff --git a/main-app/main-webapp/src/main/java/gt/app/modules/article/ArticleRepositoryCustomImpl.java b/main-app/main-webapp/src/main/java/gt/app/modules/article/ArticleRepositoryCustomImpl.java index e044c6a..6bf0e52 100644 --- a/main-app/main-webapp/src/main/java/gt/app/modules/article/ArticleRepositoryCustomImpl.java +++ b/main-app/main-webapp/src/main/java/gt/app/modules/article/ArticleRepositoryCustomImpl.java @@ -8,9 +8,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; -import java.util.List; - -import static gt.app.domain.QArticle.article; import static gtapp.jooq.tables.GArticle.G_ARTICLE; @Slf4j @@ -29,13 +26,6 @@ public void setRepository(ArticleRepository repository) { this.repository = repository; } - @Override - public List
findArticles(ArticleStatus status) { - return from(article) - .where(article.status.eq(status)) - .fetch(); - } - @Override public long countArticles(ArticleStatus status) { return jooq.fetchCount(G_ARTICLE.where(G_ARTICLE.STATUS.eq(status.name()))); diff --git a/main-app/main-webapp/src/main/java/gt/app/modules/article/ArticleService.java b/main-app/main-webapp/src/main/java/gt/app/modules/article/ArticleService.java index 8c214a3..4ec4525 100644 --- a/main-app/main-webapp/src/main/java/gt/app/modules/article/ArticleService.java +++ b/main-app/main-webapp/src/main/java/gt/app/modules/article/ArticleService.java @@ -75,7 +75,7 @@ public Article update(ArticleEditDto dto) { @Cacheable(cacheNames = "articleRead", key = "#id") public ArticleReadDto read(Long id) { - //TODO: filter out unpublished comments - write a jooq or querydsl query + //TODO: filter out unpublished comments - write a jooq ArticleReadDto dto = articleRepository.findOneWithAllByIdAndStatus(id, ArticleStatus.PUBLISHED, Sort.by(Sort.Direction.DESC, "id")) .map(ArticleMapper.INSTANCE::mapForRead) .map(this::mapNested) @@ -156,9 +156,4 @@ public Optional
handleReview(ArticleReviewResultDto dto) { }); } - public void testCountStatuses() { - log.info("Size of flagged articles {}", articleRepository.findArticles(ArticleStatus.FLAGGED_FOR_MANUAL_REVIEW).size()); - log.info("Size of flagged articles {}", articleRepository.countArticles(ArticleStatus.FLAGGED_FOR_MANUAL_REVIEW)); - } - } diff --git a/main-app/main-webapp/src/main/java/gt/app/modules/article/CommentRepositoryCustom.java b/main-app/main-webapp/src/main/java/gt/app/modules/article/CommentRepositoryCustom.java index 625be4b..b3392dc 100644 --- a/main-app/main-webapp/src/main/java/gt/app/modules/article/CommentRepositoryCustom.java +++ b/main-app/main-webapp/src/main/java/gt/app/modules/article/CommentRepositoryCustom.java @@ -1,13 +1,8 @@ package gt.app.modules.article; -import gt.app.domain.Comment; import gt.app.domain.CommentStatus; -import java.util.List; - interface CommentRepositoryCustom { - List findComments(CommentStatus status); - long findFlaggedComments(CommentStatus status); } diff --git a/main-app/main-webapp/src/main/java/gt/app/modules/article/CommentRepositoryCustomImpl.java b/main-app/main-webapp/src/main/java/gt/app/modules/article/CommentRepositoryCustomImpl.java index d416538..ed4fbad 100644 --- a/main-app/main-webapp/src/main/java/gt/app/modules/article/CommentRepositoryCustomImpl.java +++ b/main-app/main-webapp/src/main/java/gt/app/modules/article/CommentRepositoryCustomImpl.java @@ -8,9 +8,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; -import java.util.List; - -import static gt.app.domain.QComment.comment; import static gtapp.jooq.tables.GComment.G_COMMENT; @Slf4j @@ -29,12 +26,6 @@ public void setRepository(CommentRepository repository) { this.repository = repository; } - @Override - public List findComments(CommentStatus status) { - return from(comment) - .where(comment.status.eq(status)) - .fetch(); - } @Override public long findFlaggedComments(CommentStatus status) { diff --git a/main-app/main-webapp/src/main/java/gt/app/modules/common/AbstractRepository.java b/main-app/main-webapp/src/main/java/gt/app/modules/common/AbstractRepository.java index d1f48af..971da16 100644 --- a/main-app/main-webapp/src/main/java/gt/app/modules/common/AbstractRepository.java +++ b/main-app/main-webapp/src/main/java/gt/app/modules/common/AbstractRepository.java @@ -1,12 +1,10 @@ package gt.app.modules.common; import gt.app.domain.BaseEntity; -import org.springframework.data.querydsl.QuerydslPredicateExecutor; import org.springframework.data.repository.ListCrudRepository; import org.springframework.data.repository.NoRepositoryBean; @NoRepositoryBean -public interface AbstractRepository extends ListCrudRepository, - QuerydslPredicateExecutor { +public interface AbstractRepository extends ListCrudRepository { } diff --git a/main-app/main-webapp/src/main/java/gt/app/modules/common/AbstractRepositoryImpl.java b/main-app/main-webapp/src/main/java/gt/app/modules/common/AbstractRepositoryImpl.java index 6580475..b6d2cc0 100644 --- a/main-app/main-webapp/src/main/java/gt/app/modules/common/AbstractRepositoryImpl.java +++ b/main-app/main-webapp/src/main/java/gt/app/modules/common/AbstractRepositoryImpl.java @@ -1,18 +1,15 @@ package gt.app.modules.common; -import com.querydsl.jpa.JPQLQuery; import gt.app.domain.BaseEntity; import org.springframework.beans.factory.InitializingBean; -import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport; import org.springframework.util.Assert; public abstract class AbstractRepositoryImpl> - extends QuerydslRepositorySupport implements AbstractRepositoryCustom, InitializingBean { + implements AbstractRepositoryCustom, InitializingBean { protected R repository; public AbstractRepositoryImpl(Class domainClass) { - super(domainClass); } @Override @@ -20,8 +17,5 @@ public void afterPropertiesSet() { Assert.notNull(repository, "Repository must not be null.\nAutowire repository with Setter Injection."); } - public boolean exists(JPQLQuery query) { - return query.fetchCount() > 0L; - } } diff --git a/main-app/main-webapp/src/main/resources/application.yml b/main-app/main-webapp/src/main/resources/application.yml index 2ac2d71..cc79b27 100644 --- a/main-app/main-webapp/src/main/resources/application.yml +++ b/main-app/main-webapp/src/main/resources/application.yml @@ -15,7 +15,7 @@ spring: generate_statistics: true naming: physical-strategy: gt.app.hibernate.PrefixedNamingStrategy - implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy + implicit-strategy: org.springframework.boot.hibernate.SpringImplicitNamingStrategy datasource: url: jdbc:mysql://${MYSQL_HOST:localhost}:${MYSQL_PORT:3306}/${MYSQL_DB:seedapp}?useUnicode=true&allowPublicKeyRetrieval=true username: ${MYSQL_USERNAME:root} @@ -104,9 +104,10 @@ management: tracing: sampling: probability: 1.0 - zipkin: - tracing: - endpoint: http://${ZIPKIN_HOST:localhost}:${ZIPKIN_PORT:9411}/api/v2/spans + zipkin: + export: + tracing: + endpoint: http://${ZIPKIN_HOST:localhost}:${ZIPKIN_PORT:9411}/api/v2/spans health: jms: enabled: true diff --git a/main-app/main-webapp/src/test/java/gt/app/e2e/PublicPageIT.java b/main-app/main-webapp/src/test/java/gt/app/e2e/PublicPageIT.java index 4939cd2..11e43b5 100644 --- a/main-app/main-webapp/src/test/java/gt/app/e2e/PublicPageIT.java +++ b/main-app/main-webapp/src/test/java/gt/app/e2e/PublicPageIT.java @@ -7,8 +7,8 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc; import org.springframework.http.MediaType; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.web.servlet.MockMvc; diff --git a/main-app/main-webapp/src/test/java/gt/app/frwk/TestDataManager.java b/main-app/main-webapp/src/test/java/gt/app/frwk/TestDataManager.java index 8c493a0..292fa92 100644 --- a/main-app/main-webapp/src/test/java/gt/app/frwk/TestDataManager.java +++ b/main-app/main-webapp/src/test/java/gt/app/frwk/TestDataManager.java @@ -1,42 +1,23 @@ package gt.app.frwk; import gt.app.DataCreator; -import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; import lombok.RequiredArgsConstructor; -import org.hibernate.metamodel.model.domain.internal.MappingMetamodelImpl; -import org.hibernate.persister.collection.AbstractCollectionPersister; -import org.hibernate.persister.entity.AbstractEntityPersister; +import org.hibernate.engine.spi.SessionFactoryImplementor; import org.springframework.beans.factory.InitializingBean; import org.springframework.cache.CacheManager; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.Set; -import java.util.stream.Collectors; - @Service @RequiredArgsConstructor public class TestDataManager implements InitializingBean { - final EntityManager em; + final EntityManagerFactory entityManagerFactory; final DataCreator dataCreator; final CacheManager cacheManager; - private Set tableNames; - @Override public void afterPropertiesSet() { - MappingMetamodelImpl metaModelImpl = (MappingMetamodelImpl) em.getMetamodel(); - tableNames = metaModelImpl - .entityPersisters() - .values().stream() - .map(ep -> ((AbstractEntityPersister) ep).getTableName()) - .collect(Collectors.toSet()); - - tableNames.addAll(metaModelImpl - .collectionPersisters() - .values().stream() - .map(ep -> ((AbstractCollectionPersister) ep).getTableName()) - .collect(Collectors.toSet())); } @Transactional @@ -52,21 +33,10 @@ public void cleanDataAndCache() { } public void truncateTables() { - - //for H2 - em.createNativeQuery("SET REFERENTIAL_INTEGRITY FALSE").executeUpdate(); - for (String tableName : tableNames) { - em.createNativeQuery("TRUNCATE TABLE " + tableName).executeUpdate(); - } - em.createNativeQuery("SET REFERENTIAL_INTEGRITY TRUE").executeUpdate(); - -// //for MySQL: -// em.createNativeQuery("SET @@foreign_key_checks = 0").executeUpdate(); -// for (String tableName : tableNames) { -// em.createNativeQuery("TRUNCATE TABLE " + tableName).executeUpdate(); -// } -// em.createNativeQuery("SET @@foreign_key_checks = 1").executeUpdate(); - + entityManagerFactory + .unwrap(SessionFactoryImplementor.class) + .getSchemaManager() + .truncateMappedObjects(); } diff --git a/main-app/main-webapp/src/test/java/gt/app/web/rest/HelloResourceIT.java b/main-app/main-webapp/src/test/java/gt/app/web/rest/HelloResourceIT.java index 904bfc8..9d05cad 100644 --- a/main-app/main-webapp/src/test/java/gt/app/web/rest/HelloResourceIT.java +++ b/main-app/main-webapp/src/test/java/gt/app/web/rest/HelloResourceIT.java @@ -4,8 +4,8 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; diff --git a/main-app/main-webapp/src/test/java/gt/app/web/rest/I18Test.java b/main-app/main-webapp/src/test/java/gt/app/web/rest/I18Test.java index 77e4023..278c327 100644 --- a/main-app/main-webapp/src/test/java/gt/app/web/rest/I18Test.java +++ b/main-app/main-webapp/src/test/java/gt/app/web/rest/I18Test.java @@ -2,8 +2,8 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc; import org.springframework.test.web.servlet.MockMvc; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; diff --git a/main-app/main-webapp/src/test/resources/application.yml b/main-app/main-webapp/src/test/resources/application.yml index fcd6e21..27f1528 100644 --- a/main-app/main-webapp/src/test/resources/application.yml +++ b/main-app/main-webapp/src/test/resources/application.yml @@ -15,7 +15,7 @@ spring: ddl-auto: none # we use liquibase naming: physical-strategy: gt.app.hibernate.PrefixedNamingStrategy - implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy + implicit-strategy: org.springframework.boot.hibernate.SpringImplicitNamingStrategy mvc: static-path-pattern: /static/** jooq: diff --git a/main-app/report-service/pom.xml b/main-app/report-service/pom.xml index d599783..29df751 100644 --- a/main-app/report-service/pom.xml +++ b/main-app/report-service/pom.xml @@ -27,7 +27,7 @@ org.springframework.boot - spring-boot-starter-web + spring-boot-starter-webmvc org.springframework.boot @@ -43,33 +43,32 @@ org.springframework.boot - spring-boot-starter-oauth2-resource-server + spring-boot-starter-security-oauth2-resource-server + + org.springframework.boot + spring-boot-micrometer-tracing-brave + org.springframework.boot spring-boot-starter-actuator - io.micrometer - micrometer-tracing-bridge-brave + org.springframework.boot + spring-boot-starter-zipkin - io.zipkin.reporter2 - zipkin-reporter-brave + io.micrometer + micrometer-tracing-bridge-brave + org.projectlombok lombok true provided - - org.springdoc - springdoc-openapi-starter-webmvc-ui - ${springdoc-openapi-ui.version} - true - com.mysql mysql-connector-j @@ -83,7 +82,7 @@ - ${build.profile}-${artifactId}-${project.version} + ${artifactId}-${project.version} spring-boot:run @@ -95,6 +94,24 @@ true + + + org.projectlombok + lombok + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + + org.projectlombok + lombok + + diff --git a/main-app/report-service/src/main/resources/application.yml b/main-app/report-service/src/main/resources/application.yml index 3acfc04..b27a31d 100755 --- a/main-app/report-service/src/main/resources/application.yml +++ b/main-app/report-service/src/main/resources/application.yml @@ -26,5 +26,7 @@ management: sampling: probability: 1.0 zipkin: - tracing: - endpoint: http://${ZIPKIN_HOST:localhost}:${ZIPKIN_PORT:9411}/api/v2/spans + export: + tracing: + endpoint: http://${ZIPKIN_HOST:localhost}:${ZIPKIN_PORT:9411}/api/v2/spans + diff --git a/mvnw b/mvnw index 19529dd..bd8896b 100755 --- a/mvnw +++ b/mvnw @@ -19,7 +19,7 @@ # ---------------------------------------------------------------------------- # ---------------------------------------------------------------------------- -# Apache Maven Wrapper startup batch script, version 3.3.2 +# Apache Maven Wrapper startup batch script, version 3.3.4 # # Optional ENV vars # ----------------- @@ -105,14 +105,17 @@ trim() { printf "%s" "${1}" | tr -d '[:space:]' } +scriptDir="$(dirname "$0")" +scriptName="$(basename "$0")" + # parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties while IFS="=" read -r key value; do case "${key-}" in distributionUrl) distributionUrl=$(trim "${value-}") ;; distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; esac -done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties" -[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties" +done <"$scriptDir/.mvn/wrapper/maven-wrapper.properties" +[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" case "${distributionUrl##*/}" in maven-mvnd-*bin.*) @@ -130,7 +133,7 @@ maven-mvnd-*bin.*) distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" ;; maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; -*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; +*) MVN_CMD="mvn${scriptName#mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; esac # apply MVNW_REPOURL and calculate MAVEN_HOME @@ -227,7 +230,7 @@ if [ -n "${distributionSha256Sum-}" ]; then echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 exit 1 elif command -v sha256sum >/dev/null; then - if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c - >/dev/null 2>&1; then distributionSha256Result=true fi elif command -v shasum >/dev/null; then @@ -252,8 +255,41 @@ if command -v unzip >/dev/null; then else tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" fi -printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url" -mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" + +# Find the actual extracted directory name (handles snapshots where filename != directory name) +actualDistributionDir="" + +# First try the expected directory name (for regular distributions) +if [ -d "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" ]; then + if [ -f "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/bin/$MVN_CMD" ]; then + actualDistributionDir="$distributionUrlNameMain" + fi +fi + +# If not found, search for any directory with the Maven executable (for snapshots) +if [ -z "$actualDistributionDir" ]; then + # enable globbing to iterate over items + set +f + for dir in "$TMP_DOWNLOAD_DIR"/*; do + if [ -d "$dir" ]; then + if [ -f "$dir/bin/$MVN_CMD" ]; then + actualDistributionDir="$(basename "$dir")" + break + fi + fi + done + set -f +fi + +if [ -z "$actualDistributionDir" ]; then + verbose "Contents of $TMP_DOWNLOAD_DIR:" + verbose "$(ls -la "$TMP_DOWNLOAD_DIR")" + die "Could not find Maven distribution directory in extracted archive" +fi + +verbose "Found extracted Maven distribution directory: $actualDistributionDir" +printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$actualDistributionDir/mvnw.url" +mv -- "$TMP_DOWNLOAD_DIR/$actualDistributionDir" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" clean || : exec_maven "$@" diff --git a/mvnw.cmd b/mvnw.cmd index 249bdf3..92450f9 100644 --- a/mvnw.cmd +++ b/mvnw.cmd @@ -19,7 +19,7 @@ @REM ---------------------------------------------------------------------------- @REM ---------------------------------------------------------------------------- -@REM Apache Maven Wrapper startup batch script, version 3.3.2 +@REM Apache Maven Wrapper startup batch script, version 3.3.4 @REM @REM Optional ENV vars @REM MVNW_REPOURL - repo url base for downloading maven distribution @@ -40,7 +40,7 @@ @SET __MVNW_ARG0_NAME__= @SET MVNW_USERNAME= @SET MVNW_PASSWORD= -@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*) +@IF NOT "%__MVNW_CMD__%"=="" ("%__MVNW_CMD__%" %*) @echo Cannot start maven from wrapper >&2 && exit /b 1 @GOTO :EOF : end batch / begin powershell #> @@ -73,16 +73,30 @@ switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { # apply MVNW_REPOURL and calculate MAVEN_HOME # maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ if ($env:MVNW_REPOURL) { - $MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" } - $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')" + $MVNW_REPO_PATTERN = if ($USE_MVND -eq $False) { "/org/apache/maven/" } else { "/maven/mvnd/" } + $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace "^.*$MVNW_REPO_PATTERN",'')" } $distributionUrlName = $distributionUrl -replace '^.*/','' $distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' -$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain" + +$MAVEN_M2_PATH = "$HOME/.m2" if ($env:MAVEN_USER_HOME) { - $MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain" + $MAVEN_M2_PATH = "$env:MAVEN_USER_HOME" +} + +if (-not (Test-Path -Path $MAVEN_M2_PATH)) { + New-Item -Path $MAVEN_M2_PATH -ItemType Directory | Out-Null +} + +$MAVEN_WRAPPER_DISTS = $null +if ((Get-Item $MAVEN_M2_PATH).Target[0] -eq $null) { + $MAVEN_WRAPPER_DISTS = "$MAVEN_M2_PATH/wrapper/dists" +} else { + $MAVEN_WRAPPER_DISTS = (Get-Item $MAVEN_M2_PATH).Target[0] + "/wrapper/dists" } -$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' + +$MAVEN_HOME_PARENT = "$MAVEN_WRAPPER_DISTS/$distributionUrlNameMain" +$MAVEN_HOME_NAME = ([System.Security.Cryptography.SHA256]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' $MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { @@ -134,7 +148,33 @@ if ($distributionSha256Sum) { # unzip and move Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null -Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null + +# Find the actual extracted directory name (handles snapshots where filename != directory name) +$actualDistributionDir = "" + +# First try the expected directory name (for regular distributions) +$expectedPath = Join-Path "$TMP_DOWNLOAD_DIR" "$distributionUrlNameMain" +$expectedMvnPath = Join-Path "$expectedPath" "bin/$MVN_CMD" +if ((Test-Path -Path $expectedPath -PathType Container) -and (Test-Path -Path $expectedMvnPath -PathType Leaf)) { + $actualDistributionDir = $distributionUrlNameMain +} + +# If not found, search for any directory with the Maven executable (for snapshots) +if (!$actualDistributionDir) { + Get-ChildItem -Path "$TMP_DOWNLOAD_DIR" -Directory | ForEach-Object { + $testPath = Join-Path $_.FullName "bin/$MVN_CMD" + if (Test-Path -Path $testPath -PathType Leaf) { + $actualDistributionDir = $_.Name + } + } +} + +if (!$actualDistributionDir) { + Write-Error "Could not find Maven distribution directory in extracted archive" +} + +Write-Verbose "Found extracted Maven distribution directory: $actualDistributionDir" +Rename-Item -Path "$TMP_DOWNLOAD_DIR/$actualDistributionDir" -NewName $MAVEN_HOME_NAME | Out-Null try { Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null } catch { diff --git a/pom.xml b/pom.xml index 9ab9dc6..be62a8c 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ org.springframework.boot spring-boot-starter-parent - 3.5.8 + 4.0.0 @@ -30,13 +30,13 @@ ${java.version} ${java.version} - 3.4.3 - 2025.0.0 - 3.7.7 - 3.7.7 - 1.10.0 - 1.0.5 - 2.8.5 + + 4.0.0 + 2025.1.0 + 3.13.3 + 2.0.0 + 2.0.1 + 3.0.0 1.6.3 7.5.1 @@ -44,25 +44,25 @@ 33.3.0-jre 2.1.1 1.3.0 - 3.4.0 - 1.20.1 + 4.0.1 + 2.0.2 2.17.0 3.6.1 5.0.1 1.3.2 - 2.4-M4-groovy-4.0 + 2.4-groovy-5.0 3.4 4.0.0.4121 - 0.8.12 + 0.8.14 3.6.0 10.18.1 src/main/resources/checkstyle.xml - 3.0.2 - 3.5.0 - 3.5.0 + 4.2.1 + 3.5.4 + 3.5.4 2.9.0 4.9.8.2 8.4.0 @@ -142,8 +142,8 @@ io.hypersistence - hypersistence-utils-hibernate-63 - ${hibernate-types60.version} + hypersistence-utils-hibernate-71 + ${hibernate-hypersistence-utils} com.github.gavlyukovskiy @@ -217,7 +217,7 @@ true - org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_5 + org.openrewrite.java.spring.boot4.UpgradeSpringBoot_4_0 diff --git a/spot-bugs.filter-exclude.xml b/spot-bugs.filter-exclude.xml index 99ccc9e..24e091f 100644 --- a/spot-bugs.filter-exclude.xml +++ b/spot-bugs.filter-exclude.xml @@ -1,6 +1,8 @@ + + diff --git a/trend/trend-service-api/pom.xml b/trend/trend-service-api/pom.xml index 8830fdb..5325d4a 100644 --- a/trend/trend-service-api/pom.xml +++ b/trend/trend-service-api/pom.xml @@ -35,18 +35,16 @@ - - com.github.spotbugs - spotbugs-maven-plugin - - ../../spot-bugs.filter-exclude.xml - - org.apache.maven.plugins - maven-checkstyle-plugin + maven-compiler-plugin - ../../checkstyle.xml + + + org.projectlombok + lombok + + diff --git a/trend/trend-service/pom.xml b/trend/trend-service/pom.xml index 3400d3c..a096252 100644 --- a/trend/trend-service/pom.xml +++ b/trend/trend-service/pom.xml @@ -28,21 +28,27 @@ org.springframework.boot - spring-boot-starter-web + spring-boot-starter-webmvc + + org.springframework.boot + spring-boot-micrometer-tracing-brave + org.springframework.boot spring-boot-starter-actuator - io.micrometer - micrometer-tracing-bridge-brave + org.springframework.boot + spring-boot-starter-zipkin - io.zipkin.reporter2 - zipkin-reporter-brave + io.micrometer + micrometer-tracing-bridge-brave + + org.springframework.boot spring-boot-starter-artemis @@ -64,13 +70,13 @@ org.springframework.boot - spring-boot-starter-test + spring-boot-starter-webmvc-test test - ${build.profile}-${artifactId}-${project.version} + ${artifactId}-${project.version} spring-boot:run @@ -82,9 +88,26 @@ true + + + org.projectlombok + lombok + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + + org.projectlombok + lombok + + - com.github.spotbugs spotbugs-maven-plugin diff --git a/trend/trend-service/src/main/resources/application.yml b/trend/trend-service/src/main/resources/application.yml index 2fd5bdd..975f29d 100644 --- a/trend/trend-service/src/main/resources/application.yml +++ b/trend/trend-service/src/main/resources/application.yml @@ -20,5 +20,7 @@ management: sampling: probability: 1.0 zipkin: - tracing: - endpoint: http://${ZIPKIN_HOST:localhost}:${ZIPKIN_PORT:9411}/api/v2/spans + export: + tracing: + endpoint: http://${ZIPKIN_HOST:localhost}:${ZIPKIN_PORT:9411}/api/v2/spans +