Spring Boot:使属性不可配置

时间:2017-12-05 13:06:13

标签: java spring spring-boot

在Spring Boot中,externalize my configuration有几个选项。但是,如何才能使这些属性不可配置,即只读。

具体而言,我想将server.tomcat.max-threads设置为固定值,并且不希望启动应用程序的人有能力更改它。例如,可以通过将其作为命令行参数传递来轻松完成。

默认情况下,这可能是不可能的,也许有人可以建议解决方法?

2 个答案:

答案 0 :(得分:1)

您有2个选项

  1. 设置System.setProperty("prop", "value")属性硬编码
  2. 使用将覆盖所有其他属性的属性

  3. 设置系统属性硬编码

        public static void main(String[] args) {
          System.setProperty("server.tomcat.max-threads","200");
          SpringApplication.run(DemoApplication.class, args);
        }
    
  4. secure.properties中的属性会覆盖所有其他属性(请参阅Prevent overriding some property in application.properties - Spring Boot

    @Configuration
    public class SecurePropertiesConfig {
    
    @Autowired
    private ConfigurableEnvironment env;
    
    @Autowired
    public void setConfigurableEnvironment(ConfigurableEnvironment env) {
      try {
        final Resource resource = new 
        ClassPathResource("secure.properties");
        env.getPropertySources().addFirst(new 
            PropertiesPropertySource(resource.getFilename(), 
            PropertiesLoaderUtils.loadProperties(resource)));
      } catch (Exception ex) {
        throw new RuntimeException(ex.getMessage(), ex);
      }
    }
    

答案 1 :(得分:0)

我最终实现了ApplicationContextInitializerDocu),其initialize()方法只是以编程方式设置静态值:

@Override
public void initialize(ConfigurableApplicationContext applicationContext) {

    ConfigurableEnvironment environment = applicationContext.getEnvironment();
    Map<String, Object> props = new HashMap<>();
    props.put(MAX_THREADS, MAX_THREADS_VAL);
    environment.getPropertySources().addFirst(new MapPropertySource("tomcatConfigProperties", props));

}

此处找到了另一种可能的解决方案:Prevent overriding some property in application.properties - Spring Boot