【问题标题】:System properties overrides local propreties under WindowsWindows下系统属性覆盖本地属性
【发布时间】:2015-03-23 07:33:54
【问题描述】:
@Configuration
@EnableTransactionManagement
@PropertySource(value = "classpath:/properties.properties")
public class DataBaseConfig {

@Resource
private Environment env;

@Bean
public DataSource dataSource() {

    String username = env.getProperty(ConfigurationProperties.DATABASE_USERNAME);
    env.getProperty("username : " + username);

    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    //some code
    return dataSource;
}

}

我有问题。当我使用 Environment 加载我的属性时,如果它们具有相同的名称,它会将它们替换为系统属性。例如,当我尝试从我的属性文件中加载属性“用户名”时,它会被系统属性“用户名”替换。我知道环境不仅包含我的属性,还包含来自其他来源的其他属性,包括系统属性,但我不知道如何影响它们的顺序。这里最奇怪的是这段代码在 Linux 下运行良好并加载了我需要的属性。但在 Windows 下,它会加载系统属性。我从来没有处理过这种情况,所以我会很感激任何帮助。

【问题讨论】:

    标签: java spring properties


    【解决方案1】:

    您不需要使用环境类型的 Bean。如果你已经定义了@PropertySource,你可以使用@Value("...")。在这种情况下:

    @Value("${username}") 
    

    请试一试。

    【讨论】:

    • 我知道这种方式。但问题是我有很多属性,而不是唯一的。那将是稍微难看的代码。我仍然没有这样做的第二个原因是使用 Environment 是一个标准解决方案,它在许多 spring 教程中作为示例给出,包括官方的 spring 教程。所以我很想知道是什么导致了Windows下出现这种不可预知的结果。
    • 为什么不使用 db.username 这样的前缀来防止双重含义?
    猜你喜欢
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2013-07-19
    • 2012-07-23
    • 1970-01-01
    • 2014-10-06
    相关资源
    最近更新 更多