【问题标题】:How to read from a properties files using Spring如何使用 Spring 从属性文件中读取
【发布时间】:2020-06-17 11:39:39
【问题描述】:

我想使用 Spring 从一个属性文件中读取一个 URL、一个用户名和一个密码。我在网上阅读了很多示例,它们或多或少看起来都一样,但我就是不明白。

一个说example 显示了两个使用@value 注释的类似方法,另一个是使用Environment env,但使用后者的每个示例都说使用env.getProperty(),但是该对象似乎不存在该方法?使用@value 我不明白称为sampleService 的方法。我应该创建一个对象类吗?

     @Configuration
     @PropertySource("classpath:src/main/resources/config.properties")
     public class EnvironmentConfig {

    @Value("${config.properties}")
     public static String url;

    @Value("${config.properties}")
    public static String username;

    @Value("${config.properties}")
    public static String password;

    @Bean
    public static DataSource logInSetup() {

        DriverManagerDataSource login = new DriverManagerDataSource();
        login.setUrl(url);
        login.setUsername(username);
        login.setPassword(password);

        return login;
     }

     @Bean
     public static PropertySourcesPlaceholderConfigurer placeHolderConfigurer() {

      return new PropertySourcesPlaceholderConfigurer();

我认为上面的内容甚至还不太接近。我确信这更简单,我正在努力做到这一点。

【问题讨论】:

    标签: java spring properties-file


    【解决方案1】:

    如果您的属性文件类似于:

    url=...
    username=...
    password=...
    

    你可以这样写:

    @Configuration
    @PropertySource("classpath:src/main/resources/config.properties")
    public class EnvironmentConfig {
    
      @Bean
      public DataSource logInSetup(@Value("${url}") String url, @Value("${username}") String username, @Value("${password}") String password) {
    
            DriverManagerDataSource login = new DriverManagerDataSource();
            login.setUrl(url);
            login.setUsername(username);
            login.setPassword(password);
            return login;
       }
    }
    

    你应该在所有地方删除static。避免在 Spring 中使用静态。

    而且你不需要 PropertySourcesPlaceholderConfigurer 作为 bean。这就是 PropertySource 注释应该做的。无论如何,避免在 Spring 中使用 new。特别是对于春季课程。如果你这样做,很可能是一个错误。

    顺便说一句,config.properties 的 url 很可能不正确,应该只是 @PropertySource("classpath:config.properties")@PropertySource("classpath:/config.properties")

    【讨论】:

    • 即便如此,我仍然不清楚如何从返回的对象中提取值。当我调用它时,它应该是什么样子?我需要创建 get 方法吗?
    • 我想我写的正是你如何提取值:你可以将带有属性名称的值注释添加到使用 Bean 注释的方法的参数中。另一种方法与您所做的类似:将值添加到配置类成员。确保它们不是静态的。
    • 我的意思是如何从对象登录中提取它们,因为没有 get 方法?
    • 您是问设置后如何从 DriverManagerDataSource 中提取它们吗?不知道,什么是 DriverManagerDataSource?如果你需要在别处访问这些数据,为什么不设置在别处呢?无论如何,这不是春天的问题。 Spring 允许您提取属性。以后做什么取决于你自己。
    • 是的,这就是我要问的。从属性文件中读取数据后,我无法在网上找到任何显示如何实际使用数据的内容
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    相关资源
    最近更新 更多