使用Spring Boot,配置工作将会变得更加简单,我们只需要在application.properties中定义属性,然后在代码中直接使用@Value注入即可。
如下:
book.author=xxxbook.name=yyy book.pinyin=测试
这里专门设置了中文,因为中文不做特殊处理会乱码,处理方式为继续在application.properties中添加如下代码:
server.tomcat.uri-encoding=UTF-8spring.http.encoding.charset=UTF-8spring.http.encoding.enabled=truespring.http.encoding.force=true spring.messages.encoding=UTF-8
然后 在IntelliJ IDEA中依次点击File -> Settings -> Editor -> File Encodings
将Properties Files (*.properties)下的Default encoding for properties files设置为UTF-8,将Transparent native-to-ascii conversion前的勾选上。
在变量中通过@Value直接注入就行了,如下:
@Value(value = "${book.author}") private String bookAuthor; @Value("${book.name}") private String bookName; @Value("${book.pinyin}") private String bookPinYin;
类型安全的配置
刚刚说的这种方式我们在实际项目中使用的时候工作量略大,因为每个项目要注入的变量的值太多了,这种时候我们可以使用基于类型安全的配置方式,就是将properties属性和一个Bean关联在一起,这样使用起来会更加方便。我么来看看这种方式怎么实现。
1.在src/main/resources文件夹下创建文件book.properties
文件内容如下:
book.name=红楼梦book.author=曹雪芹book.price=28
2.创建Book Bean,并注入properties文件中的值
代码如下:
@Component@PropertySource(value= "book.properties")@ConfigurationProperties(prefix = "book")public class BookBean { private String name; private String author; private String price; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getPrice() { return price; } public void setPrice(String price) { this.price = price; }}
prefix是指前缀,location指定要注入文件的位置。
3.添加路径映射
在Controller中添加如下代码注入Bean:
@Autowiredprivate BookBean bookBean;
添加路径映射:
@RequestMapping("/book") public String book() { return "Hello Spring Boot! The BookName is "+bookBean.getName();}
运行效果如下:
日志配置
默认情况下Spring Boot使用Logback作为日志框架,也就是我们前面几篇博客中用到的打印日志方式,当然如果有需要我们可以手动配置日志级别以及日志输出位置,相比于我们在Spring容器中写的日志输出代码,这里的配置简直就是小儿科了,只需要在application.properties中添加如下代码:
logging.file=/home/sang/workspace/log.loglogging.level.org.springframework.web=debug
上面表示配置日志输出位置,下面配置日志级别。
Profile配置问题
Spring Boot 提供了更为简洁的方式。全局Profile配置我们使用application-{profile}.properties来定义,然后在application.properties中通过spring.profiles.active来指定使用哪个Profile。
1.在src/main/resources文件夹下定义不同环境下的Profile配置文件,文件名分别为application-prod.properties和application-dev.properties,这两个前者表示生产环境下的配置,后者表示开发环境下的配置,如下:
application-prod.properties:
server.port=8081
application-dev.properties:
server.port=8080
然后在application.properties中进行简单配置,如下:
spring.profiles.active=dev
这个表示使用开发环境下的配置。然后运行项目,我们得通过8080端口才可以访问:
如果想换为生产环境,只需要把spring.profiles.active=dev改为spring.profiles.active=prod即可,当然访问端口这时也变为8081了,如下:
SpringBoot配置时,也可以用yml来配置,用yml来配置的话,结构相对要清晰很多。
注意点:
1,原有的key,例如
server.port
,按“.”分割,都变成树状的配置
server: prot: 8081
2,key后面的冒号,后面一定要跟一个空格
#application.ymlserver: port: 8080 spring: datasource: name: test url: jdbc:mysql://127.0.0.1:3306/test username: root password: xxx
两者的区别
1.内容格式比较:
.properties文件,通过.来连接,通过=来赋值,结构上,没有分层的感觉,但比较直接。
.yml文件,通过:来分层,结构上,有比较明显的层次感,最后key赋值的:后需要留一个空格
2.执行顺序
如果工程中同时存在application.properties文件和 application.yml文件,yml文件会先加载,而后加载的properties文件会覆盖yml文件。所以建议工程中,只使用其中一种类型的文件即可。