当前位置: 首页 > 知识库问答 >
问题:

Spring Cloud Vault正在从错误的配置文件中提取属性

齐雅畅
2023-03-14

在我的Spring Boot项目中,我定义了4个配置文件ide、dev、test和Prod。当我使用IntelliJ和profile ide运行项目时,一切都运行得很好,并且可以从存储库中的ide配置文件中检索属性。但在dev server中部署期间,当我使用参数-dspring.profiles.active=dev选择开发配置文件时,正在选择开发配置文件,但正在检索ide配置文件属性

CustomVaultConfigurer.java

@Configuration
public class CustomVaultConfigurer  implements VaultConfigurer
{
    @Override
    public void addSecretBackends(SecretBackendConfigurer configurer)
    {
                configurer.add("secret/app/pres/ide");
        configurer.add("secret/app/pres/dev");
        configurer.add("secret/app/pres/test");
        configurer.add("secret/app/pres/prod");

        configurer.registerDefaultGenericSecretBackends(false);
        configurer.registerDefaultDiscoveredSecretBackends(true);
    }
}

错误日志:

2020-05-27 19:28:25.663  INFO 1 --- [           main] gov.cancer.ccr.oit.pres.PresApplication  : The following profiles are active: dev
2020-05-27 19:28:28.495  INFO 1 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFERRED mode.
2020-05-27 19:28:29.710  INFO 1 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 1203ms. Found 55 JPA repository interfaces.
2020-05-27 19:28:30.142  INFO 1 --- [           main] o.s.cloud.context.scope.GenericScope     : BeanFactory id=87545ee5-101d-3ebb-a79a-d12f99f15e9c
2020-05-27 19:28:31.002  INFO 1 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler@70c53dbe' of type [org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2020-05-27 19:28:31.011  INFO 1 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'methodSecurityConfig' of type [gov.cancer.ccr.oit.pres.security.MethodSecurityConfig$$EnhancerBySpringCGLIB$$8721baa3] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2020-05-27 19:28:31.033  INFO 1 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'methodSecurityMetadataSource' of type [org.springframework.security.access.method.DelegatingMethodSecurityMetadataSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2020-05-27 19:28:31.608  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2020-05-27 19:28:31.635  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-05-27 19:28:31.636  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.35]
2020-05-27 19:28:31.778  INFO 1 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-05-27 19:28:31.778  INFO 1 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 6069 ms
2020-05-27 19:28:32.616  INFO 1 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-05-27 19:28:32.909  INFO 1 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2020-05-27 19:29:03.630 ERROR 1 --- [           main] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Exception during pool initialization.

com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the host localhost, port 1433 has failed. Error: "Connection refused (Connection refused). Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall.".

但是,当我将ide配置文件放在列表的末尾(如下所示)时,它就起作用了

configurer.add("secret/app/pres/dev");
configurer.add("secret/app/pres/test");
configurer.add("secret/app/pres/prod");
configurer.add("secret/app/pres/ide");

共有1个答案

姜松
2023-03-14

好吧。我这边的哑巴部分。根据Marks注释,当您将Configurer.add(…)Configurer.RegisterDefaultGenericSecretBackends(false)结合使用时,那么Spring Cloud Vault根本不查看Spring.Profiles.Active,而是使用您的VaultConfigureer指定的内容。

更新后的VaultConfigureer如下所示,活动配置文件

VaultConfigurer.java

@Configuration
public class CustomVaultConfigurer  implements VaultConfigurer
{
    @Autowired
    private Environment environment;

    @Override
    public void addSecretBackends(SecretBackendConfigurer configurer)
    {
        //Get active profile from environment, if none exist select DEV profile
        if(environment.getActiveProfiles().length > 0)
            configurer.add("secret/app/pres/"+environment.getActiveProfiles()[0]);
        else
            configurer.add("secret/app/pres/dev");

        configurer.registerDefaultGenericSecretBackends(false);
        configurer.registerDefaultDiscoveredSecretBackends(true);
    }
}
 类似资料:
  • 我是新来的Spring。我创建了,其中创建了bean。当我试图使用时,我得到了以下错误: IOException从类路径资源[config.XML]解析XML文档;嵌套异常是java.io.FileNotFoundException:无法打开类路径资源[config.xml],因为它不存在。 我之前用过这句话。 我的config.xml位于中 的内容:

  • 后台- 我有一个python程序,它调用API,将数据保存到数据帧,然后将数据写入

  • 你好,我在我的项目中使用Spring Boot和Hikari进行db连接。spinger引导版本是2.2.5.RELEASE,Hikari是3.4.2。但是,当我运行我的项目时,它总是使用Hikari默认配置值,而不是使用我的属性文件中的值。这是我的属性: 这是我在应用程序配置中的数据源: 下面是输出:10:23:19.050[main]DEBUG com . zax xer . hikari .

  • 我正在尝试创建3个捆绑包: BundleA:使用非托管本机hibernate访问数据库1。 BundleB:也可以使用非托管的本机hibernate,但要访问数据库2。 BundleC:导入BundleA和BundleB 我希望 bundleA 和 bundleB 将获取会话工厂及其配置文件。但是,Hibernate的日志显示 BundleB 使用 BundleA 的配置文件获取会话工厂。 有人能

  • 下面是我在Spring引导应用程序中的yml文件 低于值访问是工作文件 但当我试图以下面的方式访问时,它会给出一个错误。 我检查了只有在添加“com.cloudimpl.outstack.runtime.EventRepositoryFactory”这一部分时才会出现错误。 我怎样才能解决这个问题??

  • 问题内容: 我有一个属性文件,其中值的顺序很重要。我希望能够遍历属性文件并根据原始文件的顺序输出值。 但是,由于支持属性文件,如果我错了,请更正我,这是一个不保持插入顺序的Map, 迭代器将以错误的顺序返回值 。 这是我正在使用的代码 无论如何,只要不编写我自己的自定义文件解析器,就可以找回属性? 问题答案: 如果可以更改属性名称,则可以为它们加上数字或其他可排序的前缀,然后对属性KeySet进行