正文来袭......

前言

(一). Spring Boot 的端口配置

(二). 使用XML配置

(三). 命令行参数配置

(四). 常规属性配置

(五). 类型安全的配置(基于properties)

(六). 日志配置

(七). Profile配置

 

spring boot dependencies 选择_properties文件

 

(一). 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 配置来讲解 调整后的运行结果如下:
 

spring boot dependencies 选择_spring_02

 

(二). 使用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. 浏览器访问,获取注入信息

spring boot dependencies 选择_spring_03

有些小伙伴在配置文件中添加的是中文,或者输出信息也是中文,这样就牵涉到两个地方的乱码问题

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前的勾选上。

如下图 :
 

spring boot dependencies 选择_properties文件_04

到此常规属性配置 小伙伴们应该都会了,是不是很有成就感......

(五). 类型安全的配置(基于properties)

上面使用@Value注入每个配置在实际项目开发中肯定是非常麻烦的,毕竟我们的配置一般都是多个的,若使用上面的方式就需要我们使用@Value注入很多次。

当然这种情况SpringBoot也考虑到了,同时提供了基于类型安全的配置方式,通过@ConfigurationProperties  将preporties属性和一个Bean及其属性关联,来实现类型安全的配置。

实例如下:

1. 在src/main/resources文件夹下创建文件eat.properties 文件 ,添加属性值
 

spring boot dependencies 选择_properties文件_05

spring boot dependencies 选择_spring_06

 

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.运行结果

spring boot dependencies 选择_spring_07

(六). 日志配置

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,这两个前者表示生产环境下的配置,后者表示开发环境下的配置,如下:

spring boot dependencies 选择_spring_08

我们分别再两个不同的文件中添加,启动的端口,

1,application-pro.properties 下配置端口 为8082
server.port=8082
2,application-dev.properties 下配置端口为8081
server.port=8081

在application.properties 文件中进行配置 。

spring.profiles.active=dev

运行结果:

默认我们使用 dev的配置运行项目:

spring boot dependencies 选择_spring_09

 

如果想换为生产环境,只需要把spring.profiles.active=dev改为spring.profiles.active=pro即可,这时候访问端口这是也变为8082了,如下:

spring boot dependencies 选择_配置文件_10

本案例下载地址:

https://github.com/ProceduralZC/itcxzc/tree/master/springboot_2

好了,感兴趣的小伙伴关注我,一起讨论。

作者:小小蒲公英