当前位置: 首页 > 面试题库 >

由Typesafe Config支持的Spring Environment

咸高谊
2023-03-14
问题内容

我想在我的项目中使用typesafe config(HOCON
config文件),这有助于简单而有组织的应用程序配置。目前,我正在使用普通的Java属性文件(application.properties),并且在大型项目上很难处理。

我的项目是Spring MVC(不是Spring Boot项目)。有没有一种方法可以支持我的Spring
Environment(我将注入到我的服务中)由typesafe config支持。这不应该阻止我现有的环境用法@Value@Autowired Environment例如注释等。

如何以最小的努力和对代码的更改来做到这一点。

这是我当前的解决方案:寻找其他更好的方法

@Configuration
public class PropertyLoader{
    private static Logger logger = LoggerFactory.getLogger(PropertyLoader.class);

    @Bean
    @Autowired
    public static PropertySourcesPlaceholderConfigurer properties(Environment env) {
        PropertySourcesPlaceholderConfigurer pspc = new PropertySourcesPlaceholderConfigurer();

        Config conf = ConfigFactory.load();
        conf.resolve();
        TypesafePropertySource propertySource = new TypesafePropertySource("hoconSource", conf);

        ConfigurableEnvironment environment = (StandardEnvironment)env;
        MutablePropertySources propertySources = environment.getPropertySources();
        propertySources.addLast(propertySource);
        pspc.setPropertySources(propertySources);

        return pspc;
    }
}

class TypesafePropertySource extends PropertySource<Config>{
    public TypesafePropertySource(String name, Config source) {
        super(name, source);
    }

    @Override
    public Object getProperty(String name) {
        return this.getSource().getAnyRef(name);
    }
}

问题答案:

我想我想出了一种比手动添加PropertySource到属性源更惯用的方法。创建一个PropertySourceFactory并引用@PropertySource

首先,我们TypesafeConfigPropertySource与您拥有的几乎相同:

public class TypesafeConfigPropertySource extends PropertySource<Config> {
    public TypesafeConfigPropertySource(String name, Config source) {
        super(name, source);
    }

    @Override
    public Object getProperty(String path) {
        if (source.hasPath(path)) {
            return source.getAnyRef(path);
        }
        return null;
    }
}

接下来,我们创建一个PropertySource 工厂 ,该 工厂 返回该属性源

public class TypesafePropertySourceFactory implements PropertySourceFactory {

    @Override
    public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
        Config config = ConfigFactory.load(resource.getResource().getFilename()).resolve();

        String safeName = name == null ? "typeSafe" : name;
        return new TypesafeConfigPropertySource(safeName, config);
    }

}

最后,在我们的配置文件中,我们可以像其他任何属性一样引用属性源,PropertySource而不必自己添加PropertySource:

@Configuration
@PropertySource(factory=TypesafePropertySourceFactory.class, value="someconfig.conf")
public class PropertyLoader {
    // Nothing needed here
}


 类似资料:
  • 第一个twisted支持的诗歌服务器 尽管Twisted大多数情况下用来写服务器代码,但为了一开始尽量从简单处着手,我们首先从简单的客户端讲起。 让我们来试试使用Twisted的客户端。源码在twisted-client-1/get-poetry.py。首先像前面一样要开启三个服务器: python blocking-server/slowpoetry.py --port 10000 poetry

  • 问题内容: 我有一个用ResultSet作为数据成员实现Iterator的类。本质上,该类如下所示: 我如何检查ResultSet是否有另一行,所以由于ResultSet本身未定义hasNext,因此可以创建有效的hasNext方法?我当时在想查询以获取计数并管理该数字以查看是否还有另一行,但我想避免这种情况。 问题答案: 这是一个坏主意。这种方法要求连接一直保持打开状态,直到读取最后一行为止,并

  • 今天我重新开始做一个旧的rails项目。一个让我抓狂的问题是我无法运行javascript测试用例,尽管我记得在我离开项目时它们都通过了。我正在使用 selenium webdriver 2.25.0水豚1.1.2cucumber1.2.1 无法干净地启动Firefox,参数:[“-silent”](Selenium::WebDriver::Error::WebDriverError) 我想这是因

  • 我一直在研究使用MVC:Annotation-Drived标记时有哪些额外的功能,我很难消化这些结果,尤其是关于@Controller注释。我知道这和这个问题很相似,但请听我说完。 根据Spring docs @Controller注释的基本目的是充当带注释类的原型,指示其角色。dispatcher将扫描这些带注释的类,寻找映射的方法,检测@RequestMapping注释(请参见下一节)。 这听

  • 问题内容: 我想在我的项目中使用AngularJS UI Bootstrap Tabs,但是我需要它来支持路由。 例如: 据我从源代码可以看出,current 和指令不支持路由。 添加路由的最佳方法是什么? 问题答案: 要添加路由,通常使用ng- view指令。我不确定修改角度UI以支持您要查找的内容是否足够容易,但这是一个大致显示我认为您要查找的内容(这不一定是最好的方式- 希望有人可以提供为您

  • 我正在从事一个项目,我们计划使用WLP(WebSphere自由)而不是传统的WAS。 代码为不同的组件提供了ejb模块(ejb 2和3)。一个组件的EJB客户端被其他一些组件用来与EJB服务器模块通信。 我知道自由有一些ejb功能。但是,自由对 EJB 的支持/功能是否与 WAS 9 中提供的支持/功能级别相同? 自由使用EJB有哪些限制/问题?

  • 你能给我建议正确的方法来启动加密路线吗。

  • 我决定回到我的想法,将Kafka指标与Spring Boot Actuator集成,我在这里已经提到: https://github.com/spring-projects/spring-boot/issues/6227 到目前为止,我有一个单独的“沙盒”项目和工作代码,我想将其合并到Spring Boot中。现在我有点困惑了。我的部分测试需要powermock来模拟Kafka的“超级安全”类: