我需要在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);
}
}
什么是最好的方法?
答案 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版本,但是我找不到最新互联网中的解决方案。