问题标签 [spring-autoconfiguration]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
202 浏览

spring-boot - Spring Boot 默认基于属性的自动配置

我想基于application.yml. 我以为我首先排除了自动配置类,然后将其作为导入添加到我的配置类中,该配置类以该属性为条件:

MyApplication.class:

ApplicationProperties.class

应用程序.yml:

安全配置类:

该类SecurityAutoConfiguration永远不会被导入:

那我怎样才能达到预期的结果呢?

更新

有趣的是,如果我KafkaAutoConfiguration.class按照我的预期做同样的事情——所有的 Kafka bean 都会被加载和自动配置。

0 投票
0 回答
50 浏览

java - ConditionalOnMissingBean 结合 EnableJpaRepositories

我使用了以下配置:

它创建了一个PagingAndSortingRepository存储库。如您所见,这仅在“数据库”配置文件处于活动状态时创建。还有其他几个使用其他配置文件激活的 repro。

现在我想创建一个会说话的错误消息,以防没有创建存储库(例如,通过使用错误的配置文件)。

第一个想法是: @Profile("!database & !filesystem ...") 但是,这对于许多配置文件来说太麻烦了,需要维护。

因此,接下来的想法是:

不幸的是,@EnableJpaRepositories似乎在@ConditionalOnMissingBean评估之后才创建存储库 bean。我每次都得到上述异常。

有没有办法在这里实现这个?

谢谢!

0 投票
2 回答
2268 浏览

java - 通过 spring.profiles.active 覆盖默认应用程序属性

我在通过按spring.profiles.active属性指定活动配置文件来覆盖默认应用程序属性时遇到问题。

我已经开发了一个示例项目来复制这个问题。我有 2 个 application.yml 文件:

应用程序-default.yml

应用程序-local.yml

然后我开发了一个组件来打印测试值:

这段代码的输出是:

我预计输出将是:

我知道使用application.yml而不是application-default.yml按预期工作,但我的目标是使用application.yml来保存所有配置文件共有的基本属性,并通过使用配置文件指定特定于环境的配置。

我正在使用 spring-boot 2.4.0,build.gradle

为什么这个属性不被覆盖?

0 投票
1 回答
1232 浏览

java - 使用 @SpringAware MapLoader 正确使用 Spring Boot Hazelcast 自动配置

我有一个使用Spring Boot 2.4.1Hazelcast 4.1.1的项目。我正在尝试使用 Spring Boot 自动配置来设置分布式地图,并使用 JpaRepository 读取来填充地图。我添加了application.yamlhazelcast.yaml并提供了一个实现com.hazelcast.map.MapLoadercom.hazelcast.map.MapLoaderLifecycleSupport@SpringAware. hazelcast 实例启动正常,但从未调用 MapLoader。hazelcast 文档仅提供 Spring XML 配置示例

  • 是否可以将 Hazelcast 的 Spring Boot 自动配置与 MapLoader 结合使用,还是我需要提供自己的 com.hazelcast.config.MapConfigcom.hazelcast.config.Config bean?
  • 如何使用@SpringAwareMapLoader?
  • init 方法中应该包含什么?
  • 我需要用 Hazelcast 上下文注册 Spring 上下文吗?

您可以提供的任何指导将不胜感激。以下是我到目前为止所尝试的:

pom.xml:

应用程序.yaml:

hazelcast.yaml

地图加载器实现:

0 投票
1 回答
285 浏览

spring-boot - Hazelcast MapStore 与 Spring Boot Data JPA 循环依赖

我正在使用spring-boot-data-jpahazelcast开发Spring Boot 2.4.1项目。我正在尝试设置一个可以读取数据库的分布式地图。我已经实现了,但是当我尝试运行应用程序时,由于循环依赖,它无法启动。似乎 JpaRepository 首先需要 HazelcastInstance 可用,但 HazelcastInstance 需要 MapLoader ,而 MapLoader 又需要 JpaRepository 准备好。至少从日志和这篇文章来看是这样的。com.hazelcast.map.MapLoader

有谁知道如何解决这个问题?

pom.xml

配置:

地图加载器

JpaRepository

0 投票
2 回答
976 浏览

spring-boot - 如何为 Okta 自动刷新不记名令牌

我有一个带有 Angular UI、Zuul 和一些与 Okta 登录 (OAuth) 集成的服务的应用程序(非响应式)。这工作正常,但在 jwt 令牌过期后卡住了。关于工作流程的一些细节

  1. 应用 URL 指向 Zuul。
  2. Zuul 将请求重定向到 Okta。用户登录。
  3. Okta 发回一个不记名令牌(也是一个刷新令牌)。
  4. 此不记名令牌被传递到 UI 并存储为 cookie。对于每个请求,UI 都会发送 Authorization 标头以及不记名令牌。
  5. 这个过程正常工作,直到 jwt 令牌在一小时内过期,然后 Zuul 尝试将其重定向到默认登录页面,因为我们使用 okta 登录,所以该页面没有任何内容。

我的问题

  1. 如果需要,可以将日志页面重定向到哪里https://dev1234.okta.com/oauth2/default?  
  2. 如何根据刷新令牌获取新的不记名令牌?
  3. 我可以根据刷新令牌在 Zuul 中自动获取新的不记名令牌吗?如果这不可能,最好的方法是什么?

这是 Zuul 的 application.yml 文件

梯度文件

Zulu WebSecurityConfigurerAdapter

服务应用程序.yml

服务配置文件

摇篮文件

更新 看起来范围“offline_access”确实有所作为。现在我收到 CORS 错误。过滤器到位后,我应该看不到这个吗?这是由于授权标头的存在吗?此外,如果我手动刷新浏览器,则会提供一个新令牌。那么没有CORS问题

Update1 当 JWT 令牌过期时,我看到下面的错误,这是预期的。

401 被发送到 UI 并且 UI 捕获它并重定向到 APP 中的另一个 url。这些是网关日志

在浏览器控制台上,我看到了错误

网关上定义的过滤器是否应该不处理此 CORS 错误,或者是否未应用 CORS 过滤器?让我感到困惑的是,如果我转到浏览器并单击刷新按钮,它就可以正常工作。

0 投票
0 回答
94 浏览

spring - 多个项目的spring data JPA common @EnableJpaRepositories - 共享jar

我正在使用 spring boot 2.2.5.RELEASE 和 spring-data-2.2.5.RELEASE

我们在不同的 git 存储库中有多个项目,我正在尝试创建一个通用 JSON 存储库以通过共享 jar 使用 MySQL JSON 函数。

我在具有自动配置的公共 jar 中创建了以下内容

配置类

我的资源中有一个spring.factorie文件,将其配置为自动配置

和我的实现存储库

问题

当我使用包含我制作的所有 json commons 的公共 jar 时,spring-data 停止检测所有存储库,并且由于缺少 bean,我无法启动应用程序

只有当我在消费项目中添加另一个 @configuration 时它才有效,并且我想让它自动工作以保存在我想添加 JSON 查询功能的每个项目上定义它

我该如何解决?

0 投票
1 回答
163 浏览

spring-boot - 了解 kubernetes spring boot 应用程序中的采购秘密

我正在按照本指南使用机密:https ://docs.spring.io/spring-cloud-kubernetes/docs/current/reference/html/index.html#secrets-propertysource 。

粗略地说。

  1. 保存秘密

  2. 在 deployment.yml 文件中引用秘密

  3. 然后它说“您可以通过多种方式选择要使用的秘密:”并给出 3 个示例。但是,如果不执行任何这些步骤,我仍然可以完美地看到我的环境中的秘密。此外,步骤 1 和步骤 2 中的操作独立于 Spring Boot 操作(将机密保存并移动到环境变量中)

我的问题:

  1. 如果我进行第 3 步中建议的更改,它会对我的容器/应用程序/pod 进行哪些更改/改进?
  2. 有没有办法能够避免步骤 1 中的所有映射并将所有秘密放在一个环境中?
  3. 他们写 -Dspring.cloud.kubernetes.secrets.paths=/etc/secrets 来获取所有秘密,他们怎么知道秘密在一个名为 /etc/ 的文件夹中
0 投票
0 回答
364 浏览

java - 春季启动@AutoConfigureBefore不工作

我依赖于我的自定义 Redis 启动器,它有一个配置类,我想在此之前启动RedissonAutoConfiguration它,为此,我使用@AutoConfigureBefore注释,但它似乎不起作用,仍然RedissonAutoConfiguration是首先启动的。

唯一可以工作的似乎是添加@ComponentScan(basePackage = "path_to_config"),但我不想在这里使用任何注释,我想自己开始RedissonAutoConfiguration之前

spring.factories我的 Redis 启动器中有文件来进行类自动配置

0 投票
1 回答
287 浏览

spring-boot - Spring Boot:自动配置的工作原理和@JsonTest

我已经阅读了一些关于自动配置如何在幕后工作的东西(配置类@Conditionalspring.factories内部/META-INF等......)

现在我试图用一个例子来理解:@JsonTest

我可以看到这个注释被注释了@AutoConfigureJson

@AutoConfigureJson到底是做什么的?它是否导入了一些带有 bean 的配置类?Spring如何知道如何使用这个注解(基本上这个注解几乎是空的,并没有说要扫描哪些类)