标签: spring-boot

spring.cloud.function.definition 的 application.yml 中的多行值

我们有一个使用已弃用的 @StreamListener 的 Spring boot 项目,现在我们正在切换到 Spring Cloud Stream 功能性 kafka 绑定器。

问题是这个服务连接到多个kafka主题并且我们的单线spring.cloud.function.definition: topicA;topicB;topicC;...;topicN变得很长

我想知道如何在 Spring 的application.yaml上使用yaml 功能,例如多行值(例如 | 或 > 运算符),但我在文档中没有找到类似的内容。

我的目标是这样的

spring.cloud.function.definition: | topicA;
                                    topicB;
                                    topicC;
                                    ...;
                                    topicN
Run Code Online (Sandbox Code Playgroud)

谢谢

spring-boot spring-cloud-stream

4
推荐指数
1
解决办法
928
查看次数

如何在客户端将byte[]反序列化为Java POJO(或Object),即客户端如何获取类信息?

我有两个相关问题:

  1. 我可以通过网络发送此类的 byte[]:
class Employee implements Serializable{
    byte[] avroBytes, //avro data in byte[] array
    String name
}
Run Code Online (Sandbox Code Playgroud)

在我的测试用例中,使用 MockMvc,我能够对其进行反序列化,然后将其转换为 Employee 对象,因为我的测试用例可以使用代码中的相同 POJO。然而客户端不会有这个 POJO 或类信息。收到字节后,它如何重建这个 POJO(或其他语言中的等效项)或对象?我需要在标头中发送一些类信息吗?客户端可能使用 Python 或其他某种语言,因此我需要一种使此类信息通用的方法。

在我的测试用例中,这是有效的:

 Employee res = (Employee ) SerializationUtils.deserialize(result.getResponse().getContentAsByteArray());
Run Code Online (Sandbox Code Playgroud)

如果客户端没有此 POJO/信息,他们将如何将反序列化字节转换为 Employee?我可以在我的测试用例中执行此操作,因为我的代码中有 Employee 类。

评论的附加信息:

我使用 org.springframework.util.SerializationUtils serialize() 方法对其进行序列化

java arrays serialization deserialization spring-boot

4
推荐指数
1
解决办法
3018
查看次数

IntelliJ 中 Spring Initializr 项目的问题

我使用 Spring Initializr 创建了一个项目。

当我在 IntelliJ 中打开它时,我在构建中看到以下错误:

java.lang.RuntimeException: org.codehaus.plexus.component.repository.exception.ComponentLookupException: com.google.inject.ProvisionException: 无法配置,请参阅以下错误:

  1. 注入构造函数时出错,java.lang.NoSuchMethodError:org.apache.maven.model.validation.DefaultModelValidator:在org.jetbrains.idea.maven.server.embedder.CustomModelValidator.(来源未知)中找不到方法“void()”定位 org.jetbrains.idea.maven.server.embedder.CustomModelValidator 在 ClassRealm[maven.ext, 父级: ClassRealm[plexus.core, 父级: null]] (通过模块: org.eclipse.sisu.wire.WireModule -> org .eclipse.sisu.plexus.PlexusBindingModule),同时找到用 @com.google.inject.name.Named(value="ide") 注释的 org.apache.maven.model.validation.ModelValidator

1个错误角色:org.apache.maven.model.validation.ModelValidator角色提示:ide

我还注意到,如果我尝试添加运行配置,则找不到主类。这里可能出了什么问题?

java intellij-idea maven spring-boot spring-initializr

4
推荐指数
1
解决办法
2267
查看次数

当应用程序健康状态发生变化时运行一些逻辑

我在management.endpoint.health.group (foo, bar)中有多个健康检查

我在 kubernetes 集群中部署我的应用程序,

我想要的是当 kube 向我发送 liveness 请求并且 (foo, bar) 的状态被聚合时,此时(在回复之前)我想基于最后一个状态运行一些逻辑。

我的指标是这样定义的

@Component
public class FooHealthIndicator implements HealthIndicator {
  
  @Override
  public Health health() {

    Health.Builder builder = new Health.Builder();

    try {
      // some foo specific logic
      builder.up();

    } catch (Exception exception) {
      ...
      builder.down().withException(exception);
    }
    return builder.build();
  }
Run Code Online (Sandbox Code Playgroud)

同样适用于BarHealthIndicator

java spring spring-boot spring-boot-actuator

4
推荐指数
1
解决办法
318
查看次数

Iss 声明无效 Keycloak

我使用 keycloak 服务登录我的网络应用程序。用作具有 oauth 2.0 安全性的后端 spring。当我使用从 keycloak 获得的不记名令牌向邮递员发出请求时,它给了我一个错误 401,并且在条目旁边的答案文本中www-Authenticate它告诉我:

Bearer error="invalid_token", error_description="An error occurred while attempting to decode the Jwt: The iss claim is not valid", error_uri="https://tools.ietf.org/html/rfc6750#section-3.1"

我该如何解决这个问题?

authentication spring jwt spring-boot keycloak

4
推荐指数
1
解决办法
1万
查看次数

java.lang.NoSuchMethodError: 'void org.yaml.snakeyaml.LoaderOptions.setMaxAliasesForCollections(int)'

我的项目我们使用的是 spring boot 2.6.6 版本。当我单独运行下面的测试类时,出现以下错误。

java.lang.NoSuchMethodError: 'void org.yaml.snakeyaml.LoaderOptions.setMaxAliasesForCollections(int)'

如果该类作为 mvn install 的一部分运行,则其执行不会出现任何问题。

@SpringBootTest(webEnvironment = RANDOM_PORT, classes = TestApplication.class)
@ContextConfiguration(classes = {WireMockConfig.class})
class ToastNotificationControllerIT {

    @LocalServerPort
    private int port;

    @BeforeEach
    void setUp() throws IOException {
        
    }

    @Test
    void test() {
        
    }

}
Run Code Online (Sandbox Code Playgroud)

尝试调用不存在的方法。尝试从以下位置进行:

org.springframework.boot.env.OriginTrackedYamlLoader.createYaml(OriginTrackedYamlLoader.java:69)
Run Code Online (Sandbox Code Playgroud)

以下方法不存在:

'void org.yaml.snakeyaml.LoaderOptions.setMaxAliasesForCollections(int)'
Run Code Online (Sandbox Code Playgroud)

调用方法的类 org.springframework.boot.env.OriginTrackedYamlLoader 是从以下位置加载的:

jar:file:/C:/dev/.m2/repository/org/springframework/boot/spring-boot/2.6.6/spring-boot-2.6.6.jar!/org/springframework/boot/env/OriginTrackedYamlLoader.class
Run Code Online (Sandbox Code Playgroud)

被调用方法的类 org.yaml.snakeyaml.LoaderOptions 可从以下位置获取:

jar:file:/C:/dev/.m2/repository/org/yaml/snakeyaml/1.23/snakeyaml-1.23-android.jar!/org/yaml/snakeyaml/LoaderOptions.class
jar:file:/C:/dev/.m2/repository/org/yaml/snakeyaml/1.29/snakeyaml-1.29.jar!/org/yaml/snakeyaml/LoaderOptions.class
Run Code Online (Sandbox Code Playgroud)

被调用方法的类层次结构是从以下位置加载的:

org.yaml.snakeyaml.LoaderOptions: file:/C:/dev/.m2/repository/org/yaml/snakeyaml/1.23/snakeyaml-1.23-android.jar
Run Code Online (Sandbox Code Playgroud)

我尝试从 Spring Boot Starter 依赖项中排除 org.yaml 依赖项。但问题仍然没有解决。

我的依赖树:

[INFO] com.selva.test:test-api:jar:1.0.6
[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:2.6.6:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter:jar:2.6.6:compile
[INFO] |  |  +- org.springframework.boot:spring-boot:jar:2.6.6:compile …
Run Code Online (Sandbox Code Playgroud)

spring snakeyaml spring-boot

4
推荐指数
1
解决办法
2万
查看次数

application.properties中的spring boot .env变量

我已经创建了 .env 文件,我现在在其中保存变量,我希望它们在我的 application.properties 中定义,但这不起作用。我需要添加什么来获取变量。

.env 文件

MYSQLDB_USER=root
MYSQLDB_ROOT_PASSWORD=root
Run Code Online (Sandbox Code Playgroud)

应用程序属性

spring.profiles.active = dev
Run Code Online (Sandbox Code Playgroud)

应用程序-dev.properties

# mysql database properties
spring.datasource.url = jdbc:mysql://localhost:3306/testdb?useUnicode=true&serverTimezone=UTC&server&createDatabaseIfNotExist=true
spring.datasource.username = ${MYSQLDB_USER}
spring.datasource.password = ${MYSQLDB_ROOT_PASSWORD}
        
# hibernate properties
spring.jpa.hibernate.ddl-auto = create
spring.jpa.show-sql = true
Run Code Online (Sandbox Code Playgroud)

environment-variables pom.xml maven spring-boot application.properties

4
推荐指数
1
解决办法
9085
查看次数

如何从flyway 5.2.4升级到9.0.1?

我有使用 Flyway 5.2.4 的 Spring Boot 2.7.0 maven 项目。我需要将 Flyway 升级到新版本。

这一切都开始了,因为我需要更新 h2 和 h2gis-functions,以便我可以使用 h2 1.4.200 或更高版本,因为我需要 h2 v 1.4.200 的新功能。我目前的 pom.xml 中有com.h2database:h2:1.4.197和依赖项。org.orbisgis:h2gis-functions:1.3.2这两者需要相互兼容。据我了解,并非所有版本都兼容。所以我决定尝试一下com.h2database:h2:2.1.214是否org.orbisgis:h2gis:2.1.0有效

完成之后,我开始收到以前没有收到的错误:

Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "SELECT [*]VALUE FROM INFORMATION_SCHEMA.SETTINGS WHERE NAME = 'info.BUILD_ID'"; expected "DISTINCT, ALL, *, INTERSECTS (, NOT, EXISTS, UNIQUE, INTERSECTS"; SQL statement: SELECT VALUE FROM INFORMATION_SCHEMA.SETTINGS WHERE NAME = 'info.BUILD_ID' [42001-214]
Run Code Online (Sandbox Code Playgroud)

据我所知,这是由旧飞行路线造成的。在我的 pom.xml 项目中,我有 Flyway 5.2.4。在谷歌搜索这个问题后,我遇到了这个 stackoverflow 帖子:H2 version change …

h2 maven flyway spring-boot

4
推荐指数
1
解决办法
5960
查看次数

如何修复 java.lang.ClassNotFoundException: org.springframework.boot.configurationprocessor.json.JSONException 错误?

当我在生产环境中将 Spring Boot 服务作为 Windows 服务运行时,出现以下错误。服务 exe 由Jar2exe创建。

java.lang.reflect.InvocationTargetException
    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.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
    at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65)
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'mindbodyApplication': Unsatisfied dependency expressed through field 'mindBodyClientService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mindBodyClientServiceImpl': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [com.rossmoor.mindbody.services.web.MindBodyClientServiceImpl] from ClassLoader [org.springframework.boot.loader.LaunchedURLClassLoader@18769467]
    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 …
Run Code Online (Sandbox Code Playgroud)

java gradle spring-boot

4
推荐指数
1
解决办法
2万
查看次数

春季启动。在 RestController 上转发

我正在实施一种替换短链接的机制。

我需要将请求转发给另一个控制器。我找到了如何在模型上在 spring 中执行此操作的示例,但我不明白如何在 RestControllers 中执行此操作

我发现的示例(使用模型)

@Controller
public class ShrotLinkForwardController {

   @RequestMapping("/s/*")
   public String myMethod(HttpServletRequest request) {
       return "forward:/difmethod";
   }
}
Run Code Online (Sandbox Code Playgroud)

或者也许我看错了方向,我需要做一个过滤器?

UPD。我不知道最终的端点,它是在转发方法中计算的。所以,我无法自动连接其他控制器

java spring spring-boot

4
推荐指数
1
解决办法
5877
查看次数