SpringBoot中实用@Value注入配置文件中的配置
1 简介
出差时,记得想要自动获取项目启动的host和端口号时,起初自己使用了监听器的机制,但发现当电脑具有多个ip时,会出现错误,随后就选择了使用配置文件中配置的方式来获取项目对应的tomcat地址。当时就是使用@Value注解来做的。
2 实践
2.1 项目结构
项目主要有config包,其中ServerConfig类负责从外部配置文件application.properties中读入tomcat开头的配置。controller包中TestValue则是测试注入是否成功,整个项目为web架构。
2.2pom.xml
为了避免繁琐的getter/setter取值设值函数,引入了Lombok插件,插件可以从IntelliJ Lombok plugin下载,注意要根据IDEA的相应版本下载,或者直接在pom文件中引入相应的dependency也可以。
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.31</version>
</dependency>
其中fastjson是为了数据处理方便引入的,主要是为了JSON数据的处理。
2.2 application.properties
2.2.1 server配置
server.port=9090
server.servlet.context-path=/helloboot
tomcat.ip=192.168.1.110
tomcat.port=8787
tomcat.projectName=screenshot
logging.file=log.log
logging.level.org.springframework.web: DEBUG
在配置文件中通过设置前两项配置的结果是当前项目被部署在9090端口,并且要访问相应的Controller要添加/helloboot前缀。这可以通过在控制台中得到验证。
Tomcat started on port(s): 9090 (http) with context path '/helloboot'
2.2.2 logging配置
logging.file=log.log
logging.level.org.springframework.web=debug
logging.level.com.wisely.ch5_2_2=debug
为日志配置,表示要在当前目录下生成配置文件。随后的两个则是要为org.springframework.web中的日志级别调整为debug,并且案例所在包日志级别也为debug。
- logging.path
该属性用来配置日志文件的路径 - logging.file
该属性用来配置日志文件名,如果该属性不配置,默认文件名为spring.log
关于Spring Boot的日志级别默认为INFO,关于日志配置的内容,参见博客Spring Boot系列——日志配置
2.2.3 tomcat配置
关于tomcat起头的三个配置,则是实践中关注的重点,要把这三个值注入到Bean中为我们使用。
2.3 ServerConfig使用@Value注入
package com.wisely.ch5_2_2.config;
import lombok.extern.java.Log;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
/**
* 获得项目所在的tomcat配置
*
* @Owner:
* @Time: 2019/3/31-16:15
*/
@Service
@Log
public class ServerConfig {
@Value("${tomcat.ip}")
@lombok.Getter
private String ip;
@Value("${tomcat.port}")
@lombok.Getter
private int port;
@Value("${tomcat.projectName}")
@lombok.Getter
private String projectName;
public String getUrl() {
log.info("Enter getUrl");
return "http://"+getIp()+":"+getPort()+"/"+getProjectName();
}
}
在该类中,使用Lombok,可以看到通过这个插件的使用,可以大大减少冗长的取值/设值函数的编写,有利于清晰的看到主要函数的逻辑,是个非常好的工具,通过@Log注解为类注入了一个默认的日志对象log.直接使用即可。
关于Lombok插件的使用,参见博客Lombok介绍、使用方法和总结。在本篇博客中,这非重点,不再赘述。
ServerConfig类的工作很简单,直接注入配置文件中的tomcat起头的三个配置,读入Bean中。可以看到在Spring Boot中不再需要@PropertySource指明properties文件的位置,在Spring Boot中只需在application.properties定义属性,直接使用@Value注入即可。
2.4 TestValue 通过Controller进行测试
package com.wisely.ch5_2_2.controller;
import com.alibaba.fastjson.JSONObject;
import com.wisely.ch5_2_2.config.ServerConfig;
import lombok.extern.java.Log;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.UUID;
/**
* 测试注入
*
* @Owner:
* @Time: 2019/3/31-16:29
*/
@RestController
@Log
public class TestValue {
@Autowired
private ServerConfig serverConfig;
@RequestMapping(value = "/getImg",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public String getImgeLoc() {
log.info("Enter getImgeLoc");
System.out.println("-- Handling --");
String fileName = UUID.randomUUID().toString()+".jpg";
JSONObject result = new JSONObject();
result.put("imgUrl", serverConfig.getUrl()+"/"+fileName);
System.out.println("-- over --");
return result.toJSONString();
}
}
该类比较简单,并没有复杂的内容,不再赘述。
2.5启动类 Ch522Application
package com.wisely.ch5_2_2;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
public class Ch522Application {
public static void main(String[] args) {
SpringApplication.run(Ch522Application.class, args);
}
}
3运行结果
3.1使用Restful测试结果
3.2 单步调试
把断点放进getUrl函数中,可以看到如下的结果:
三个值可以成功取到。
3.4 控制台输出
2019-03-31 17:14:31.665 INFO 13736 --- [nio-9090-exec-2] com.wisely.ch5_2_2.controller.TestValue : Enter getImgeLoc
-- Handling --
2019-03-31 17:14:32.189 INFO 13736 --- [nio-9090-exec-2] com.wisely.ch5_2_2.config.ServerConfig : Enter getUrl
-- over --
4 总结
这个小博客是个比较综合的博客,可以从博客中看到Spring Boot中日志配置,Lombok的使用,以及从application.properties文件中注入配置,通过这个小博客,希望能够帮助读者理解@Value的灵活性。
2019-03-31于南京理工大学四教A110