我需要在 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 注释来执行此操作,如下所示。
@Profile("production")
@Component
public class ProductionPropertySetter {
@PostConstruct
public void setProperty() {
System.setProperty("http.maxConnections", 15);
}
}
从 Java 代码内部设置系统变量不是一个好主意。 基本上,变量的目的是使代码不具有任何变量值。
使用属性文件来存储您的配置。 Spring Boot 在外部化您的配置方面做得很好。 它还允许您在单独的文件中进行环境配置,并在初始化方面做得很好。
参考https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
您的示例类应该基于您编写的特殊类。我建议命名为 BaseSettingProperties
public class TestBaseWithProperties extends AbstractTestNGSpringContextTests {
{
System.setProperty("name.of.property", "value/of/property");
}
}
通过这种方式,您可以保证在所有读取上下文和接线之前真正设置属性。即使在include
d XML 中,您也肯定可以使用这些属性。
<bean id="prop" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="file.of.needed.properties" />
</bean>
,但不能保证属性设置和
include
调用的顺序。因为它不是呼唤而是物理的包含。并且您无法在属性设置 bean 上设置
include
的依赖关系 - 我发现没有语法:-(。另一方面,是的,我使用非常旧的 Spring 第三版,但我找不到解决方案在最近的互联网上。