JAVA读取Java配置文件属性
前言
一、读取配置的意义
读取Java配置文件属性为您提供了一种灵活、可配置和可维护的方式来管理应用程序的属性。它使您能够动态地调整应用程序的行为,并为应用程序提供了更高的安全性和可移植性。
二、使用方法
方法一:@Value
demo.name=louis
demo.age=20
属性注入
@Component
public class ReadByValue {
@Value("${demo.name}")
private String name;
}
方法二:@ConfigurationProperties
demo.name=louis
demo.age=20
属性注入
@Component
@ConfigurationProperties(prefix = "demo")
public class ReadByConfigurationProperties {
private String name;
private Int age;
方法三:@PropertySource
@PropertySource是一个注解,用于指定要加载的属性文件的位置和名称。它是Spring框架中的一个特性,用于从属性文件中读取配置信息。需要确保已经配置了一个用于加载属性文件的PropertySourcesPlaceholderConfigurer bean。这个bean可以通过使用@Configuration注解和@Bean注解在Spring配置类中进行配置。
@Configuration
@PropertySource("classpath:config.properties")
public class AppConfig {
@Autowired
private Environment environment;
// ...
// 其他配置和Bean定义
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
// ...
// 其他配置和Bean定义
}
属性注入
@Configuration
@PropertySource("classpath:config.properties")
public class SomeClass {
@Autowired
private Environment environment;
public void someMethod() {
String propertyValue = environment.getProperty("propertyName");
// 使用属性值进行操作
}
// ...
// 其他方法和逻辑
}
方法四:@PropertySource@EnableConfigurationProperties
@SpringBootApplication
@EnableConfigurationProperties(MyProperties.class)
public class MyAppApplication {
// 主应用程序类的代码
// ...
}
在上述示例中,@EnableConfigurationProperties注解用于启用@ConfigurationProperties注解,并指定要注册的配置类为MyProperties.class。这意味着MyProperties类将成为一个被Spring管理的bean,并且可以使用@ConfigurationProperties注解来绑定配置属性。
接下来,您需要在MyProperties类中使用@ConfigurationProperties注解,并指定属性的前缀,以便从配置文件中加载对应的属性值。
@ConfigurationProperties(prefix = "myapp")
public class MyProperties {
private String property1;
private int property2;
// 其他属性和getter/setter方法
}
在上述示例中,@ConfigurationProperties注解指定了属性的前缀为"myapp",这意味着Spring Boot将尝试从配置文件中加载以"myapp"为前缀的属性值,并将它们绑定到MyProperties类的对应属性上。
最后,在需要使用配置属性的地方,可以通过@Autowired注解将MyProperties类的实例注入到其他类中,并使用其中的属性值。
@Service
public class MyService {
private final MyProperties myProperties;
@Autowired
public MyService(MyProperties myProperties) {
this.myProperties = myProperties;
}
public void doSomething() {
String property1Value = myProperties.getProperty1();
int property2Value = myProperties.getProperty2();
// 使用属性值进行操作
}
}
通过@Autowired注解将MyProperties实例注入到MyService类中,并使用其中的属性值进行操作。@EnableConfigurationProperties注解用于启用@ConfigurationProperties注解,并将@ConfigurationProperties注解的类作为Spring的bean进行注册。它使得我们能够方便地将配置属性值注入到应用程序中的对应类中,从而实现了配置属性的自动绑定和注入。
方法五:@ConfigurationPropertiesScan
@ConfigurationPropertiesScan是Spring Boot 2.2版本及以上引入的注解。它的作用是自动扫描和注册使用@ConfigurationProperties注解的类作为Spring的bean。在使用@ConfigurationProperties注解时,通常需要在主应用程序类上添加@ConfigurationPropertiesScan注解,以便让Spring Boot自动扫描和注册这些类作为bean。这样就不需要手动在每个@ConfigurationProperties类上使用@Component或@Configuration注解了。
@SpringBootApplication
@ConfigurationPropertiesScan
public class MyAppApplication {
// 主应用程序类的代码
// ...
}
@ConfigurationPropertiesScan注解用于告诉Spring Boot自动扫描并注册使用@ConfigurationProperties注解的类。它会在应用程序的类路径下进行扫描,并将这些类作为Spring的bean进行注册。
@ConfigurationProperties(prefix = "myapp")
public class MyAppProperties {
private String property1;
private int property2;
// 其他属性和getter/setter方法
}
@ConfigurationProperties注解指定了属性的前缀为"myapp",这意味着Spring Boot将尝试从配置文件中加载以"myapp"为前缀的属性值,并将它们绑定到MyAppProperties类的对应属性上。
@Service
public class MyService {
private final MyAppProperties myAppProperties;
@Autowired
public MyService(MyAppProperties myAppProperties) {
this.myAppProperties = myAppProperties;
}
public void doSomething() {
String property1Value = myAppProperties.getProperty1();
int property2Value = myAppProperties.getProperty2();
// 使用属性值进行操作
}
}
通过@Autowired注解将MyAppProperties实例注入到MyService类中,并使用其中的属性值进行操作。
三、什么情况数据写在配置文件里
1、配置参数:将应用程序的配置参数存储在配置文件中是一种常见的做法。这些参数可以包括数据库连接信息、服务器端口、日志级别、缓存大小等。通过将这些参数写在配置文件中,可以在不修改代码的情况下进行配置的更改。
2、环境配置:在不同的环境中(如开发、测试和生产)使用不同的配置是常见的需求。通过将环境特定的配置写在不同的配置文件中,可以根据当前的运行环境加载相应的配置文件。这样,您可以轻松地在不同的环境中部署应用程序,而不需要修改代码。
3、敏感信息:敏感信息如密码、API密钥等不应该直接硬编码在代码中。将这些敏感信息存储在配置文件中,并使用适当的访问控制来保护文件,可以提高应用程序的安全性。
4、外部资源路径:如果应用程序需要访问文件系统、URL、存储桶等外部资源,将这些资源的路径或连接信息存储在配置文件中是很有帮助的。这样,在需要修改或切换资源时,只需要更新配置文件,而不需要修改代码。
5、国际化和本地化:在多语言环境中,将本地化文本、消息和格式设置存储在配置文件中是常见的做法。通过在配置文件中定义不同语言的键值对,应用程序可以根据用户的语言设置来读取相应的本地化内容。
将数据写在配置文件中的主要目的是提供一种灵活、可配置和可维护的方式来管理应用程序的属性和参数。这样可以在不修改代码的情况下进行配置的更改,并允许应用程序在不同的环境中运行。此外,通过将敏感信息和外部资源路径等内容存储在配置文件中,可以提高应用程序的安全性和可移植性。