如何在 Spring Boot 应用程序中设置系统属性

问题描述 投票:0回答:3

我需要在 Spring Boot 应用程序中设置系统属性。 我不想从命令行设置它。

我关心的是最好的做法是什么。 要么来自构造函数 或者在 main 方法中。下面是从构造函数设置它的示例

@SpringBootApplication
class Sample{
@Autowired
protected TempInfoDao tempInfoDao;

public Sample{
   //Setting System property inside constructor
    System.setProperty("vertx.hazelcast.config","./config/cluster.xml");
}

/**
 * @param args
 */
public static void main(String[] args) {
    SpringApplication.run(Sample.class, args);
}

}

最好的方法是什么?

spring-boot vert.x
3个回答
3
投票

在构造函数中设置系统属性不是一个好方法。

您可以使用单独的类和 spring 注释来执行此操作,如下所示。

@Profile("production")
@Component
public class ProductionPropertySetter {
    @PostConstruct
    public void setProperty() {
       System.setProperty("http.maxConnections", 15);
    }
}

2
投票

从 Java 代码内部设置系统变量不是一个好主意。 基本上,变量的目的是使代码不具有任何变量值。

使用属性文件来存储您的配置。 Spring Boot 在外部化您的配置方面做得很好。 它还允许您在单独的文件中进行环境配置,并在初始化方面做得很好。

参考https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html


0
投票

您的示例类应该基于您编写的特殊类。我建议命名为 BaseSettingProperties

public class TestBaseWithProperties extends AbstractTestNGSpringContextTests {
    {
         System.setProperty("name.of.property", "value/of/property");
    }
}

通过这种方式,您可以保证在所有读取上下文和接线之前真正设置属性。即使在included XML 中,您也肯定可以使用这些属性。

可以通过将属性放入某些 file.of.needed.properties 中并使用它来在 beans 中设置变量

<bean id="prop" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations" value="file.of.needed.properties" /> </bean>

,但不能保证属性设置和
include

调用的顺序。因为它不是呼唤而是物理的包含。并且您无法在属性设置 bean 上设置

include
的依赖关系 - 我发现没有语法:-(。另一方面,是的,我使用非常旧的 Spring 第三版,但我找不到解决方案在最近的互联网上。
    

© www.soinside.com 2019 - 2024. All rights reserved.