如何使用 Spring 从属性文件中读取
Posted
技术标签:
【中文标题】如何使用 Spring 从属性文件中读取【英文标题】:How to read from a properties files using 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();
我认为上面的内容甚至还不太接近。我确信这更简单,我正在努力做到这一点。
【问题讨论】:
【参考方案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 允许您提取属性。以后做什么取决于你自己。 是的,这就是我要问的。从属性文件中读取数据后,我无法在网上找到任何显示如何实际使用数据的内容以上是关于如何使用 Spring 从属性文件中读取的主要内容,如果未能解决你的问题,请参考以下文章
@ServiceActivator 如何在 Spring Boot 中从属性文件中读取 inputChannel?
spring boot 入门1-----如何使用@Value注解读取配置文件以及使用@ConfigrationProperties注解