gpt4 book ai didi

spring-boot - Spring Boot 未加载 PropertySourceLoader

转载 作者:行者123 更新时间:2023-12-04 18:03:01 25 4
gpt4 key购买 nike

使用 spring boot 1.2.3 版(也用 1.2.5 测试过),我正在关注 creating-a-custom-jasypt-propertysource-in-springbootSpring Boot & Jasypt easy: Keep your sensitive properties encrypted使用自定义 PropertySourceLoader 使用 jsypt 库。我的源加载器类在 api.jar 中,这个 jar 文件包含在 myapplication.war 文件中。这个 war 部署在tomcat中。

似乎 Spring 没有加载EncryptedPropertySourceLoader在应用程序启动时。有人可以帮忙吗?

以下是我的项目结构和相关代码。

Project - api.jar
| src
| | main
| | java
| | EncryptedPropertySourceLoader.java
| | resources
| | META-INF
| | spring.factories

api.jar 是用 api.jar!META-INF/spring.factories 构建的.
package com.test.boot.env;

import java.io.IOException;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.env.PropertySourceLoader;
import org.springframework.core.PriorityOrdered;
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.Resource;

public class EncryptedPropertySourceLoader implements PropertySourceLoader, PriorityOrdered {

private static final Logger logger = LoggerFactory.getLogger(EncryptedPropertySourceLoader.class);


public EncryptedPropertySourceLoader() {
logger.error("\n\n\n***CREATING properties loader.\n\n\n");
}

@Override
public String[] getFileExtensions() {
return new String[] { "properties" };
}

@Override
public PropertySource<?> load(final String name, final Resource resource, final String profile) throws IOException {
logger.error("\n\n\n***Loading properties files.\n\n\n");

if (true) {
throw new RuntimeException("calling load"); \\intentional to identify the call
}
return null;
}

@Override
public int getOrder() {
return HIGHEST_PRECEDENCE;
}
}

spring.factories 的内容是
org.springframework.boot.env.PropertySourceLoader=\
com.test.boot.env.EncryptedPropertySourceLoader

我也试过不使用 '\' 但它没有任何区别。

以下是 spring.factories的路径在 myapplication.war文件
myapplication.war!WEB-INF/lib/api.jar!META-INF/spring.factories

根据我的理解,我应该看到 RuntimeException在启动时,但我的应用程序成功启动。任何人都可以请帮助找到我缺少的东西吗?

最佳答案

对于我能说的 SpringFactoriesLoader工厂机制PropertySourceLoader仅供 PropertySourcesLoader 使用这反过来仅用于加载应用程序属性。那些是 application.properties , application.yml , 或 application.yaml .因此,对于您的示例,只需添加一个文件 application.properties到你的类路径,你会得到你期望的异常。
我不知道的是为什么其他属性源导入机制(例如使用注释@PropertySource)没有通过 PropertySourcesLoader利用工厂加载器和覆盖机制。

关于spring-boot - Spring Boot 未加载 PropertySourceLoader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31824601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com