通过@Value注解读取.properties配置内容

本文展示了一个使用Spring框架进行属性注入的例子。通过配置文件读取数据库连接字符串,并将其注入到控制器类中。此示例使用了PropertiesFactoryBean来加载外部配置文件,并利用PreferencesPlaceholderConfigurer进行属性占位符的解析。
@Controller
@RequestMapping("/value")
public class ValuePropertyController extends ApplicationController{
    
	@Value("#{configProperties['jdbc.jdbcUrl']}")
	private String jdbcUrl; 
	
	@RequestMapping
	public String value(){
		System.out.println(jdbcUrl);
		return "";
	}
}


applicationContext.xml

<bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
       <property name="locations">
           <list>
               <value>classpath:database.properties</value>
           </list>
       </property>
    </bean>
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
        <property name="properties" ref="configProperties" />
    </bean>

database.properties

jdbc.jdbcUrl=jdbc:mysql://localhost:3306/commentDemo?useUnicode=true&characterEncoding=UTF-8
在 Spring Boot 应用程序中,可以通过 `@Value` 注解从 `application.yml` 配置文件中读取属性值,并将其注入到 Bean 的字段中。这种机制简化了配置管理,并提升了代码的可维护性。 ### 使用 `@Value` 注解读取 `application.yml` #### 1. 配置文件结构 假设在 `application.yml` 中定义了如下配置内容: ```yaml name: John Doe age: 30 manInfo: "This is a test information" myname: WangZiBin spring: redis: host: localhost port: 6379 ``` #### 2. 注入简单属性 在控制器或服务类中,可以直接通过 `@Value` 注解注入 `application.yml` 中的简单属性值。例如: ```java @RestController public class GetManInfo { @Value("${age}") private int age; @Value("${name}") private String name; @Value("${manInfo}") private String manInfo; @Value("${myname}") private String myName; @RequestMapping(value = "/getAge", method = RequestMethod.GET) public int getAge() { return age; } @RequestMapping(value = "/getName", method = RequestMethod.GET) public String getName() { return name; } @RequestMapping(value = "/getManInfo", method = RequestMethod.GET) public String getManInfo() { return manInfo; } @GetMapping("/getMyName") public String getMyName() { return myName; } } ``` #### 3. 注入嵌套属性 对于嵌套结构的属性(例如 `spring.redis.host`),也可以通过 `@Value` 注解注入到配置类中: ```java @Configuration public class JedisConfig { private static final Logger jedisConfigLogger = LoggerFactory.getLogger(JedisConfig.class); @Value("${spring.redis.host:#{null}}") private String host; @Value("${spring.redis.port:#{null}}") private Integer port; public String getHost() { return host; } public void setHost(String host) { this.host = host; } public Integer getPort() { return port; } public void setPort(Integer port) { this.port = port; } } ``` #### 4. 使用 Kotlin 示例 在 Kotlin 中,同样可以使用 `@Value` 注解来注入属性值: ```kotlin @RestController class TestController { @Value("\${myname}") private val st: String? = null @GetMapping("/aaaaa") fun test() { println(st) } } ``` ### 注意事项 - **默认值处理**:如果配置文件中未定义某个属性,可以通过 `@Value("${property.name:default_value}")` 的方式指定默认值。 - **SpEL 表达式**:`@Value` 支持 Spring Expression Language (SpEL),例如 `@Value("#{systemProperties['user.name']}")`。 - **配置类与组件扫描**:确保使用 `@Value` 的类被 Spring 管理(如使用 `@Component`、`@Service`、`@RestController` 或 `@Configuration` 注解)。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值