SpringBoot个性化配置

在上一篇中咱们简单的介绍了SpringBoot项目的建立及其启动方式。在这一篇中咱们主要介绍一下SpringBoot项目的个性化配置。由于经过上一篇中知识咱们知道SpringBoot项目的默认端口为8080,那若是我要修改这个默认端口,应该怎么改呢?又好比SpringBoot项目在启动时,默认是没有项目名字的,那若是咱们想要添加本身喜欢的项目名字又该怎么办呢?这些都在这一篇的内容中。好了,下面咱们详细介绍一下怎么修改SpringBoot项目中的默认配置。java


修改默认端口

  在上一篇的SpringBoot项目中咱们看到在resources目录中有一个application.properties文件,这个文件就是让咱们个性化配置SpringBoot项目参数的,也就是说,在这个文件中按照SpringBoot为咱们提供的参数名,就能够直接修改SpringBoot项目的默认参数。下面咱们尝试修改SpringBoot项目的默认端口。具体修改以下:git

  在application.properties文件中添加下面的参数,而后,启动application.properties文件项目便可。github

server.port=8081

  而且若是咱们使用IDEA开发工具时,当咱们在在application.properties文件中输入参数时,IDEA就会自动为咱们提供相关参数提示,这样方便咱们修改。也就是以下图所示:web

  title

  这时咱们启动SpringBoot项目而且用8080端口访问项目时,发现已经找不到服务了。spring

  title

  而若是咱们用访问8081端口访问项目,则发现服务能够正常访问。这就说明,咱们已经成功将SpringBoot项目的默认端口修改成8081端口了。springboot

  title

  虽然上面的方式已经成功的修改了SpringBoot项目的默认参数,但在实际的开发中,并不推荐使用application.properties文件的方式修改,由于在SpringBoot项目中有更推荐的方式。也就是使用yml文件的方式。app


application.yml文件

  使用yml文件的方式修改默认参数,也比较简单,也就是把application.properties文件文件修改成application.yml文件便可。惟一不一样的方式,就是yml文件有本身独特的语法,和properties文件不一样,能够省略不少参数,而且浏览比较直观。下面咱们尝试用yml文件的方式,将SpringBoot的端口修改成8082端口。ide

  title

  启动项目后访问刚刚的8081端口,发现项目已经访问不了。spring-boot

  title

  这时咱们访问8082端口,发现项目访问又正常了,这就说明咱们使用yml的方式修改SpringBoot的默认参数方式成功了。工具

  若是咱们访问http://localhost:8082/jilinwu...地址,便可看到SpringBoot接口返回的数据。

  title

修改默认项目名

  下面咱们还将使用yml的方式配置SpringBoot项目的项目名。具体参数以下:

server:
  port: 8082
  context-path: /springboot

  咱们继续启动项目而后依然访问http://localhost:8082/jilinwu...地址,这时发现接口访问失败。

  title

  而后咱们访问http://localhost:8082/springb...地址,发现服务又可正常访问了。

  title


获取配置文件中参数

  在实际的项目开发中,咱们一般会遇到,读取配置文件中的参数,那么在SpringBoot中怎么获取配置文件中的参数呢?下面咱们在配置文件中添加以下参数。

server:
  port: 8082
  context-path: /springboot
email:
  username: jilinwula
  password: 123456

  下面咱们在Controller中采用以下的方式读取配置文件中的参数。

@RestController
@RequestMapping("/jilinwula")
public class JilinwulaController {

    @Value("${email.username}")
    private String username;

    @Value("${email.password}")
    private String password;

    @RequestMapping("/helloworld")
    public Object helloWorld() {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("username", username);
        map.put("password", password);
        return map;
    }

}

  咱们能够直接使用@Value注解来获取配置文件中的参数,而且这个注解不仅是在SpringBoot中可使用,这个注解在Spring的项目中也可使用。下面咱们启动项目,并访问http://localhost:8082/springb...地址,看看是否是能够成功的获取配置文件中的参数。

  title

  咱们看上图所示,咱们成功的获取到了配置文件中的参数。但若是有强迫证的人,对于上面的代码不免有些不满意。由于若是咱们要获取配置文件中很是多的参数时,要是按照上面的代码编写,则须要在代码中编写大量的@Value注解,这显然是不合理的。那有没有比较方便的办法呢?答案必定是有的,而且SpringBoot为咱们提供了很是方便的方法获取配置文件中的参数。下面咱们看一下这种方式。

  咱们首先要在项目的pom.xml中添加如下依赖:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.4</version>
            <scope>provided</scope>
        </dependency>

  第一个依赖是自动获取配置文件参数的必须依赖,而下面的依赖,则是能够用注解的方式动态生成get和set方法,这样咱们在开发时,就不用在写get和set方法了,在实际的项目中比较经常使用。在使用lombok生成get和set方法时,还要在IDEA中添加相应的lombok插件,不然IDEA会提示到不到get和set方法的警告。

  title

  其次咱们新建立一下获取配置参数的类,而且添加@ConfigurationProperties注解,该注解会自动将配置文件中的参数注入到类中的属性中(不须要写@Value注解)。而且能够指定prefix参数来指定要获取配置文件中的前缀。具体代码以下:

package com.jilinwula.springboot.helloworld;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

@Component
@ConfigurationProperties(prefix = "email")
@Data
public class EmailProperties {
    private String username;
    private String password;
}

  上面中的@Data,注解就是动态生成get和set方法的因此上述的代码是不须要写get和set方法的。下面咱们看一下Controller中的代码修改:

package com.jilinwula.springboot.helloworld;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/jilinwula")
public class JilinwulaController {

    @Autowired
    private EmailProperties emailProperties;

    @RequestMapping("/helloworld")
    public Object helloWorld() {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("username", emailProperties.getUsername());
        map.put("password", emailProperties.getPassword());
        return map;
    }

}

  下面咱们启动项目并访问接口看看是否可以成功获取配置文件中的参数。

  title

  )


  下面咱们介绍一下在SpringBoot中怎么处理不一样环境中获取不一样的配置参数。下面咱们模拟两人环境一个是开发环境,一个是测试环境,咱们暂时以不一样端口来区分这两个环境的区别。

  application-dev.yml:

server:
  port: 8081
  context-path: /springboot
email:
  username: jilinwula
  password: 123456

  application-test.yml:

server:
  port: 8082
  context-path: /springboot
email:
  username: jilinwula
  password: 654321

  application.yml:

spring:
  profiles:
    active: dev

  这样当咱们在application.yml文件中的参数设置为dev时,SpringBoot项目在启动时就会读取application-dev.yml中的参数。若是咱们将参数设置为test时,则SpringBoot会读取application-test.yml文件中的参数。

  下面咱们分别启动项目而且访问接口:

  • 当参数为dev:

      title

  • 当参数为test:

  title

启动时指定参数

  在上一篇中咱们已经介绍过了咱们可使用java -jar 项目的名字的方式启动SpringBoot项目。而且,该方式还支持指定SpringBoot参数,例如上面刚刚介绍的指定获取同环境的配置参数。具体命里以下:

java -jar jilinwula-springboot-helloworld-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev

  咱们此时继续访问接口发现仍是成功的获取了dev环境中的参数。

  title


  上述内容就是SpringBoot个性化配置的内容,若有不正确,或者须要交流的,欢迎留言,谢谢。


项目源码:

https://github.com/jilinwula/...

原文连接:

http://jilinwula.com/article/...

相关文章
相关标签/搜索