正文来袭......
前言
(一). Spring Boot 的端口配置
(二). 使用XML配置
(三). 命令行参数配置
(四). 常规属性配置
(五). 类型安全的配置(基于properties)
(六). 日志配置
(七). Profile配置
(一). Spring Boot 的端口配置
Spring boot使用一个全局的配置文件,application.properties或者application.yml放置在src/main/resources目录或者类路径的/config下。
SpringBoot不仅支持常规的properties配置文件,还支持yaml语言的配置文件,yaml是以数据为中心的语言,在配置数据的时候具有面向对象的特征。
application.properties是比较常见的配置文件,SpringBoot的全局配置文件的作用是对一些默认配置的配置值进行修改。
下面我们以 默认端口和默认访问路径为例:我们将Tomcat的默认端口8080修改成8081,并将默认的访问路径 “/hello”修改为“/springboot/hello”
1. 在配置文件 application.properties 中添加配置信息
server.port=8081
server.servlet.context-path=/springboot
2,或者在配置文件application.yml中添加
server:
port: 8081
contextPath: /springboot
上面说明了两种配置信息的添加,我们以第一种 application.properties 配置来讲解 调整后的运行结果如下:
(二). 使用XML配置
SpringBoot提倡零配置,就是说不要xml配置,但是在项目开发中,我们会遇到一些特殊要求下必须通过配置xml方式来实现,这样你不得不添加xml配置,我们可以通过Spring提供的@ImportResource来加载xml配置
实例如下:
@ImportResource({"classpath:some-context.xml","classpath:another-context.xml"})
(三). 命令行参数配置
SpringBoot可以是基于jar包和war包运行的,打成jar包的程序可以直接通过命令行运行:
java -jar xxx.jar
当然更方便的是可以通过命令行修改Tomcat的端口:
java -jar xxx.jar --server.port=8081
至此你的运行端口可以任由你来改动。
(四). 常规属性配置
在常规的Spring环境下,注入properties文件里的值的方式,通过@PropertySource指明properties文件的位置,然后通过@Value注入值,但是在SpringBoot中就简单多了,只需要我们在application.properties文件中定义属性,直接使用@Value注入就可以了。
1. application.properties 中添加属性
game.enterprise=腾讯
game.name=斗地主
game.taste=true
2. 在接口类中通过@Value直接注入
@Value("${game.enterprise}")
private String gameEnterprise;
@Value("${game.name}")
private String gameName;
@Value("${game.taste}")
private String taste;
3. 修改接口调用函数 Test
@GetMapping(value = "/hello",produces = "text/plain;charset=UTF-8") //RequestMapping ,GetMapping是一个用来处理请求地址映射的注解,可用于类或方法上
public String Test(){
return "SpringBoot 第一个项目,单独一个控制类中添加--游戏公司:"+gameEnterprise+"---游戏名称:"+gameName
+"---是否感兴趣:"+taste;
}
完整代码如下:
package org.cxzc.myyoung.springboot_2;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
// @RestController等于@Controller,@ResponseBody两个注解,注解为止在controller类上,相当于整个类中所有方法的返回值都为json字符串
//如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,或者html,配置的视图解析器
// InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。
@RestController
public class HelloController {
@Value("${game.enterprise}")
private String gameEnterprise;
@Value("${game.name}")
private String gameName;
@Value("${game.taste}")
private String taste;
@GetMapping(value = "/hello",produces = "text/plain;charset=UTF-8") //RequestMapping ,GetMapping是一个用来处理请求地址映射的注解,可用于类或方法上
public String Test(){
return "SpringBoot 第一个项目,单独一个控制类中添加--游戏公司:"+gameEnterprise+"---游戏名称:"+gameName
+"---是否感兴趣:"+taste;
}
}
4. 浏览器访问,获取注入信息
有些小伙伴在配置文件中添加的是中文,或者输出信息也是中文,这样就牵涉到两个地方的乱码问题
1, 输出信息乱码,我们在页面显示的时候需要中文说明,这样就会出现乱码问题,如下:
public String Test(){
return "SpringBoot 第一个项目,单独一个控制类中添加--游戏公司:"+gameEnterprise+"---游戏名称:"+gameName
+"---是否感兴趣:"+taste;
}
解决办法:
请求接口注解中添加字符格式
@GetMapping(value = "/hello",produces = "text/plain;charset=UTF-8")
2,application.properties配置文件中设置中文,浏览器访问出现乱码,如下
game.enterprise=腾讯
game.name=斗地主
game.taste=true
解决办法:在配置文件application.properties中添加属性
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.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前的勾选上。
如下图 :
到此常规属性配置 小伙伴们应该都会了,是不是很有成就感......
(五). 类型安全的配置(基于properties)
上面使用@Value注入每个配置在实际项目开发中肯定是非常麻烦的,毕竟我们的配置一般都是多个的,若使用上面的方式就需要我们使用@Value注入很多次。
当然这种情况SpringBoot也考虑到了,同时提供了基于类型安全的配置方式,通过@ConfigurationProperties 将preporties属性和一个Bean及其属性关联,来实现类型安全的配置。
实例如下:
1. 在src/main/resources文件夹下创建文件eat.properties 文件 ,添加属性值
2. 创建类型 安全的Bean,并注入properties文件中的值,代码如下:
package org.cxzc.myyoung.springboot_2;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
/**
* @Auther 追梦蜗牛
* @ABOUT 公众号 程序职场
* @CONTENT 描述信息
*/
@Component
@ConfigurationProperties(prefix = "eat")
@PropertySource("classpath:eat.properties")
public class EatFood {
private String eatName;
private int eatprice;
public String getEatName() {
return eatName;
}
public void setEatName(String eatName) {
this.eatName = eatName;
}
public int getEatprice() {
return eatprice;
}
public void setEatprice(int eatprice) {
this.eatprice = eatprice;
}
}
代码解释:
1. 通过@ConfigurationProperties(prefix = "eat") 加载properties文件内的配置,通过 prefix属性指定properties的配置的前缀,通过@PropertySource 指定文件的位置(1.4之前是通过 location指定properties的文件位置)
3. 在接口控制类中通过@Autowired注入该配置中的Bean
@Autowired
private EatFood eatFood;
4. 添加路径映射
@GetMapping(value = "/prope",produces = "text/plain;charset=UTF-8")
public String Test2(){
return "喜欢吃什么:"+eatFood.getEatName()+"---价格是多少:"+eatFood.getEatprice();
代码如下:
package org.cxzc.myyoung.springboot_2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
// @RestController等于@Controller,@ResponseBody两个注解,注解为止在controller类上,相当于整个类中所有方法的返回值都为json字符串
//如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,或者html,配置的视图解析器
// InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。
@RestController
public class HelloController {
@Autowired
private EatFood eatFood;
@GetMapping(value = "/prope",produces = "text/plain;charset=UTF-8")
public String Test2(){
return "喜欢吃什么:"+eatFood.getEatName()+"---价格是多少:"+eatFood.getEatprice();
}
}
5.运行结果
(六). 日志配置
SpringBoot 支持JavaUtil Logging,Log4j,Log4j2,和Logback作为日志框架,无论使用哪种日志框架,SpringBoot都为使用日志框架的控制台输出及其文件输出做好了配置。
默认情况下,SpringBoot使用LogBack作为日志框架。
1. 配置日志文件
logging.file=d:/log/log.log
2. 配置日志级别(格式:logging.level.包名=级别)
logging.level.org.springframework.web=debug
完整配置:
logging.file=d:/log/log.log
logging.level.org.springframework.web=debug
配置完日志配置后,启动项目,会在配置路径看到对应的日志文件。
(七). Profile配置
Profile是 SpringBoot 用来针对不同的环境对应不同的配置提供支持的,全局Profile配置使用application-{profile}.properties,例如:application-dev.properties
通过在application.properties中设置 spring.profiles.active=prod来指定使用哪个配置。
我们以开发环境和正式环境的配置为例:
1,在src/main/resources文件夹下定义不同环境下的Profile配置文件,文件名分别为application-pro.properties和application-dev.properties,这两个前者表示生产环境下的配置,后者表示开发环境下的配置,如下:
我们分别再两个不同的文件中添加,启动的端口,
1,application-pro.properties 下配置端口 为8082
server.port=8082
2,application-dev.properties 下配置端口为8081
server.port=8081
在application.properties 文件中进行配置 。
spring.profiles.active=dev
运行结果:
默认我们使用 dev的配置运行项目:
如果想换为生产环境,只需要把spring.profiles.active=dev
改为spring.profiles.active=pro
即可,这时候访问端口这是也变为8082了,如下:
本案例下载地址:
https://github.com/ProceduralZC/itcxzc/tree/master/springboot_2
好了,感兴趣的小伙伴关注我,一起讨论。
作者:小小蒲公英