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

时间:2018-08-15 22:13:01

标签: spring-boot vert.x

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

我担心的是这样做的最佳实践。 无论是构造函数 或内部主要方法。以下是从构造函数

进行设置的示例
@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);
}

}

什么是最好的方法?

3 个答案:

答案 0 :(得分:2)

从Java代码内部设置系统变量不是一个好主意。 基本上,变量是为了使代码不包含任何变量值。

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

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

答案 1 :(得分:0)

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

您可以使用一个单独的类和spring注释来做到这一点,如下所示。

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

答案 2 :(得分:0)

您应该将Sample类基于您编写的特殊类。我建议使用名称BaseSettingProperties

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

这样,您可以保证在所有读取上下文和连线之前, 都将设置属性。而且,即使在include d XML中,您也可以肯定使用这些属性。

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

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

,但不能保证属性设置和include调用的顺序。因为它不是呼叫而是物理包含。并且您不能在属性设置bean上设置include的依赖关系-我没有找到它的语法:-(。另一方面,是的,我使用的是非常老的Spring 3rd版本,但是我找不到最新互联网中的解决方案。